This weekend, i played with nitrogen on my freerunner :



The funny thing is that it is a full web app with the webserver running on the freerunner. Thanks to the nitrogen framework, the code is not bloated as usual and is quite simple.
Example : the clock is refreshed by the server every minutes with these simple statements:
body() ->
Body = [
#panel { class="h1-logo", body = [#image { image="/images/hackable1.gif"} ] },
#label { id=clock, text="10:14"},
#label { id=mylabel, text="" }
],
wf:comet(fun() -> clock_update(clock) end),
wf:render(Body).
clock_update(Clock)->
{_Date, {Hour, Min, _Sec}} = erlang:localtime(),
Value = io_lib:format("~2.10.0B:~2.10.0B", [Hour, Min]),
wf:update(Clock, lists:flatten(Value)),
wf:comet_flush(),
timer:sleep(1000*60),
clock_update(Clock).
Last but not least, the client runs well on my laptop too :

So we have the best of the both worlds (web & desktop) :
- access to native resources thanks to erlang
- event driven code with nitrogen (push with comet)
- customized ui (jQuery)
- distributed client (example : accessing the contact list without installing crappy software)
The main drawback is performance (for the ui part) and memory consumption (i need to make some tests to figure out exactly).
The source code for the nitrogen/erlang part is available here : http://blondon.fr/blog/public/web_s... I'll post the whole app (html, media and css) asap.