<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.7.6(BH)" -->
<rss version="2.0">
    <channel xmlns:g="http://base.google.com/ns/1.0">
        <title>Planet Maemo: category &quot;feed:f69c53e75954102a301a37ce469c5d7e&quot;</title>
        <description>Blog entries from Maemo community</description>
        <link>http://maemo.org/news/planet-maemo/</link>
        <lastBuildDate>Sun, 24 May 2026 11:16:41 +0000</lastBuildDate>
        <generator>FeedCreator 1.7.6(BH)</generator>
        <language>en</language>
        <managingEditor>planet@maemo.org</managingEditor>
        <item>
            <title>Alas, poor Yorick: History repeats</title>
            <link>http://fredp.lautre.net/blog/2013/11/11/alas-poor-yorick-history-repeats/</link>
            <description><![CDATA[
<p>In my ongoing uphill battle to maintain at least one meaningful post per year in this solitary monologue, here is the new entry I announced earlier today.</p>
<p>I must warn Planet Maemo purists (if there are still any) that it is not, <em>stricto sensu</em>, Maemo-related.</p>
<p>It is, however, a follow-up on previous posts dating back to 2009, so it is arguably not completely off-topic either :-)</p>
<p>You can read it on my new host &amp; blog:</p>
<p><a title="w4.monbo.net/blog/index.php?article33/a-foolish-consistency-is-the-hobgoblin-of-little-minds" href="http://w4.monbo.net/blog/index.php?article33/a-foolish-consistency-is-the-hobgoblin-of-little-minds">w4.monbo.net/blog/index.php?article33/a-foolish-consistency-is-the-hobgoblin-of-little-minds</a></p>
<p>&nbsp;</p>
<span class="net_nemein_favourites">1 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=1e34b1563cedf8a4b1511e3b70f03c3189330463046&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/1e34b1563cedf8a4b1511e3b70f03c3189330463046/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=1e34b1563cedf8a4b1511e3b70f03c3189330463046&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/1e34b1563cedf8a4b1511e3b70f03c3189330463046/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Fred Pacquier &lt;fpacquier@gmail.com&gt;</author>
            <category>feed:f69c53e75954102a301a37ce469c5d7e</category>
            <pubDate>Mon, 11 Nov 2013 20:29:09 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-1e34b1563cedf8a4b1511e3b70f03c3189330463046</guid>
        </item>
        <item>
            <title>In between the cracks : new blog…</title>
            <link>http://fredp.lautre.net/blog/2013/11/11/in-between-the-cracks-new-blog/</link>
            <description><![CDATA[
<p>Belatedly I have realized that going along with big old WordPress for this intermittent blog of mine was probably a mistake.</p>
<p>I use about 1% of its wealth of functionality, and not often enough to become proficient at it. It&#8217;s also slow as molasses on this cheap host I&#8217;ve been using.</p>
<p>Moving to a better host (for many other reasons) also made me aware of the hassle involved in carrying over database contents for such apps.</p>
<p>So instead I painstakingly extracted my posts from WordPress and ported them to a much simpler, lighter and database-less blog app called <a href="http://www.pluxml.org/">PluXml</a>.</p>
<p>There will be a post with actual content appearing shortly on this new media, which makes it two posts this year, a huge improvement on the previous ones :-)</p>
<p>The new IBTC is at <a href="http://w4.monbo.net/blog/">http://w4.monbo.net/blog/</a> and the old one will probably disappear shortly.</p>
<p>&nbsp;</p>
<span class="net_nemein_favourites">2 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=1e34af37d5b672e4af311e3ade6ad774521f2e4f2e4&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/1e34af37d5b672e4af311e3ade6ad774521f2e4f2e4/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=1e34af37d5b672e4af311e3ade6ad774521f2e4f2e4&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/1e34af37d5b672e4af311e3ade6ad774521f2e4f2e4/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Fred Pacquier &lt;fpacquier@gmail.com&gt;</author>
            <category>feed:f69c53e75954102a301a37ce469c5d7e</category>
            <pubDate>Mon, 11 Nov 2013 16:43:49 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-1e34af37d5b672e4af311e3ade6ad774521f2e4f2e4</guid>
        </item>
        <item>
            <title>The Web2py Galaxy : a Note on Webapps</title>
            <link>http://fredp.lautre.net/blog/2012/09/21/the-web2py-galaxy-a-note-on-webapps/</link>
            <description><![CDATA[
<p>Given that Maemo Planet is pretty quiet these days, I thought people wouldn&#8217;t mind a quick and almost, but not quite, off-topic post. Also, it&#8217;s hard to resist turning a bad pun into a blog title :-)</p>
<p>This post is a follow-up on my &#8220;<a href="http://fredp.lautre.net/blog/2009/10/">Season one</a>&#8221; series about the value of web apps in general (and Python with Web2py in particular) as time-resistant, cross-platform tools, carrying over from Windows/Linux PCs to handhelds like the Zaurus, the Nokia tablets (770/N800/N810) and phones (I stopped at the N900, but I&#8217;m pretty sure the N9 and N950 would have worked just as well).</p>
<p>Although I still follow the happenings on TMO, like many former ITT old-timers I finally grew tired after seven years of Nokia switch-and-bait politics, the Meego debacle and Windows alliance being the final straws.</p>
<p>My N900 was feeling orphaned and getting old, so earlier this year I regretfully and reluctantly switched to an Android phone, the Samsung Galaxy Note. From the looks of <a href="http://talk.maemo.org/showthread.php?t=76226">this thread on TMO</a>, I&#8217;m not the only one.</p>
<p>I guess my opinion about the system is similar to that of most former N900 users.</p>
<p>On the one hand, the sheer mass of the Android user and developer base (the only one on par with iOS/iPhone) has turned it into a rich and lively user-centric &#8220;market&#8221; : even at the cost of weeding out the chaff, the number and variety of useful (and often free, even open source) day-to-day apps is incredible, so just <em>using</em> the phone is easy and pleasurable enough.</p>
<p>On the other hand, for a born tinkerer and former Maemo lover, there are a lot of irritants beneath the pretty skin.</p>
<p>Technically, the multi-tasking is crap, but that is hardly news.<br />
Worse, Google has put quite some effort into hiding and burying the open, Linux roots under piles of &#8220;shiny-shiny&#8221;&#8230; which means hordes of individual users are putting back many times that amount of effort into unearthing it !</p>
<p>Coming from Maemo, the level of obfuscation and the number of mazes needed to solve (normally) simple tasks is a real shock : flashing alternative firmwares, rooting, obtaining a terminal with a proper shell and basic utilities&#8230; not to mention &#8220;simple&#8221; add-ons like ssh and Python !</p>
<p>Community-wise, the level of fragmentation is astronomical : no ITT/TMO equivalent, just a myriad of user-level forums around the ultra-nerd XDA, the sum total of disinformation so high it&#8217;s really hard to tell real answers from wishful thinking.</p>
<p>But this post is not about Android itself : let&#8217;s just say that things that were so simple and effortless in Maemo, like having a shell, a python interpreter and running your own scripts, have turned into needlessly complicated tasks, with significant learning curves, in Android.</p>
<p>But once you&#8217;ve done that, lo and behold !</p>
<p>You just move over your web2py archive (complete with apps, code and data), unpack it in the SL4A scripts folder, and run your (painstakingly modified) launcher script through the SL4A UI, and&#8230; that&#8217;s it.</p>
<p>Your old web apps from all previous mobile devices just start working again (only faster, as usual).</p>
<p>The same can&#8217;t be said, unfortunately, for the couple of PyQt apps I made for the N900&#8230; so : QED :-)</p>
<span class="net_nemein_favourites">3 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=9836589603d811e2955e29c1f026576b576b&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/9836589603d811e2955e29c1f026576b576b/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=9836589603d811e2955e29c1f026576b576b&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/9836589603d811e2955e29c1f026576b576b/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Fred Pacquier &lt;fpacquier@gmail.com&gt;</author>
            <category>feed:f69c53e75954102a301a37ce469c5d7e</category>
            <pubDate>Fri, 21 Sep 2012 09:19:15 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-9836589603d811e2955e29c1f026576b576b</guid>
        </item>
        <item>
            <title>Help needed with the Maemo sound system : N900 as an “audiophile” portable music player</title>
            <link>http://fredp.lautre.net/blog/2012/03/31/help-needed-with-the-maemo-sound-system-n900-as-an-audiophile-portable-music-player/</link>
            <description><![CDATA[
<p>&nbsp;</p>
<p>This post is a shameless plug for a new project started <a href="http://talk.maemo.org/showthread.php?t=83270">in this TMO thread</a>.</p>
<p>The goal is to take advantage of the &#8220;USB Host&#8221; (h-e-n) package to stream digital audio through the USB port.</p>
<p>In the portable music player scenario, the N900 is used for digital music storage (32BG internal + µSD), user interface software (like <em>Rockbox</em>) and decoding music files (like mp3 or flac) to uncompressed PCM format.</p>
<p>This stream is then sent <strong><em>out</em></strong> through the USB port to an external digital-to-analog converter (DAC) and headphone amplifier, bypassing the N900&#8242;s own electronics, to achieve maximum sound quality (<em>see the first post in the thread for a more detailed explanation</em>).</p>
<p>Such DAC/amp &#8220;combos&#8221; exist in portable form, such as the <a href="http://www.headfonia.com/the-upgrade-fiio-e17-alpen/">Fiio E17</a> and <a href="http://www.ibasso.com/en/products/show.asp?ID=73">iBasso D-Zero</a>.</p>
<p>Another (technically similar) scenario is to stream sound <strong><em>in</em></strong> through the USB port, for example from a portable mixing console, and use the N900 as a high-quality recording device.</p>
<p>Right now we have proof-of-concept for both use cases, as h-e-n with power-kernel automatically supports such USB audio functions, and the corresponding ALSA device is created.</p>
<p>Using command-line tools in xterm (like <em>mplayer</em>, <em>MOC</em> or <em>arecord</em>), sound can be streamed to/from this ALSA device, with very good results.</p>
<p>One limitation of this method, however, is that it doesn&#8217;t work with Hildon GUI apps (like the stock Maemo media player, or the <em>Rockbox</em> port).</p>
<p>Another is that it doesn&#8217;t use the N900&#8242;s DSP, doing all the encoding/decoding in software, with higher than necessary CPU usage.</p>
<p>Our present understanding, so far, is that we would need to:</p>
<ul>
<li>tweak <em>PulseAudio</em> to make the USB &#8220;sound card&#8221; available system-wide,</li>
<li>and use <em>gstreamer</em> to take advantage of the <em>mafw</em> framework and the DSP.</li>
</ul>
<p>&nbsp;</p>
<p>Unfortunately none of us end users really understand how this <em>alsa/mafw/gstreamer/pulseaudio</em> puzzle fits together inside Maemo. Conventional wisdom for regular desktop Linux does not seem to apply, and all experiments to date have failed.</p>
<p><strong>If you are reading this and are knowledgeable about the specifics of the Maemo sound system&#8230; and enjoy a challenge&#8230; please do chime in ! :-)</strong></p>
<p>&nbsp;</p>
<span class="net_nemein_favourites">8 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=e85fc1247b2d11e194fd2f17f1fc36333633&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/e85fc1247b2d11e194fd2f17f1fc36333633/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=e85fc1247b2d11e194fd2f17f1fc36333633&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/e85fc1247b2d11e194fd2f17f1fc36333633/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Fred Pacquier &lt;fpacquier@gmail.com&gt;</author>
            <category>feed:f69c53e75954102a301a37ce469c5d7e</category>
            <pubDate>Sat, 31 Mar 2012 11:57:46 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-e85fc1247b2d11e194fd2f17f1fc36333633</guid>
        </item>
        <item>
            <title>Yup, I know it’s been a long time…</title>
            <link>http://fredp.lautre.net/blog/2011/11/25/yup-i-know-its-been-a-long-time/</link>
            <description><![CDATA[
<p style="text-align: center;">&#8230;as predicted. But this is what happens when cracks get fewer, far between and a bit tight :</p>
<p><a href="http://fredp.lautre.net/blog/wp-content/between-the-cracks.jpg"><img class="aligncenter size-full wp-image-313" title="between-the-cracks" src="http://fredp.lautre.net/blog/wp-content/between-the-cracks.jpg" alt="" width="500" height="375" /></a></p>
<p style="text-align: center;"><em>Ah, the moon&#8217;s too bright</em><br />
<em> The chain&#8217;s too tight</em><br />
<em> The beast won&#8217;t go to sleep</em><br />
<em> I&#8217;ve been running through these promises to you</em><br />
<em> That I made and I could not keep</em><br />
<em>(Leonard Cohen)</em></p>
<p>&nbsp;</p>
<span class="net_nemein_favourites">1 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=16d86d0417a511e1a9b1fb60d3dadbbddbbd&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/16d86d0417a511e1a9b1fb60d3dadbbddbbd/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>5 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=16d86d0417a511e1a9b1fb60d3dadbbddbbd&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/16d86d0417a511e1a9b1fb60d3dadbbddbbd/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Fred Pacquier &lt;fpacquier@gmail.com&gt;</author>
            <category>feed:f69c53e75954102a301a37ce469c5d7e</category>
            <pubDate>Fri, 25 Nov 2011 19:44:28 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-16d86d0417a511e1a9b1fb60d3dadbbddbbd</guid>
        </item>
        <item>
            <title>SnXM : to package, or not to package ?</title>
            <link>http://fredp.lautre.net/blog/2010/10/11/snxm-to-package-or-not-to-package/</link>
            <description><![CDATA[
<p>Well, as I&#8217;ve had the surprise (and honour, thanks Jaffa!) of appearing in today&#8217;s <a href="http://www.mwkn.net/2010/41/announce.html#announce-6" target="_blank">Maemo Weekly News</a>, I guess I might as well expand a bit on that &#8220;packaging issue&#8221; Andrew mentions, and the subsequent &#8220;plea for help&#8221;. In my view there&#8217;s quite a bit more to that issue than shown in the quick exchange in the <a href="http://talk.maemo.org/showthread.php?t=63522&amp;page=3" target="_blank">SnXM topic</a> on t.m.o.</p>
<p>On the surface, it&#8217;s all about available free time and (lack of) know-how, as always. As soon as the app was usable I made it available as a<em> tar.gz</em> archive, with a helper shell script inside for installation. Clearly the vast majority of my three-to-six self-declared &#8220;users&#8221; got away with it, insofar as they immediately found a bug&#8230; Then one politely inquired if/when it would be available in the <em>maemo </em>&#8220;repos&#8221;.</p>
<p>My terse, on-the-spot answer was: &#8220;<em>I don&#8217;t think so&#8230; I have strictly zero experience in packaging .debs and of course even less in how the maemo repos work. I have a feeling it would take me more time to learn all that than to  code the app itself, and I already have too little time as it is. The entire source is in the .tgz package however, so if someone more  knowledgeable wants to make a .deb out of it, even if it&#8217;s not in a  repo, that could at least help some.</em>&#8221;</p>
<p>Actually that is not the entire, candid truth. I <em>did</em> give it a try a few years ago, in the early days of the <em>770</em> tablet, when I knew no better. And what a painful, not to mention unsuccessful, experience that was. I wasn&#8217;t alone in that, either, and stronger souls than me lost hair over seemingly trivial issues like icons and task bars and such.</p>
<p>Of course one might argue that things are better now, with more documentation and more collective knowledge to share, which is true&#8230; but last time I looked, the <em>actual process itself</em> hasn&#8217;t become any simpler, and for good reason : it&#8217;s passed down as word of law from <em>Maemo</em>&#8216;s <em>debian</em> roots, just like <em>Meego</em> will get <em>rpm</em>, and those are just facts of life. In some ways there have even been regressions : in <em>Maemo4</em> there was a GUI helper app by <em>Khertan</em>, <em>PyPackager</em>, to help beginners seeking to craft their first <em>.deb</em> package, but it&#8217;s not available (in that form) for <em>Maemo5</em>.</p>
<p>So yes, I still feel strongly against spending scarce time and energy getting that stuff right, when I could use it to improve the app itself &#8212; I&#8217;m the first user, after all. <strong>But that&#8217;s not the entire story, far from it</strong>.</p>
<p>I also question the very logic of packaging a <strong>PyQt application</strong>.</p>
<p>You see, there is a huge difference between such apps (<em>any</em> Python app, actually) and regular, binary apps compiled from C or C++ : under Linux, they install and run just fine in &#8220;user-space&#8221; (i.e. somewhere below <em>/home/user/</em>), even in non-Linux filesystems (like <em>MyDocs</em>) because they have no real <em>executable</em> files. Just type &#8220;<em>python appname.py</em>&#8221; and you&#8217;re go.</p>
<p>Another important difference is that Python code is inherently <em>portable : </em>Python <em>aficionados</em> are not just wimps who can&#8217;t handle a compiler, they also tend to be <em>platform nomads</em> as well.</p>
<p>Combine the two factors above, and suddenly that good old <em>.tar.gz</em> archive starts to make a whole lot of sense. I can drop it just about anywhere on any of my Windows or Linux PCs, my N900 of course, and even on good old N8xO, and it runs. My guess is it would also work on MacOS X. Heck, I could even keep it in a <em>DropBox</em> folder and run it from there&#8230;</p>
<p>Everything grouped underneath a single app folder: code, user settings and data. Full automatic backup with standard platform method. Instant migration between devices. Almost as good as a <em>web app</em>, if it weren&#8217;t for that tiny <em>PyQt</em> requirement :-)</p>
<p>Now, what&#8217;s to be gained by packaging such an app ?</p>
<p>One package per platform, for starts. <em>Debian standard</em> or not, a <em>Maemo5</em> package would likely install only on a N900 (if only because of <em>/opt</em>), likely not on <em>Maemo4 </em>or on a regular <em>debian-like</em> PC. Not to mention <em>rpm</em>-based Linux, Windows, or MacOS. Talk about code reuse and leveraging skills&#8230;</p>
<p>More dumb scaffolding code, for seconds : a simple app that expects to find everything inside its own cosy nest will need platform detection and additional logic to store and retrieve all its bits and pieces according to local conventions&#8230; whereas SnXM has exactly <em>two </em><strong>#ifdef</strong><em><strong> </strong></em>equivalents, and that&#8217;s only because it&#8217;s optimized for <em>looks</em> on the N900. <em>Twidi</em>&#8216;s excellent (and much, much more complex) <em>GRead</em> needed exactly <em>three </em>lines tweaked to run on the older Qt available on <em>Maemo4</em>, etc.</p>
<p>Dependencies ? <em>PyQt</em> itself is &#8220;in the repos&#8221;, along with many platform-specific python modules, and the Python &#8220;batteries included&#8221; model reduces the need for third-party modules. These can always be bundled inside the archive anyway: SnXM has exactly <em>one</em>.</p>
<p>Updates/upgrades ? With basic precautions in place (no default <em>.ini</em> file or empty database, etc.), it&#8217;s as easy as download the new archive and unpack on top of the previous version. You get the new code and functionality, with existing user settings and data. For <em>GRead</em> on the N900, I even do a <em>git pull</em> from <em>twidi</em>&#8216;s Github URL and that&#8217;s that.</p>
<p>So what&#8217;s left ? An icon and a .desktop file placed in the right spots that need root privileges ? Isn&#8217;t that a rather high price for something &#8220;<em>sh snxm.setup&#8221;</em> does in six lines of shell ?</p>
<p>Okay, rant over. I don&#8217;t dispute that for an individual user who just wants to use an app on his one device, a platform-native installer is a bonus, especially as he&#8217;s often been trained to believe it is the Only True Way :-)</p>
<p>However, in this case, and specifically for the N900, I believe the only reasonable compromise would be a <em>.deb package</em> which :</p>
<ul>
<li>keeps the monolithic aspect of the app, i.e. installs the whole <em>enchilada</em> to /home/user/MyDocs/SnXM for example,</li>
<li>just takes care of placing the launcher, desktop file and icons in the usual places.</li>
</ul>
<p><span style="color: #ffffff;">&#8216;</span></p>
<p>I&#8217;m not even sure this is technically possible, and it certainly isn&#8217;t standard/approved practice as I understand it.</p>
<p>But if someone wants to do it, I&#8217;ll gratefully be proven wrong :-)</p>
<span class="net_nemein_favourites">5 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=88183396d57f11dfa892ed0f3da4be09be09&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/88183396d57f11dfa892ed0f3da4be09be09/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>1 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=88183396d57f11dfa892ed0f3da4be09be09&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/88183396d57f11dfa892ed0f3da4be09be09/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Fred Pacquier &lt;fpacquier@gmail.com&gt;</author>
            <category>feed:f69c53e75954102a301a37ce469c5d7e</category>
            <pubDate>Mon, 11 Oct 2010 20:52:11 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-88183396d57f11dfa892ed0f3da4be09be09</guid>
        </item>
        <item>
            <title>SnXM, the Simplenote client for Maemo5</title>
            <link>http://fredp.lautre.net/blog/2010/10/08/snxm-the-simplenote-client-for-maemo5/</link>
            <description><![CDATA[
<p>Yes, yes, I&#8217;m painfully aware that it was ages ago I promised a &#8220;Season Three&#8221; about <em>Hyakutake</em> that has, so far, failed to materialize.</p>
<p>What <em>didn&#8217;t</em> fail to happen, however, is something I anticipated in a previous post&#8230; Since that time I became ever more engrossed with the speed of Python on the N900, the release of a Nokia-sponsored, beautifully &#8220;Hildonized&#8221; version of PyQt for Maemo5, and the wealth of great community applications that ensued : <em>KhtEditor</em>, <em>DropN900</em>, <em>GRead</em>, to name but a few.</p>
<p>Until, of course, I found an &#8220;itch to scratch&#8221; and a plausible excuse to make my own.</p>
<p>The itch was <strong>Simplenote</strong>, a <a href="http://simplenoteapp.com/" target="_blank">web service</a> that lets you jot down quick text notes and access them from anywhere. Think of it as a <em>KISS</em> version of <strong>Evernote</strong> that handles <em>only plain text</em>, but fast and well, especially when used off-line through native clients. There are quite a few such apps, for Windows, Mac OS and some mobile platforms : iOS and Android obviously, also Palm webOS, but no Maemo, as usual.</p>
<p>That was bait enough for me to take the plunge. After all, it did have &#8220;<em>simple</em>&#8221; in it, didn&#8217;t it ?&#8230;</p>
<p>So here is version 1.0 of <strong>SnXM</strong>, my very first PyQt app for the N900. And onwards, I hope : I&#8217;m confident it&#8217;s almost as future-proof as a <em>web app</em>, and the name reflects that &#8212; <strong>XM</strong> is 990 in Roman numerals :-)</p>
<p>It may not be the most polished UI out there (I still have much to learn about Qt), but it works. If you are a <em>Simplenote</em> user, or were waiting for a Maemo client to try it out (as I did with Evernote, Dropbox and Google Reader), check out the <em>talk.maemo.org</em> <strong><a href="http://talk.maemo.org/showthread.php?t=63522" target="_blank">release topic</a></strong> and pipe in&#8230;</p>
<p>Enjoy!</p>
<span class="net_nemein_favourites">4 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=6383b0f4d31411dfa9fd59c57e41be40be40&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/6383b0f4d31411dfa9fd59c57e41be40be40/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=6383b0f4d31411dfa9fd59c57e41be40be40&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/6383b0f4d31411dfa9fd59c57e41be40be40/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Fred Pacquier &lt;fpacquier@gmail.com&gt;</author>
            <category>feed:f69c53e75954102a301a37ce469c5d7e</category>
            <pubDate>Fri, 08 Oct 2010 19:00:56 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-6383b0f4d31411dfa9fd59c57e41be40be40</guid>
        </item>
        <item>
            <title>Season Two — oh, and one more thing…</title>
            <link>http://fredp.lautre.net/blog/2010/01/29/season-two-oh-and-one-more-thing/</link>
            <description><![CDATA[
<p>Yes, I know, the previous post was supposed to be the last in <em>Season Two</em>. But Frederik&#8217;s comment there suddenly reminded me that I had introduced the series as a replacement for a <em>demo</em> that I didn&#8217;t get to make. And after a lot of hot air, here I was postponing any actual <em>glance</em> at the app itself until <em>Season Three</em>, which will clearly be a while in the making&#8230; not fair on the reader, I guess.</p>
<p>So today, on a rainy day off, I set out to actually <em>do </em>that demo, while also recording it. I am not well versed at all in the mysteries of video recording, editing and such, so it took me quite a few trials and errors to find something that I could manage. Initially I thought it would be simpler to record a screencast on each machine, and then somehow paste them side-by-side in the same video. That failed abysmally, so I went back to filming both devices together, finger included, with my digital camera. I am not an expert photographer either, so there were problems with lighting, focusing and whatnot. Then, over the course of an afternoon, I learned plenty of interesting stuff: how to convert the huge MOV file from the camera to a more manageable AVI; how to create a file with the subtitles in it (I <em>really</em> didn&#8217;t want to tackle a voice overdub!); how to generate a second AVI with those subtitles &#8220;burnt into&#8221; the video; how to create a hosting account and upload the masterpiece, etc. All reusable skills, I&#8217;m sure :-)</p>
<p>The result is two minutes long rather than the five planned for the lightning talk in Amsterdam, but I guess it&#8217;s enough to get the gist of it. In retrospect, I&#8217;m actually <em>relieved</em> I didn&#8217;t have to do this &#8220;live&#8221;&#8230;</p>
<p>I chose the N810 for the demo because it is the smallest tablet and would block less of the laptop&#8217;s screen. Both machines are connected to a third host (10.10.10.10), the tablet on port 9000 to <em>web2py</em>, and the laptop on port 8000 to <em>orbited</em>. Both browsers (<em>Tear </em>and <em>Firefox</em>, respectively) are full screen.</p>
<p>Here you go: enjoy, feedback welcome!<br />
<code> </code><br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="640" height="480" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=9073663&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="640" height="480" src="http://vimeo.com/moogaloop.swf?clip_id=9073663&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object><br />
<a href="http://vimeo.com/9073663">Hyakutake demo</a> from <a href="http://vimeo.com/user3067652">fpp</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<span class="net_nemein_favourites">9 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=607785460d1e11dfbf7c797f44389f799f79&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/607785460d1e11dfbf7c797f44389f799f79/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>1 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=607785460d1e11dfbf7c797f44389f799f79&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/607785460d1e11dfbf7c797f44389f799f79/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Fred Pacquier &lt;fpacquier@gmail.com&gt;</author>
            <category>feed:f69c53e75954102a301a37ce469c5d7e</category>
            <pubDate>Fri, 29 Jan 2010 21:02:46 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-607785460d1e11dfbf7c797f44389f799f79</guid>
        </item>
        <item>
            <title>Season Two — touchdown</title>
            <link>http://fredp.lautre.net/blog/2010/01/16/season-two-touchdown/</link>
            <description><![CDATA[
<p>Well, you can&#8217;t go much further out than Pluto without leaving the neighbourhood altogether, so it&#8217;s back to Earth now&#8230;</p>
<p>We will conclude <em>Season Two</em> with a quick but much-needed reality check:</p>
<p>Does the system work ? Yes. Surprisingly well, one might say, for something that should not be possible <em>by design</em>.</p>
<p>Is it useful ? Definitely. Once you see it in action it tends to give you ideas for other uses: displaying digital images; a family agenda; sending short messages or reminders from outside to those at home, and so on. There is much potential in having a full-blown web app server on the remote-command side; using it just to display a menu of icons is admittedly trivial, but you can stray from that initial approach for more elaborate actions. Like HTML-scraping the target and displaying a custom version on the remote instead of the original page; forms for data entry; remote controlling a gallery; automatically displaying sites depending on the weekday and hour, <em>cron</em>-like. And certainly a lot more I just didn&#8217;t think of.</p>
<p>Fine, but did it solve my original problem ? Not really, because in the meantime an N900 joined the family, so I still have too many devices :-)</p>
<p>After this rather high-level view of the <em>what</em> and <em>why</em>, I plan (if there&#8217;s interest&#8230;) to follow up with a more technical, hands-on <em>Season Three</em> about the <em>how</em>: the innards of <em>Hyakutake</em> as an application, its various bits &#8216;n pieces, their installation, configuration, and even &#8212; gasp &#8212; <em>actual code</em>. And screenshots :-)</p>
<p>Any takers  ?</p>
<span class="net_nemein_favourites">10 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=0bd2dd9c028d11dfac37add7a024f8e1f8e1&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/0bd2dd9c028d11dfac37add7a024f8e1f8e1/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>2 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=0bd2dd9c028d11dfac37add7a024f8e1f8e1&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/0bd2dd9c028d11dfac37add7a024f8e1f8e1/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Fred Pacquier &lt;fpacquier@gmail.com&gt;</author>
            <category>feed:f69c53e75954102a301a37ce469c5d7e</category>
            <pubDate>Sat, 16 Jan 2010 05:00:37 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-0bd2dd9c028d11dfac37add7a024f8e1f8e1</guid>
        </item>
        <item>
            <title>Season Two — the view from Pluto</title>
            <link>http://fredp.lautre.net/blog/2010/01/15/season-two-the-view-from-pluto/</link>
            <description><![CDATA[
<p>Once I had this general understanding of how things stood, which took a good while, choosing a <em>COMET</em> server package was no big deal.</p>
<p>There weren&#8217;t <em>that</em> many to start with, and I already knew that my own use case was about the simplest possible. That meant I didn&#8217;t need an industrial-strength, 900-pound gorilla: just something that worked, and that I could understand enough of to use it within a reasonable time.</p>
<p>Quickly enough, I had it narrowed down to <a href="http://orbited.org/" target="_blank"><em>Orbited</em></a>, which I chose, essentially, for three reasons:</p>
<ul>
<li>it&#8217;s written in Python, which usually means few platform-related issues and easy installation. Using it on my Windows desktop for learning and coding, then on a Linux box for production, was painless. It also meant that most examples of interfacing with a web app server also featured Python servers (generally <em>Django</em>), which made it easier to grasp what I&#8217;d need to do on the <em>web2py</em> side.</li>
<li>the latest version (0.7.10) came with its own bundled <em>STOMP</em> server (<em>MorbidQ</em>). As usual, it is pronounced &#8220;not scalable and for testing purposes only&#8221;, but despite the weird name it worked perfectly for my modest needs. One less thing to worry about.</li>
<li>above all, it was, at the time, the less undocumented one. There is, at least, a web site with attempts at some documentation, and a Google group to mine. It&#8217;s also well enough established that several people have written articles, blog posts and Howtos elsewhere. It was by no means a quick hit &#8216;n run, but it was enough to cobble together a basic understanding for my simple use case.</li>
</ul>
<p><code> </code><br />
<em>Orbited</em> also provides a <em>STOMP client</em> library in Python, that you can use in the web app server side of things (<em>web2py</em> here) to send messages (to the <em>COMET</em> server, via <em>MorbidQ</em>). It just doesn&#8217;t explicitly mention it, so I must admit that I hadn&#8217;t noticed at first, and downloaded another one from somewhere else :-)</p>
<p>One thing that is very often lacking in documentations (in general, not just here!) is a simple diagram that helps the newbie understand what is going on, the &#8220;big picture&#8221;. So I hacked a quick one for this post, in case my explanations weren&#8217;t clear&#8230;</p>
<div id="attachment_228" style="width: 550px" class="wp-caption aligncenter"><a href="http://fredp.lautre.net/blog/wp-content/Hyakutake.png"><img class="size-full wp-image-228" title="Hyakutake" src="http://fredp.lautre.net/blog/wp-content/Hyakutake.png" alt="Hyakutake general architecture" width="540" height="525" /></a><p class="wp-caption-text">Hyakutake general architecture</p></div>
<p>Of course, the coloured arrows are just data flows, they don&#8217;t indicate where the three servers (<em>daemons</em>, in Unix parlance) are actually installed. Conceptually, all permutations are possible: <em>web2py</em> could be on the 770, and <em>Orbited</em> on the laptop. Or in reverse, if you&#8217;re in a playful mood :-). <em>MorbidQ</em> comes with <em>Orbited</em>, but could be sent to the other device, or to a third one. Then again, you can group everything at one place: on the laptop, on the tablet (if you&#8217;re in no hurry), on a third, separate device&#8230; it&#8217;s just a matter of configuration files, IP addresses and/or URLs.</p>
<p>In my case I used the (Windows) laptop to host all development and testing, then moved all the server parts to a Linux box that already runs my other <em>web2py</em> stuff, leaving the clients to be&#8230; just clients.</p>
<span class="net_nemein_favourites">10 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=e1831552019711dfaefd89673e9d0f5d0f5d&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/e1831552019711dfaefd89673e9d0f5d0f5d/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>2 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=e1831552019711dfaefd89673e9d0f5d0f5d&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/e1831552019711dfaefd89673e9d0f5d0f5d/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Fred Pacquier &lt;fpacquier@gmail.com&gt;</author>
            <category>feed:f69c53e75954102a301a37ce469c5d7e</category>
            <pubDate>Fri, 15 Jan 2010 05:00:20 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-e1831552019711dfaefd89673e9d0f5d0f5d</guid>
        </item>
        <item>
            <title>Season Two — Stomp back to Orbit, Ed!</title>
            <link>http://fredp.lautre.net/blog/2010/01/14/season-two-stomp-back-to-orbit-ed/</link>
            <description><![CDATA[
<p>So here are the items I brought back from my trek in the wilderness, after I didn&#8217;t get eaten.</p>
<p>First, I quickly realised there would be no &#8220;cut &#8216;n paste, roll-my-own&#8221; here. <em>COMET</em> is a complex beast, covering a good handful of different techniques, relying heavily on javascript code and <em>AJAX</em>, and accordingly having to negotiate with browsers to work around incompatibilities. The only way someone like me could use that stuff would be through a ready-made package to encapsulate the complexity of setting up the communication channels between clients and servers, on both sides.</p>
<p>Speaking of which, I also discovered that I would have to add another web server to my toolbox. You see, <em>http</em> is a <em>stateless</em> protocol, by design: a client sends a request to a server, the server responds, and both happily forget about each other right away. There is normally no way for a client to stay connected to a server indefinitely, much less for a server to send data to a client that didn&#8217;t ask for anything&#8230; Pushing the boundaries of the protocol specs <em>that hard</em> requires active participation of the server, to say the least. So <em>COMET</em> servers tend to be specialized and dedicated to their function &#8212; feeding their clients. If these also have need of standard, request/response http services, they must ask somewhere else.</p>
<p>So, if a picture is starting to build in your mind, you may see where this is leading: if one client communicates with a &#8220;normal&#8221; web server (say, <em>web2py</em>), and the result of that interaction is pushed to another client by an unrelated <em>COMET</em> server, where is the missing link?</p>
<p>The answer is that the two <em>http</em> servers must communicate between them through a &#8220;message queue&#8221;, using a protocol which adds yet another entry to the alphabet soup: <a href="http://stomp.codehaus.org/" target="_blank"><em>STOMP</em></a> (<em>Streaming Text Orientated Messaging Protocol</em>). A complete <em>COMET </em>package will also include a <em>STOMP</em> server, such as <em>MorbidQ </em>or <em>RabbitMQ</em>&#8230; it sort of piles up, doesn&#8217;t it ? :-)</p>
<p>Finally, I learnt that the various methods used by <em>COMET</em> servers to stream data to their clients <em>all</em> had their specific pros and cons: that&#8217;s why there are several, to choose the best one for a given job. Fortunately for me, those pros and cons mostly seem to revolve around the same couple of issues: scalability and performance with many clients, and/or fine-grained control over the appearance of the content being streamed to a client. As I only intend to have one client at a time, and basically just switch it from one Web site to another, this, at least, was something I wouldn&#8217;t have to worry about.</p>
<p>So I set out to summarily evaluate the prominent <em>COMET</em> packages, and rather quickly settled on the one we&#8217;ll see next: <em>Orbited</em>.</p>
<span class="net_nemein_favourites">12 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=a5eaa2a400ce11df947b81bfcad34de04de0&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/a5eaa2a400ce11df947b81bfcad34de04de0/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>2 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=a5eaa2a400ce11df947b81bfcad34de04de0&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/a5eaa2a400ce11df947b81bfcad34de04de0/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Fred Pacquier &lt;fpacquier@gmail.com&gt;</author>
            <category>feed:f69c53e75954102a301a37ce469c5d7e</category>
            <pubDate>Thu, 14 Jan 2010 05:00:13 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-a5eaa2a400ce11df947b81bfcad34de04de0</guid>
        </item>
        <item>
            <title>Season Two — heart of the COMET</title>
            <link>http://fredp.lautre.net/blog/2010/01/13/season-two-heart-of-the-comet/</link>
            <description><![CDATA[
<p>Actually, I was both right and wrong.</p>
<p>I was right in that my goal <em>is</em>, ultimately, achievable. But I was severely off-base in my estimation of what it would take to get there.</p>
<p>Like Alice in Wonderland, I found myself dragged further and further down into a whole, new and unsuspected world of unknown concepts, with its own rich alphabet soup of acronyms and protocols.</p>
<p>You see, it turns out that what I wanted to do is just not <em>that</em> easy &#8212; yet. It <em>will</em> be, in time, because among plenty of other things, the upcoming <a href="http://dev.w3.org/html5/spec/Overview.html" target="_blank">HTML5 </a>standard defines a new javascript API, <a href="http://www.websockets.org/about.html" target="_blank">WebSocket</a>, which is designed to solve just that problem: bidirectional communication between client and server.</p>
<p>This is all still just a draft, however, and is mostly not supported by common, currently available browsers. In the meantime, the usable solutions are &#8212; <a href="http://cometdaily.com/2007/12/11/the-future-of-comet-part-1-comet-today/" target="_blank">self-admittedly</a> &#8211;  a hodge-podge of clever hacks and kludges. This mixture has been brewing and evolving behind the scenes since around 2006, and goes by several names. <a href="http://en.wikipedia.org/wiki/Comet_(programming)" target="_blank">COMET</a>, however, seems to have caught on as the catchy nickname  for this field of Web programming, much as <em>AJAX</em> emerged some years ago to sum up the various uses of <em>javascript </em>and <em>XmlHttpRequest</em> to enhance web interfaces.</p>
<p>This is no coincidence, as most <em>COMET</em> techniques rely heavily on <em>AJAX</em> and/or <em>XmlHttpRequest.</em> The name itself is not an acronym, but an <em>AJAX</em>-related pun.</p>
<p>The analogy further extends to the state of the field as a whole, which is strongly reminiscent of how <em>AJAX</em> simmered in the years before it was known by that name and went mainstream: elite, bleeding-edge, black-magic like. Full of obscure jargon and implicit concepts. Sparse, elliptic, scattered documentation. Tutorials with more holes than Swiss cheese. Mutually contradictory HOWTOs on the same page because of rapid API obsolescence and no versioning. Browser incompatibilities &#8230; you name it, it&#8217;s there.</p>
<p>For the unwary explorer who crosses this kind of New Frontier in his sandals and shorts, hoping for a &#8220;quick-in, quick out&#8221;, it means long hours of honing Google searches, wandering through a maze of links, cross-referencing, second-guessing, correlating, hoping something will start making sense at some point&#8230; like climbing every dune in the Sahara to see what&#8217;s behind, hoping it&#8217;s an oasis.</p>
<p>Normally I would flee such a state of affairs immediately, and let it mature for some years until it reaches &#8220;normal human&#8221; levels, like <em>AJAX</em> did. But this itch must have been unusually strong, for somehow I stuck in there, meandered through the swamp again and again, to finally emerge with a couple of trophies.</p>
<p>That&#8217;s when I decided that if I succeeded in my project, it would definitely bear the name of a comet :-)</p>
<span class="net_nemein_favourites">8 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=47cf4d96000611dfa70925cadb7ecbedcbed&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/47cf4d96000611dfa70925cadb7ecbedcbed/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>4 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=47cf4d96000611dfa70925cadb7ecbedcbed&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/47cf4d96000611dfa70925cadb7ecbedcbed/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Fred Pacquier &lt;fpacquier@gmail.com&gt;</author>
            <category>feed:f69c53e75954102a301a37ce469c5d7e</category>
            <pubDate>Wed, 13 Jan 2010 05:00:55 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-47cf4d96000611dfa70925cadb7ecbedcbed</guid>
        </item>
        <item>
            <title>Season Two — the road ahead</title>
            <link>http://fredp.lautre.net/blog/2010/01/12/season-two-the-road-ahead/</link>
            <description><![CDATA[
<p>Here is how I envisioned things would happen&#8230;</p>
<p>The laptop I would turn into a wall-mounted or table-top display, using an enclosure similar to any number of the &#8220;photo frame&#8221; mods you can find on the Web. Only the 12&#8243;, 1024*768, non-tactile screen would appear.</p>
<p>Then I would write a web app (with <em>web2py</em>, of course) to serve a finger-friendly UI tailored for the 770 form factor, using mostly just big icons. These icons would form a sort of (rather shallow) menu, enabling one-touch access to all the mundane Web services that get used daily or frequently around the house:</p>
<ul>
<li>real-time schedules for the nearby bus stop (to the kid&#8217;s school) and train station (to work)</li>
<li>real-time traffic maps for the area</li>
<li>TV programs for tonight</li>
<li>weather for tomorrow</li>
<li>movies at the local theater</li>
<li>current playlist on my favourite FM station</li>
<li>anything else that might come up&#8230;</li>
</ul>
<p><code> </code><br />
So far, nothing very original. The goal that made the project interesting was that pressing an icon on the 770 would <em>not</em> display the resulting page on the tablet itself, but in a full-screen browser <em>on the laptop</em>. In essence, the tablet would be a Web remote command for the laptop, itself acting as a remote display.</p>
<p>This way, I thought, anyone in the family could use the system easily, the information would be displayed on a larger screen and could be viewed collectively from a distance. When idle, the laptop screen would also serve as a large wall clock.</p>
<p>This &#8220;remote command&#8221; stuff was a totally pie-in-the-sky notion at the time, and the prospect of doing something new (to me) was of course part of the appeal. The <em>http</em> protocol is such a resilient beast, and has been made to do so many unforeseen things over the years, that I felt naively confident: an hour of googling would certainly yield enough prior art, clues and similar projects to get me started, and from there I would cut &#8216;n paste my own.</p>
<p>Boy, was I mistaken&#8230; :-)</p>
<span class="net_nemein_favourites">9 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=531d9d5cff3d11dea698d7b96710c305c305&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/531d9d5cff3d11dea698d7b96710c305c305/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>1 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=531d9d5cff3d11dea698d7b96710c305c305&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/531d9d5cff3d11dea698d7b96710c305c305/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Fred Pacquier &lt;fpacquier@gmail.com&gt;</author>
            <category>feed:f69c53e75954102a301a37ce469c5d7e</category>
            <pubDate>Tue, 12 Jan 2010 05:00:26 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-531d9d5cff3d11dea698d7b96710c305c305</guid>
        </item>
        <item>
            <title>Season Two — an itch to scratch</title>
            <link>http://fredp.lautre.net/blog/2010/01/11/season-two-an-itch-to-scratch/</link>
            <description><![CDATA[
<p>The main reason I embarked on this <em>Hyakutake </em>adventure is that I&#8217;m too sentimental.</p>
<p>You see, I just hate to see perfectly good, if slightly obsolete, hardware go unused. At the same time, I can&#8217;t bear to part with it, and sometimes even rescue &#8220;collectors&#8221; from corporate dumpsters. So of course, I always end up with more than I can use or manage, which breaks my heart.</p>
<p>Specifically in this case, I have too many tablets. At the time (last summer), I had one of each: 770, N800, N810. The N810 was my daily workhorse, always with me everywhere. The N800 was the stay-at-home mobile terminal, for news at breakfast and quick domestic lookups at any time (weather, TV programs, bus schedules, etc.). Both saw daily, even intensive use. The 770&#8230; well, good old 770 mostly sat around and served to test those <em>Mer</em> releases that had support for it, when I got around to it, which was not saying much. I needed some other use for it.</p>
<p>I also had an old laptop lying around, a victim of the netbook wave. It had been an expensive ultra-light in its day, still sleek and in good working order, just not up to modern standards any more. I wanted it put into active retirement, but none of the &#8220;mod&#8221; ideas I could find on the Web (like a digital photo frame or torrent box) appealed to me.</p>
<p>Then one day I happened to think of both devices at the same time, and something clicked into place: I would kill both birds with one stone. I would write an app that would make them both useful again &#8212; together.</p>
<p>I saw it all so clearly in my mind&#8230;</p>
<span class="net_nemein_favourites">10 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=567fd97efe8411de8878b316d622e7b1e7b1&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/567fd97efe8411de8878b316d622e7b1e7b1/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>2 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=567fd97efe8411de8878b316d622e7b1e7b1&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/567fd97efe8411de8878b316d622e7b1e7b1/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Fred Pacquier &lt;fpacquier@gmail.com&gt;</author>
            <category>feed:f69c53e75954102a301a37ce469c5d7e</category>
            <pubDate>Mon, 11 Jan 2010 06:00:00 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-567fd97efe8411de8878b316d622e7b1e7b1</guid>
        </item>
        <item>
            <title>Season Two — introducing Hyakutake</title>
            <link>http://fredp.lautre.net/blog/2010/01/09/season-two-introducing-hyakutake/</link>
            <description><![CDATA[
<p>Let&#8217;s kick off the new year with a new series.</p>
<p>If you recall, <em>Season One</em> was about a presentation I gave at the first (Berlin, 2008) Maemo Summit, revisited and extended. <em>Season Two</em> will be about a presentation I <span style="font-style: italic;">would have given</span> at the 2009 Summit in Amsterdam&#8230; if I had actually managed to attend, that is. This way I can salvage some of it, and maybe give some readers useful tips or ideas for new uses of their tablets.</p>
<p>This presentation would have been quite different from the first, if only for the fact that it was to be a 5-minute &#8220;lightning talk&#8221;. This format does not lend itself well to philosophical ramblings, so I intended to do what suits it best: a demo of an application, which I had created last summer.</p>
<p>As is usually the case, the idea for this app stemmed from an &#8220;itch to scratch&#8221;. Of course, as you may already have guessed, there is plenty of Python and Web protocols in this story, and some <em>web2py</em>, but in the end I had to dig into deeper and more complex stuff than I had initially anticipated, so that is not all of it.</p>
<p>In hindsight, the five-minute demo would probably have been quite a challenge to set up, as it would have involved at least two devices (one of them a tablet) communicating over three protocol stacks.</p>
<p><em>Hyakutake</em> is the name of the resulting product. For the curious, it is also the name of an atypical <a href="http://www2.jpl.nasa.gov/comet/hyakutake/" target="_blank">comet</a> which crossed the solar system in 1996. It&#8217;s a bitch to spell, but I find it has a nice ring to it :-)</p>
<p>The nature of the itch I&#8217;ve been scratching, and the reason for choosing a comet&#8217;s name, will be made clear in the following posts&#8230;</p>
<span class="net_nemein_favourites">8 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=e9a2b38cfd1411dea0d6f3d3258341cf41cf&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/e9a2b38cfd1411dea0d6f3d3258341cf41cf/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>2 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=e9a2b38cfd1411dea0d6f3d3258341cf41cf&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/e9a2b38cfd1411dea0d6f3d3258341cf41cf/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Fred Pacquier &lt;fpacquier@gmail.com&gt;</author>
            <category>feed:f69c53e75954102a301a37ce469c5d7e</category>
            <pubDate>Sat, 09 Jan 2010 11:37:26 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-e9a2b38cfd1411dea0d6f3d3258341cf41cf</guid>
        </item>
        <item>
            <title>Season One — a Maemo5 post scriptum</title>
            <link>http://fredp.lautre.net/blog/2009/12/13/season-one-a-maemo5-post-scriptum/</link>
            <description><![CDATA[
<p>Those who didn&#8217;t dig my Season One series may have appreciated the lull &#8212; to others, I apologize for the long delay in launching Season Two, which will be quite different. In the meanwhile, I just wanted to add a few words about mobile python web apps, with some good news about Maemo5 and the N900 hardware.</p>
<p>I finally received my own N900, barely four days ago. I&#8217;m still getting to know it, and come to terms with the new UI, the new capabilities; also, of course, the news bugs, shortcomings and sometimes regressions that will keep us all waiting for firmware updates&#8230;</p>
<p>One thing I wanted to test right away, as you can imagine, is the <em>web2py</em> stuff I have running on my N810.</p>
<p>First, find the xterm icon hidden somewhere. From the way the terminal springs to life on the screen you already know this hardware is wicked fast compared to the N8x0 generation. Just typing &#8216;python&#8217; confirms that the language runtime is not preinstalled, as expected.</p>
<p>Next stop, App manager. The &#8216;extras&#8217; repository is present, but disabled by default. Enable it, update, and here is PyGTKeditor by my fellow Frenchman <em>Benoît</em>. It is both a very nice code editor, and the simplest way to get Python installed as a dependency.</p>
<p>Back to xterm : &#8216;python&#8217; now works. &#8216;import pygame&#8217; doesn&#8217;t, however, meaning it is no longer installed by default like it was before. It&#8217;s probably just a separate install however, as the <em>SolarWolf </em>pygame shooter is available for Fremantle.</p>
<p>So, on to the test : on the N810, I just tar and compress the <em>web2py</em> directory; send the .tgz file over to the flash card on the N900 (using File manager and Bluetooth); uncompress it there and run the startup script. No need to be root, change permissions or install packages.</p>
<p>Output in the console stops so fast that I immediately think there has been some kind of error: but no, <em>web2py</em> has just reached the end of its startup messages, and is waiting to serve requests. Again, this is blazing fast compared to the N810. Also, it means that the python runtime itself is more complete than on Maemo4: no import errors, no need to install a complementary &#8220;python-devel&#8221; package. Yay.</p>
<p>Last, the browser: even MicroB manages to feel almost zippy on this platform, despite its crazy UI. I enter the <em>localhost</em> URL for the slowest of my <em>web2py</em> apps, which routinely takes anywhere from one to three seconds between screens on the N810, probably due to lousy &#8216;database joins&#8217; which I&#8217;m too lazy to refactor: here&#8217;s my good old app, except now it churns along as if it had been tuned by a professional <em>dba</em>&#8230; The age-old, traditional IT &#8216;fix&#8217; at work: <em>throw hardware at it</em> :-)</p>
<p>So, the &#8216;porting&#8221; of my entire app portfolio (and their data) took all of five minutes. Looks like Maemo5 and the N900 will be a good home for them, allowing for more liberal use of CSS, javascript and Ajax. Also, distribution will be less of a problem. And the <em>pymaemo</em> team is still working to make their distribution better, so there&#8217;s more to come&#8230;</p>
<p>Next up : Season Two !</p>
<span class="net_nemein_favourites">17 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=d6de046ee83711de953bb186845065b665b6&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/d6de046ee83711de953bb186845065b665b6/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=d6de046ee83711de953bb186845065b665b6&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/d6de046ee83711de953bb186845065b665b6/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Fred Pacquier &lt;fpacquier@gmail.com&gt;</author>
            <category>feed:f69c53e75954102a301a37ce469c5d7e</category>
            <pubDate>Sun, 13 Dec 2009 22:00:36 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-d6de046ee83711de953bb186845065b665b6</guid>
        </item>
        <item>
            <title>Season One — wrapping up</title>
            <link>http://fredp.lautre.net/blog/2009/11/11/season-one-wrapping-up/</link>
            <description><![CDATA[
<p>To conclude this series I&#8217;d like to highlight an important point that didn&#8217;t quite fit in before, because it is from the point of view of the end user, rather than of the developer (although they may well be the same person :-).</p>
<p style="text-align: center;">♦</p>
<p>As a user, you might scoff at web interfaces, and as a matter of principle prefer slick native GUIs, even for mundane-but-custom utility apps (like to-do lists, shopping lists, book lists etc.). As I mentioned earlier, it is perfectly possible and reasonable for a Python programmer to write a Maemo app, using PyGTK or PyQt/PySlide. Coding on a PC and testing on a tablet is less fluid (many visual differences), and the app, though still portable, will be more Maemo-specific; but it&#8217;s still heaps easier than regular cross-platform compilation, even if packaging is still something of a black art. There are plenty of nice and useful such apps for Maemo4.</p>
<p>They all share the same drawbacks, however. One is their start up time: when you launch them, you first load the Python interpreter, which in turn loads the Python bindings to the underlying binary graphic libraries (PyGTK or PyQt), and finally your own code. This tends to add up. For the same reasons, even trivial apps have large memory footprints, mostly due to PyGTK or PyQt, as these libs have huge numbers of classes.</p>
<p>This has a direct impact on usability: on the 770 PyGTK apps took too long to start and were too memory-hungry to be more than curiosities, even though they ran fast enough once loaded. On the N8x0 start up time is down to bearable levels, especially for apps that tend to be used for extended sessions (like Canola), or on specific occasions (like PyGTKEditor). Maybe on the N900 it may not matter, but the memory footprint will remain an issue: you don&#8217;t want to have too many of these loaded at the same time.</p>
<p>This is especially bad for &#8220;mundane utilities&#8221;, because if they&#8217;re any use at all, they tend to be used casually, frequently, on the spot, on a whim, quick in, quick out. If they can&#8217;t be kept active at all times, and don&#8217;t load fast either, they get forgotten quickly enough, deep down in the &#8216;Extras&#8217; menu.</p>
<p style="text-align: center;">♦</p>
<p>Now contrast this with the way our Python web apps exist on the tablets.</p>
<p>The start-up time penality you pay only once, while the system boots, as it loads a Python interpreter and a server instance of <em>web2py</em>. If you&#8217;re anything like me, you only ever reboot your tablet when you absolutely have to, which means really seldom, so this is not comparable to waiting each and every time you launch an app.</p>
<p>Memory-wise, the cost is also one-time and permanent: one Python process, one <em>web2py </em>process. As there are no bindings for huge GUI libs, the footprint is again not comparable to loading just one PyGTK or PyQt application, let alone several. I have been running my N810 like this for almost two years, and there really is no impact.</p>
<p>The third big difference is that <em>web2py</em>, like most web frameworks, allows you to serve any number of different applications from a single instance: applications are just subdirectories, and are accessed through URLs with the same names. They don&#8217;t <em>cost</em> anything while not being used, but are still always close at hand, just a bookmark away. Most of the time you will already have a browser open for something else, so when the need for an app arises, you can pull it up in two taps, use it, and resume what you were doing before.</p>
<p>This mode really befits casual use of day-to-day utilities. There is no penalty in having plenty of simple, specialized apps (or applets), each for one specific task, with a common styling and UI design, and skipping from one to another as needed. A <em>local ecosystem</em> of web apps, in a way.</p>
<p style="text-align: center;">♦</p>
<p>Finally I&#8217;d like to thank those readers who took time to post comments, encouragements, suggestions or corrections. I&#8217;m not entirely convinced these posts are worth the time they took me to write (to the detriment of other activities), but I hope that they at least brought entertainment or ideas to some of you. Also, don&#8217;t hesitate to send <em>me</em> ideas and suggestions about subjects you&#8217;d like to read about here &#8212; in between the cracks.</p>
<span class="net_nemein_favourites">9 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=06f301fece8e11de9800afef2897b8b7b8b7&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/06f301fece8e11de9800afef2897b8b7b8b7/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>2 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=06f301fece8e11de9800afef2897b8b7b8b7&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/06f301fece8e11de9800afef2897b8b7b8b7/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Fred Pacquier &lt;fpacquier@gmail.com&gt;</author>
            <category>feed:f69c53e75954102a301a37ce469c5d7e</category>
            <pubDate>Wed, 11 Nov 2009 06:00:15 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-06f301fece8e11de9800afef2897b8b7b8b7</guid>
        </item>
        <item>
            <title>Season One — case for web2py #3</title>
            <link>http://fredp.lautre.net/blog/2009/11/10/season-one-%e2%80%94-case-for-web2py-3/</link>
            <description><![CDATA[
<p>We&#8217;ll round up this series about <em>web2py</em> with two more subjects: how to best run the server on a tablet using the stock distribution <em>as is</em>; and how things could be made easier for the end user by creating a specific Maemo package.</p>
<p style="text-align: center;">♦</p>
<p>First we need a custom launcher script, for several reasons. One is that just running <em>web2py.py</em> in xterm launches web2py in &#8216;interactive&#8217; mode: it prompts for an administrator password, then runs in the foreground, printing all output to the console. While good for a first test run, this is not what we need for background (<em>daemon</em>) execution. The solution is to specify the password on the command line with the relevant option. Another reason is that logging is enabled by default for the web server, which in our case is useless, will only eat up storage and slow things down. Disabling this is done by specifying an &#8220;empty&#8221; log file name. Then there is the usual &#8216;listener pool&#8217; to allow several clients to connect at once; here it is 5 by default, we can scrimp a few bytes by lowering it, as there normally will be only one client. So if you have unzipped the web2py archive to the &#8220;mmc1&#8243; memory card, your launch script would look something like this:</p>
<blockquote><p>cd /media/mmc1/web2py<br />
python web2py.py -a <em>password</em> -n 2 -l &#8220;&#8221; &amp;</p></blockquote>
<p>Once we have the server running, there are a couple of basic precautions we can take in coding our apps for performance. Server-side, it&#8217;s best to avoid database requests that generate complex SQL &#8220;joins&#8221;, as these seem to be costly. Browser-side, especially in MicroB, served pages should be kept light in terms of graphics, CSS and javascript.</p>
<p>Finally, in the TTW admin, you will see a &#8216;compile&#8217; option in the app&#8217;s menu. This &#8216;compilation&#8217; translates your template files (views), which are normally parsed and rendered for each request/response, into static python files which are executed directly. On the tablets this is probably the biggest speed boost of all; you should do it when your app is mostly finished, as templates are not editable in their compiled form (but you can always &#8216;uncompile&#8217;, edit and recompile).</p>
<p style="text-align: center;">♦</p>
<p>All this works just fine for the <em>bricoleur</em>, who is also at heart a coder, and not afraid of the command line. Extending the results of his work to casual users, however, still lacks user-friendliness in some spots; this could be cured with a proper Maemo installation package, in three different ways:</p>
<p><em>web2py installation</em>: we&#8217;ve seen that Python is readily available for Maemo, and that once you have web2py running, installing web apps is a snap. The vexing part is installing web2py itself, which involves some tinkering in the console as above. A standard install through App Manager would be much better of course, especially if it came with a ready-made launcher script and a menu entry&#8230; one could even dream of a simple dialog, or Control Panel applet, to set the admin password and start/stop the daemon.</p>
<p><em>size reduction</em>: one little quirk of web2py is that it insists on having an &#8216;examples&#8217; application installed the first time it is run; it can be safely removed later but causes an error if not initially present. It also accounts for over half the size of the entire installation&#8230; Building the Maemo package from a freshly-installed, run-once web2py instance, with the examples app removed, would save space and time when installing on tablets.</p>
<p><em>python dependencies</em>: Python is already installed on many tablets as a dependency of another app, but an installation package with a proper dependency would insure that it does get installed if it isn&#8217;t already. Moreover, on Maemo4 web2py also requires the &#8216;python-devel&#8217; package, because it uses some standard library modules that the INdT team did not include in the pymaemo runtime. So that could be made a dependency too, or even better, the package itself could include the few missing python modules.</p>
<p>While we&#8217;re at it, we could also include templates and styles to replace web2py&#8217;s defaults, which are sometimes on the heavy side with CSS/javascript/Ajax. In a comment to a previous post, <a href="http://www.josefassad.com/" target="_blank">Josef Assad</a> suggested this could lead to look &#8216;n feel consistency between apps, and better integration with the platform style, which is something I guess Apple achieved with its iPhone.</p>
<p>Anyone game ? :-)</p>
<p style="text-align: center;">♦</p>
<p>Tomorrow we&#8217;ll conclude this series with various odds &#8216;n ends, then take a much-needed rest while I ponder the ifs and whats of Season Two :-)</p>
<span class="net_nemein_favourites">4 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=ea928bb8cdc211dea84691e56bdb9d9c9d9c&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/ea928bb8cdc211dea84691e56bdb9d9c9d9c/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>7 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=ea928bb8cdc211dea84691e56bdb9d9c9d9c&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/ea928bb8cdc211dea84691e56bdb9d9c9d9c/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Fred Pacquier &lt;fpacquier@gmail.com&gt;</author>
            <category>feed:f69c53e75954102a301a37ce469c5d7e</category>
            <pubDate>Tue, 10 Nov 2009 06:00:31 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-ea928bb8cdc211dea84691e56bdb9d9c9d9c</guid>
        </item>
        <item>
            <title>Season One — case for web2py #2</title>
            <link>http://fredp.lautre.net/blog/2009/11/09/season-one-%e2%80%94-case-for-web2py-2/</link>
            <description><![CDATA[
<p style="text-align: justify;">In this part we&#8217;ll look at some technical aspects of web2py that make it interesting as an embarked server on a mobile device. I won&#8217;t go into too much detail about the bells and whistles here, the feature list is available from the site&#8217;s <a title="web2py home page" href="http://www.web2py.com/" target="_blank">front page</a>, and a good summary is <a title="web2py summary" href="http://www.web2py.com/examples/default/what" target="_blank">here</a>. Suffice it to say that there are more than enough features for our needs, and all the right buzzwords to please the corporate types too. I&#8217;ll just underline those traits that serve our purpose best:</p>
<p><em><span style="text-decoration: underline;">just add Python</span></em>: this is the equivalent of Python&#8217;s &#8220;batteries included&#8221; mentality. If you don&#8217;t intend to use another database than sqlite (which is perfectly adequate for tablet use), then the default web2py package comes with everything you need, and only requires a Python 2.5 runtime to get going: a web server, MVC framework, DAL, templates, form building and validation, error and ticketing management, javascript library, multiple language support&#8230; There is also an administrative interface (through SSL) to create and manage apps, and optionally code, which we&#8217;ll come back to (you can try it online <a title="web2py admin demo" href="http://www.web2py.com/demo_admin" target="_blank">here</a>).</p>
<p><em><span style="text-decoration: underline;">no installation</span></em>: well, none to speak of. The common cross-platform package is just a zip file that expands to a <em>web2py</em> directory with everything underneath, including a python script to start the server. Works just the same on Windows, a Linux box, or a tablet. While this may not be ideal for an end user (more on that later), it is great for the developer because the entire environment, including apps and data, can be copied or moved in one go. It also means that unlike normal Maemo apps, everything can be implanted in internal or external Flash memory, because no file really needs the &#8216;executable&#8217; bit set: only the launcher script should be run from the Linux file system.</p>
<p><em><span style="text-decoration: underline;">fast</span></em>: at least fast enough to run useful apps acceptably on the N8&#215;0 series, with some tweaks and recommendations we&#8217;ll see in the next post. I haven&#8217;t actually <em>seen</em> a real N900 yet, but of course I expect it to fly. It&#8217;s fun to imagine that you can write code this way that will run on almost <em>anything</em>: tablets and smartphones, regular netbooks, laptops and PCs, servers and &#8220;big iron&#8221;, even &#8220;in the cloud&#8221; (Amazon EC2 and Google App Engine)!</p>
<p><em><span style="text-decoration: underline;">great TTW admin</span></em>: through-the-web administration is nothing new, but when proprely executed, can be a real boon. Not only does web2py&#8217;s TTW admin (which is itself a web2py app) competently serve its intended purpose, it also answers a few non-trivial questions I asked <a title="case for webapps #2" href="http://fredp.lautre.net/blog/2009/11/02/season-one-%e2%80%94-case-for-webapps-2/" target="_blank">before</a>. Consider the following items as sub-sections of this one:</p>
<p><span style="text-decoration: underline;"><em>easy app creation and management</em></span>: when you create a new application TTW, you just give it a name, and a whole file hierarchy is created, populated with default stubs and supporting files. The skeleton app actually already runs, <em>à la Ruby-on-Rails</em>, only without shell commands. Afterwards the admin page acts as a dashboard, a page where you can see all your app&#8217;s components (models, views, controllers), modules and methods, translations, errors/tickets, static files, etc. You can also edit files there in a javascript editor (with syntax coloring); although you&#8217;ll probably prefer writing code in your preferred editor from the file system, this sometimes comes in handy to quickly correct a typo, or tweak a remote file on a server. Changes go live immediately, for swift edit/test cycles.</p>
<p><em><span style="text-decoration: underline;">easy app deployment, upgrade and backup</span></em>: there are two features on the admin page that may not be eye-catching, but are real game-changers for what we want to do. One is the &#8220;pack all&#8221; command in an app&#8217;s main menu: this creates a web2py.app.<em>appname</em>.w2p file (actually a renamed, standard .tar file) and downloads it to your browser (or wget&#8230;). This file contains your <em>entire</em> app: code, supporting files, <em>and </em>database. See ? Instant app remote backup&#8230; The other feature is the ability to create a new app by uploading a .w2p file, or providing an URL pointing to one. Combine the two features, and you also have an instant app distribution scheme&#8230; just put up an archive of your app with an empty database on a web page, and any web2py user can install and run it by pasting a link. The &#8220;<a title="web2py appliances" href="http://web2py.com/appliances" target="_blank">appliances</a>&#8221; available on the web2py site are just that.</p>
<p style="text-align: justify;">There is much more to web2py of course, but the ability to use it simply and keep things simple is an endearing trait, and should be enough to tickle your curiosity. In the next instalment, we&#8217;ll see some basic tips &amp; tricks to make it run smoothly on our tablets, and some not-implemented-yet ideas on how some Maemo-specific tweaking could make it even better for <em>bricoleurs</em> and users alike.</p>
<span class="net_nemein_favourites">7 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=105c99caccfa11dea312099c9a6fb448b448&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/105c99caccfa11dea312099c9a6fb448b448/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>4 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=105c99caccfa11dea312099c9a6fb448b448&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/105c99caccfa11dea312099c9a6fb448b448/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Fred Pacquier &lt;fpacquier@gmail.com&gt;</author>
            <category>feed:f69c53e75954102a301a37ce469c5d7e</category>
            <pubDate>Mon, 09 Nov 2009 06:00:58 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-105c99caccfa11dea312099c9a6fb448b448</guid>
        </item>
        <item>
            <title>Season One — case for web2py #1</title>
            <link>http://fredp.lautre.net/blog/2009/11/07/season-one-case-for-web2py-1/</link>
            <description><![CDATA[
<p>In this last section of the series, we&#8217;ll try to determine what makes a web framework appropriate for a) <em>bricoleurs,</em> and b) hosting embarked apps on the tablets&#8230; which is generally not what their creators had in mind :-)</p>
<p>As announced, we will use the <em>web2py</em> framework as a yardstick and see how it measures up, its shortcomings and how it can be tweaked for best results on the tablets. Other frameworks, of course, may be similarly tallied and found to fit the bill.</p>
<p>As previously, we will first look at the &#8220;human factor&#8221;, then the technical ones.<span id="more-113"></span></p>
<p>I did not end up choosing <a href="http://www.web2py.com/" target="_blank">web2py</a> through any scientific process; naturally I did not test <a href="http://wiki.python.org/moin/WebFrameworks" target="_blank">the entire list</a> &#8212; which is just an excerpt anyway, there are many more on the <a title="web frameworks on PyPI" href="http://pypi.python.org/pypi?%3Aaction=search&amp;term=web+framework&amp;submit=search" target="_blank">Python Package Index</a>, and new ones appearing all the time.</p>
<p>Years ago I approached a similar list and started with those offerings advertising themselves as intentionally &#8220;simple and easy to use&#8221; &#8212; as you would expect from me. I even tried <em>web.py</em>, which truthfully considers itself the &#8220;anti-framework&#8221;, and is actually more a well-designed toolkit or library. I also used <em>Karrigell</em>, still maintained by a fellow Frenchman, and the now discontinued <em>Snakelets</em>, my favourite at the time.</p>
<p>The experience was initially rewarding, but ultimately frustrating : true, these tools were easy and fast to get started with, didn&#8217;t &#8220;get in the way&#8221; &#8212; in the sense of imposing coding style and structure. But in this case, &#8220;simple/easy&#8221; really implied &#8220;limited in scope&#8221;: after a while I found myself repeatedly implementing low-level stuff that had nothing to do with my application logic, and that I thought should really be provided by the framework.</p>
<p>So when the next project took form I thought I should take a look at those &#8220;full-stack&#8221; solutions &#8212; with some trepidation, because I knew full well that if 900-pound gorillas like <em>Django </em>were justifiably #1 for their intended use, they were also total overkill for my own needs, and probably way over my head. I went at it on gut-feeling alone: skimming the web sites, the docs, the code samples, the forums&#8230; jumping board if after a reasonable effort my head swam or my eyes glazed&#8230; waiting for something to &#8220;click&#8221;.</p>
<p><em>web2py</em> was the first one to click, so I stopped there. It had the qualities in like in Python itself : not intimidating, easy to get started with, but full-featured and not constrained; clean syntax, plenty of learning material, a buzzing and tolerant community.</p>
<p>I guess it helps that the author, Massimo di Pierro, is a University professor, and first designed <em>web2py </em>as a teaching tool for his students (somewhat like Andy Tanenbaum with <em>Minix</em>, in the old days). Also, he did it in typical academic style, top-down: first the specs, then the API, then the implementation. His tenet is that code may come and go, but the API and backward compatibility are &#8220;sacred&#8221;. This is in stark contrast with most grass-roots, bottom-up community projects, where agility and features rule, and drastic refactoring is allowed to break existing code.</p>
<p>In the life of an in-between-the-cracks tinkerer, knowing you can upgrade your app engine to the latest version with the guarantee that your code will still run, is a Good Thing™.</p>
<p>So, off I went. I guess that with any framework (not only web ones), the most difficult step at the start is understanding how <em>it</em> wants <em>you</em> to do things: if you fight it, you fail. For <em>bricoleurs</em>, the cost of that step might be a good metric of the framework&#8217;s fitness-to-purpose. With <em>web2py</em>, the compact API, and the variety of simple-to-complex examples, made it reasonably painless to get past that point.</p>
<p>After that it was like discovering Python so many years ago : first overdoing things out of habit, later understanding &#8220;the web2py way&#8221;of doing them, and marvelling at what little code is left.</p>
<p>With philosophy out of the way, we&#8217;ll take a deeper look at the technical merits of web2py&#8230; after the weekend !</p>
<span class="net_nemein_favourites">7 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=7838afe4cb8211debecd430ca14e986d986d&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/7838afe4cb8211debecd430ca14e986d986d/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>3 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=7838afe4cb8211debecd430ca14e986d986d&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/7838afe4cb8211debecd430ca14e986d986d/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Fred Pacquier &lt;fpacquier@gmail.com&gt;</author>
            <category>feed:f69c53e75954102a301a37ce469c5d7e</category>
            <pubDate>Sat, 07 Nov 2009 09:30:39 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-7838afe4cb8211debecd430ca14e986d986d</guid>
        </item>
    </channel>
</rss>
