Reduce Revisited

The Reduce plugin reflects to find links to pages with calculations that it can perform in sequence. This is a powerful idea but the implementation suggests we can improve speed, power and usability. github

# Speed

We demonstrate that the calculations found on pages can be transformed to source code for other engines. In our example, we create spreadsheet formulas. But better to create javascript source, maybe even javascript asm.js source, which will jit to machine code when evaluated. wikipedia

A better division of responsibility would be to have computation plugins, such as Method plugin in our example, offer the markup to javascript translation.

# Power

Reactive programming is coding with asynchronous data streams. On top of that, you are given an amazing toolbox of functions to combine, create and filter any of those streams. post

The Method plugin is intentionally weak in its supported computations. (Possibly excepting unit conversion which it performs based on 'types' embedded in the names of values.) We can imagine much more powerful abstractions that are still compatible with the linear flow of the lineup.

We'd like to supplement Method with a plugin supporting functional reactive programming using the naming and typing conventions already explored.

We've yet to discover what the inputs and outputs of such a mechanism might be but there is no reason to assume functions so constructed need to be confined to the browser. We could pass them to server-side companions for instrument control or big data applications or even bundle them as generic modules to be used anywhere.

# Useability

Our single-page application offers an interactive exploratory environment where material from many sources can integrate and demonstrate the implications of the integration in a situated and visually rich way.

We're moving in this direction with our introduction of the Lineup model that can be coordinated with the DOM but is not dependent on it.

We see the desirable incremental behavior as we follow links, render pages and bind the plugins they contain. We can still improve our handling of other updates including edits to markup, rearranging pages and maybe even updating position sensitive calculations while items are dragged but not yet dropped.