Discussion on updaters

What is a good method of implementing an updater? What should and shouldn’t an updater do?

An updater shouldn’t update.

Be sure to use a public boolean processor void. Ask frank_ for help.

I second this. Just to expound on it further, some people have been known to hijack the thread messenger processes of the boolean processor voids to override them and implement a double buffered third-level action manager to maintain the consistency and stability of the updater.

[quote=“Rictoo, post:4, topic:412584”][quote author=zachera link=topic=513842.msg3730851#msg3730851 date=1314609902]
Be sure to use a public boolean processor void. Ask frank_ for help.
[/quote]

I second this. Just to expound on it further, some people have been known to hijack the thread messenger processes of the boolean processor voids to override them and implement a double buffered third-level action manager to maintain the consistency and stability of the updater.[/quote]
You forgot the part where they steal oxy and watch their dad die painfully.

My bad.

An “updater” typically focuses majorly on automatic identification of code.

There are plenty of ways to identify code; one could use basic high-level patterns on source-code, although these are likely to break and as a result are /rarely/ still used… remember Sythe’s cheat? :stuck_out_tongue:

The more common fad is to do basic checks on the classfile data, such as constant pool entries or even in some case field names (e.g. if the class has a CONSTANT_Methodref pointing to java/math/BigInteger#modPow, chances are it represents the data of a single protocol frame).
Most of this, though, boils down to manually trickle through the bytecode instructions and perform simple manipulation and checks to determine purpose of code (most people use simple regular expressions via org.apache.bcel.util.InstructionFinder and the like). Those with “evolved” systems prefer to parse code into higher-level expression trees and match these instead, which is usually much cleaner.

pplsuqbawlz’s once developed an “updater” that specified rules as plain logic expression trees (“static decision trees”, if you will). Code released by c`p here earlier in clojure relied on a “heuristic” approach, and ultimately frank_ has discussed and released /partial/ code for updating via machine-learning and statistical classification algorithms.

Ideally, a system would use several methods in conjunction with one another. Using potentially classfile-oriented heuristics (like checking the inheritance hierarchy) combined with perceptrons and support vector machines provides a relatively stable system that isn’t likely to fail.