An Aside: Something for the Geeks

For those who are interested, here is a bit about how this is implemented. You can skip this if you are not interested.

When Rekall exports the form definition, it converts all position information to absolute values. This means, unfortunately, that when it is displayed in the web browser, the form is fixed size. It would be nice if it could resize in the same way as forms to in Rekall itself, but HTML (and CSS) are not up to the job (though two longer term projects would be to see if JavaScript can be used to implement a layout engine equivelant to that in Rekall, and whether Rekall can be extended to support forms with HTML-like layout).

The back-and-forth of data, when form changes are submitted and results are returned, is handled one of two ways. The first (and preferred) way uses the XMLHTTPRequest mechanism to send a request to the server, and to receive a response which contains the changes to the form. Alternatively, within the form there is a hidden iframe element. When the user does something that triggers form submission, the data values in the form are copied into controls in the form in the hidden iframe, which is then submitted. In both cases, the result from the server comprises a chuck of JavaScript which updates the page seen by the user; in the former case it also reconstructs the iframe for the next submission.

The effect is that the user sees the form updating in much the same way if it was running directly in Rekall; the page is not redrawn. This mechanism makes it possible to implement stuff like Rekall tab and stack controls as HTML divs which are hidden or made visible as needed; if the python code in the form was to switch tabs, then the JavaScript that is returned will do this at the browser end.

By the way, before you ask, if you are thinking AJAX, then you are right!