<?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</title>
        <description>Blog entries from Maemo community</description>
        <link>http://maemo.org/news/planet-maemo/</link>
        <lastBuildDate>Thu, 23 May 2013 21:34:55 +0000</lastBuildDate>
        <generator>FeedCreator 1.7.6(BH)</generator>
        <language>en</language>
        <managingEditor>planet@maemo.org</managingEditor>
        <item>
            <title>SeriesFinale for BlackBerry</title>
            <link>http://www.joaquimrocha.com/2013/05/19/seriesfinale-for-blackberry/</link>
            <description><![CDATA[
<p>I would like to share with you this port of <a href="https://appworld.blackberry.com/webstore/content/28278102/" target="_blank">SeriesFinale for Blackberry</a>.</p>
<p>Unlike the other versions, <em>I was not involved</em> in the development of this one. It was developed by Micke Prag, who also started the Meego/N9 port back in the day.<br />
I developed the <a href="http://www.joaquimrocha.com/2009/12/06/seriesfinale/" title="SeriesFinale">first version</a> of SeriesFinale in 2009 for the defunct <a href="http://en.wikipedia.org/wiki/Maemo" target="_blank">Maemo</a> system and released also a <a href="http://www.joaquimrocha.com/2011/11/18/seriesfinale-for-harmattan-n9n950/" title="SeriesFinale for Harmattan (N9/N950)">version for the N9/Meego</a> in 2011 (there was also a <a href="http://www.joaquimrocha.com/2010/12/19/seriesfinale-for-gnome/" title="SeriesFinale for GNOME">version for GNOME</a> but I never finished it&#8230;). It is very good to see that it continues its life even if I am not involved this time.</p>
<p>I don&#8217;t own a BlackBerry so I am not able to try it but judging from <a href="http://www.youtube.com/watch?v=j_Xq1C0eVx4" target="_blank">this video</a>, it definitely looks good so if you&#8217;re a BB user, check it out!</p>
<p><iframe width="420" height="315" src="http://www.youtube.com/embed/j_Xq1C0eVx4" frameborder="0" allowfullscreen></iframe></p>
<p>Judging from the success that a <a href="https://play.google.com/store/apps/details?id=com.battlelancer.seriesguide&#038;feature=nav_result#?t=W251bGwsMSwyLDNd" target="_blank">clone for Android</a> and a <a href="http://trakt.tv/" target="_blank">similar online service</a> have, it seems like I could have started a whole business out of it&#8230; <img src='http://www.joaquimrocha.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<span class="net_nemein_favourites">0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=1e2c157fc99010cc15711e2b798d5383f0c11ed11ed&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/1e2c157fc99010cc15711e2b798d5383f0c11ed11ed/" 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=1e2c157fc99010cc15711e2b798d5383f0c11ed11ed&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/1e2c157fc99010cc15711e2b798d5383f0c11ed11ed/" 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>Joaquim Rocha &lt;joaquimrocha1@gmail.com&gt;</author>
            <category>feed:c9cc24540e35350893859da24a38c99b</category>
            <pubDate>Sun, 19 May 2013 09:51:24 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-1e2c157fc99010cc15711e2b798d5383f0c11ed11ed</guid>
        </item>
        <item>
            <title>Behind the Scenes: Headset Camera app for the N9</title>
            <link>http://thpmaemo.blogspot.com/2013/05/behind-scenes-headset-camera-app-for-n9.html</link>
            <description><![CDATA[
The logical step after the "<a href="http://thp.io/2012/camerra/">Volume+ as Camera Button</a>" app (<a href="http://store.ovi.com/content/252565">Nokia Store link</a>) for the N9 is another app that allows you to take photos while not touching your N9 at all. While time-triggered photos are fun, remote-triggered photos are.. erm.. "funner"? So what kind of remote "buttons" can we easily get on the N9? The remote control button on the headset is both "remote" and a "button". Also, as seen in <a href="http://wiki.gpodder.org/wiki/Panucci">Panucci</a> and <a href="http://gpodder.org/">gPodder</a> versions since the N900, Bluetooth headset buttons can also be queried by applications. So what do we get by combining remote control and photo taking? The <a href="https://thp.io/2013/headsetcamera/">Headset Camera</a> app (<a href="http://store.ovi.com/content/355515">Nokia Store link</a>) for the N9! Or - for the visual reader - this:<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://thp.io/2013/headsetcamera/screenshot1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="179" src="https://thp.io/2013/headsetcamera/screenshot1.jpg" width="320" /></a></div><br /><br />If you want to integrate such features into your own app, the code for querying the headset buttons is readily available in the gPodder source tree (<a href="https://github.com/gpodder/gpodder/blob/master/src/gpodder/qmlui/helper.py">src/gpodder/qmlui/helper.py</a>):<br /><pre>import dbus<br /><br />class MediaButtonsHandler(QtCore.QObject):<br />    def __init__(self):<br />        QtCore.QObject.__init__(self)<br />        headset_path = '/org/freedesktop/Hal/devices/computer_logicaldev_input_0'<br />        headset_path2 = '/org/freedesktop/Hal/devices/computer_logicaldev_input'<br /><br />        system_bus = dbus.SystemBus()<br />        system_bus.add_signal_receiver(self.handle_button, 'Condition',<br />                'org.freedesktop.Hal.Device', None, headset_path)<br />        system_bus.add_signal_receiver(self.handle_button, 'Condition',<br />                'org.freedesktop.Hal.Device', None, headset_path2)<br /> <br />    def handle_button(self, signal, button):<br />        if signal == 'ButtonPressed':<br />            if button in ('play-cd', 'phone'):<br />                self.playPressed.emit()<br />            elif button == 'pause-cd':<br />                self.pausePressed.emit()<br />            elif button == 'previous-song':<br />                self.previousPressed.emit()<br />            elif button == 'next-song':<br />                self.nextPressed.emit()<br /><br />    playPressed = QtCore.Signal()<br />    pausePressed = QtCore.Signal()<br />    previousPressed = QtCore.Signal()<br />    nextPressed = QtCore.Signal()<br /></pre><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">MediaButtonsHandler</span> is already a QObject subclass, so you can easily expose an instance of this class to your QDeclarativeView <span style="font-family: &quot;Courier New&quot;,Courier,monospace;">rootContext()</span> and connect to the signals in QML (such a "headset button handler" might actually be a good candidate for inclusion into <a href="https://github.com/nemomobile/nemo-qml-plugins">nemo-qml-plugins</a> in Sailfish OS and Nemo Mobile?). As it's really just using the Python D-Bus bindings to get property changes from Hal devices, the code above should be easy (read: trivial) to port from Python to Qt/C++. Be aware that you need to connect to both <span style="font-family: &quot;Courier New&quot;,Courier,monospace;">.../computer_logicaldev_input_0</span> and <span style="font-family: &quot;Courier New&quot;,Courier,monospace;">.../computer_logicaldev_input</span>, which can both exist if you have a cable headset and a Bluetooth headset connected at the same time.<br /><br />You can <a href="http://store.ovi.com/content/355515">get the Headset Camera App</a> for the N9 in Nokia Store now, there is also <a href="http://youtu.be/nboCvWMoKyk">a video on YouTube showing the app</a>. Or start integrating  headset button features into your own app or scripts by adapting the code above. One use case that comes to mind is using the previous/next buttons on a Bluetooth headset to control a photo slideshow on the N9 connected to TV-Out. Enjoy :)<span class="net_nemein_favourites">1 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=1e2be081129f4eebe0811e2afa82fbce151beedbeed&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/1e2be081129f4eebe0811e2afa82fbce151beedbeed/" 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=1e2be081129f4eebe0811e2afa82fbce151beedbeed&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/1e2be081129f4eebe0811e2afa82fbce151beedbeed/" 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>Thomas Perl &lt;m@thp.io&gt;</author>
            <category>feed:437c40ecc45d4b0fa868e422ae16adb1</category>
            <pubDate>Thu, 16 May 2013 11:00:00 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-1e2be081129f4eebe0811e2afa82fbce151beedbeed</guid>
        </item>
        <item>
            <title>HTML5 Web Apps on Mobile Devices</title>
            <link>http://thpmaemo.blogspot.com/2013/05/html5-web-apps-on-mobile-devices.html</link>
            <description><![CDATA[
Get out your Buzzword Bingo cards, we're talking HTML5. And Canvas2D. And WebGL. See? Check them off and then continue reading. So, while <a href="http://thpmaemo.blogspot.com/2013/05/petals-for-harmattan-pure-qt4qt5-jsqml.html">writing "native" apps using JavaScript</a> is definitely possible and works great with QML, some games are just simple enough (or want to have a broad enough audience) to warrant writing everything in HTML5.<br /><br />This might also be a good time to check off XmlHttpRequest on your BB card, even if none of the following games use it - you might want to use it in your applications or game for things such as server-side stored high scores.<br /><br />As far as Maemo and MeeGo is concerned, you might want to try out some of these games (especially the WebGL variant of <a href="http://pyug.at/PyWeek/2012-09">One Whale Trip</a>) in Fennec (aka Mobile Firefox - get it for: <a href="http://store.ovi.com/content/26002">N900</a>, <a href="http://store.ovi.com/content/257468">N950/N9</a>, <a href="http://thp.io/2013/maemo/nemo-fennec.html">Nemo Mobile</a>). <br /><br /><a href="https://thp.io/2013/colorlines/">Color Lines</a>: This one simply uses Canvas2D, and works nicely on all mobile browsers that I tested - Maemo, MeeGo, Android, WP7.5, BB Playbook, iOS. Comes in at about 650 lines of rather well-documented JavaScript, and could easily be ported to use QML as a renderer if need be (it would be good to have a QML Plug-In that provides a JavaScript context + (a subset of) the Canvas2D API - without using WebKit (cross that off, too), that is). Also, the N900's stock browser has performance problems rendering this, while on the same device in Fennec it's quite playable.<br /><br /><a href="https://thp.io/2013/circle1d/html-canvas/">Circle1D</a>: This is a straight Python-to-JavaScript port of <a href="http://thp.io/2013/circle1d/">a lame 2D "Physics" Engine</a>. It's kept very (read: very, very) simple, and collision detection could be done in a nicer way, but the inefficiency of it provides a nice benchmark for comparing JavaScript engine performance (I'm sure you can find "engine performance" on your bingo card as well) on mobile devices. The N900's default browser can't handle it at all, but Fennec can at least render/simulate it, albeit slowly. <br /><br /><a href="https://thp.io/2013/onewhaletrip/">One Whale Trip</a>: This game actually started out as a <a href="http://pyug.at/PyWeek/2012-09">Python game for PyWeek</a> last September, which was also <a href="http://talk.maemo.org/showthread.php?t=89372">ported to the N950/N9</a>, but as a test for trying out WebGL, I decided to port it from Python/PyGame to JavaScript/Canvas2D and then to WebGL (the Python version also contains two renderers - a "blitting" one using PyGame surfaces, and an OpenGL one using OpenGL [ES 2 on mobile]). The Canvas2D version works again in all modern mobile browsers (same as above), the WebGL only works on browsers supporting WebGL, for example Fennec/Firefox on both the N900 (even though very slowly) and not in any of the stock browsers (even not the one on the N9). As WebGL is "roughly" the same as OpenGL ES 2.x, one could imagine sharing at least shader programs for a possible C++-or-JavaScript cross-platform application.<br /><br />So yeah, for smaller applications and/or games, HTML5 is definitely an option. In <a href="https://developer.mozilla.org/en/docs/Mozilla/Firefox_OS">Firefox OS</a>, your HTML5 web app will - also with WebGL - work and integrate nicely as "native" app. If you also want to create "native" applications (maybe after finishing the HTML5 version), consider encapsulating your JavaScript code so that you can re-use it in QML code, or (in case of WebGL apps), at least design the rendering part of your application in such a way that the code/architecture and shader programs can be shared with a C++ port of your existing HTML5 app.<br /><br />Another option that's worth considering: Writing a compatiblity application layer that can load (specially-crafted) WebGL subset applications and display them on a fullscreen SDL-(or Qt)-provided window. Applications written in this WebGL subset could then be deployed on the web as HTML5 application or "natively" running on top of a JavaScript engine only. I'd call that "<span style="font-family: &quot;Courier New&quot;,Courier,monospace;">webglenv</span>", and no, I haven't written it yet.<span class="net_nemein_favourites">1 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=1e2bcc72531e920bcc711e29cccff218e3046d546d5&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/1e2bcc72531e920bcc711e29cccff218e3046d546d5/" 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=1e2bcc72531e920bcc711e29cccff218e3046d546d5&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/1e2bcc72531e920bcc711e29cccff218e3046d546d5/" 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>Thomas Perl &lt;m@thp.io&gt;</author>
            <category>feed:437c40ecc45d4b0fa868e422ae16adb1</category>
            <pubDate>Tue, 14 May 2013 20:28:00 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-1e2bcc72531e920bcc711e29cccff218e3046d546d5</guid>
        </item>
        <item>
            <title>Tizen Developer Conference coming up...</title>
            <link>http://yannickpellet.blogspot.com/2013/05/tizen-developer-conference-coming-up.html</link>
            <description><![CDATA[
<div dir="ltr" style="text-align: left;" trbidi="on"><div style="text-align: left;"><span style="font-family: inherit;">The Tizen Developer Conference is coming up from the 22nd of May until the 24th of may 2013 - It is in Downtown San Francisco (<a href="https://www.tizen.org/">https://www.tizen.org/</a>)</span></div><div style="text-align: left;"><span style="font-family: inherit;">I will be there the whole 3 days but I might be hard to grab as I will be running around. If you want to touch base - just contact me through linked in, email or twitter (<a href="https://twitter.com/yapellet">https://twitter.com/yapellet</a>).</span></div><div style="text-align: left;"><span style="font-family: inherit;"><br /></span></div><div style="text-align: left;"><span style="font-family: inherit;">If you are going there, go and check out the following talks from my lab (SRA's Advanced Software Platform). One is "Accelerated HTML5 Rendering for the Tizen Platform" by Henry Song. The other is "WebKit for Tizen" by Laszlo Gombos. Both of those talks are on the WebKit track. Though they are litteraly the top of the iceberg when it comes to our activity, it gives you an idea of what some our interests are.</span><br /><span style="font-family: inherit;"><br /></span></div><div style="text-align: left;"><span style="font-family: inherit;">There is also a presentation around a service prototyping for&nbsp;<span style="background-color: #fafafa; line-height: 24px;">social appointment entitled Rendez-vous &nbsp;under the Tizen Collaboration Projects. </span><span style="background-color: #fafafa; line-height: 24px;">This is presented by Stanford students. It is a small project that we kick-started and sponsored last February as part of the CS210 Stanford Class.</span></span></div><div style="text-align: left;"><span style="background-color: #fafafa; font-family: inherit; line-height: 24px;"><br /></span></div><div style="text-align: left;"><span style="background-color: #fafafa; font-family: inherit; line-height: 24px;">On side note: &nbsp;Art Dahm is giving a talk about building Tizen apps using Enyo &amp; Phonegap. Art - now working for LG - used to be part of my team working &nbsp;when I was working on webOS at HP. I will be sure to check this one out to see if I can meet some of the old team :)</span><br /><span style="background-color: #fafafa; font-family: inherit; line-height: 24px;"><br /></span><span style="background-color: #fafafa; font-family: inherit; line-height: 24px;">See you there.</span></div><div class="views-field views-field-name" style="background-color: #eff0eb; color: #596874; font-family: MuseoSans-500, Helvetica, Arial, sans-serif; font-size: 16px; line-height: 24px; margin-left: 24px;"><div class="views-field views-field-name" style="margin-left: 24px;"><div class="views-field views-field-name" style="background-color: #fafafa; margin-left: 24px;"><span class="field-content"><span class="field-content"><span class="field-content"></span></span></span></div><span class="field-content"><span class="field-content"></span></span></div><span class="field-content"></span></div></div><span class="net_nemein_favourites">1 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=1e2bc54962eb1c6bc5411e28866ef74cb9f013b013b&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/1e2bc54962eb1c6bc5411e28866ef74cb9f013b013b/" 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=1e2bc54962eb1c6bc5411e28866ef74cb9f013b013b&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/1e2bc54962eb1c6bc5411e28866ef74cb9f013b013b/" 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>Yannick Pellet &lt;yannick.pellet@gmail.com&gt;</author>
            <category>feed:d573028622e777551a22558b061985bf</category>
            <pubDate>Tue, 14 May 2013 07:50:00 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-1e2bc54962eb1c6bc5411e28866ef74cb9f013b013b</guid>
        </item>
        <item>
            <title>Qt5 Battery Component</title>
            <link>http://kgronholm.blogspot.com/2013/05/qt5-battery-component.html</link>
            <description><![CDATA[
After the QUItIndicator trilogy which introduced idea, design and performance of a specific Qt5 QML component there's room for more, right?! Something like this:<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-FgfUVxIhH-E/UZB2XmqhFWI/AAAAAAAAAPk/CaXJDcOigHk/s1600/QUItBattery_sc.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-FgfUVxIhH-E/UZB2XmqhFWI/AAAAAAAAAPk/CaXJDcOigHk/s320/QUItBattery_sc.jpg" /></a></div><br />This time we have a dynamic QML component for showing the remaining power of your mobile device battery. As a recap, with "Dynamic QML component" I mean someting which utilizes not only basic QML animation properties (position, opacity, scale etc.) but also new Qt5 features (shaders, particles, scenegraph powa!) to appear "more dynamic". Maybe it's just me, but I would love to see UIs really utilizing modern GPUs... and accelerating this progress is one of the reasons why I code these examples and blog about them. Another reason being to rule-the-world, obviously ;-P<br /><br />Instead of explaining design &amp; features of QUItBattery component I'll let this video to do that:<br /><br /><br /><object height="260" width="420"><param name="movie" value="http://www.youtube.com/v/JULY24SHJ1E?fs=1&amp;hl=en_US"> <param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/JULY24SHJ1E?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="260" width="420"></embed></object><br /><br /><br />If you want to use this liquid battery component in your UI: Download the <a href="http://quitcoding.com/?page=work#quitbattery">sources from here</a>, copy QUItBatteryComponent directory, import it in your QML and off you go. Happy hacking!<br /><br /><span class="net_nemein_favourites">1 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=1e2bb8f6bc12538bb8f11e2a63c45f1bacf31b231b2&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/1e2bb8f6bc12538bb8f11e2a63c45f1bacf31b231b2/" 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=1e2bb8f6bc12538bb8f11e2a63c45f1bacf31b231b2&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/1e2bb8f6bc12538bb8f11e2a63c45f1bacf31b231b2/" 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>Kaj Grönholm &lt;kgronholm@gmail.com&gt;</author>
            <category>feed:ffedab845b17ad5f072a1f90af70d0f9</category>
            <pubDate>Mon, 13 May 2013 08:34:00 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-1e2bb8f6bc12538bb8f11e2a63c45f1bacf31b231b2</guid>
        </item>
        <item>
            <title>MWKN Weekly News for Monday, 13 May 2013</title>
            <link>http://www.mwkn.net/2013/20/front.html</link>
            <description><![CDATA[
<h1>Front Page</h1>
<div class="article article-front" id="front-1"><h2>New Maemo Community Council and Hildon Foundation Council elected</h2><p><span class="lead-in">Last week, the new Maemo Community Council and the inaugural Hildon Foundation Council were elected. On behalf ofthe MWKN staff, your editor would like to congratulate the new council members:</span> "Q2 2013 Maemo Community Council: <a href="http://maemo.org/profile/view/chemist/">R&uuml;diger Schiller</a> (chemist), <a href="http://maemo.org/profile/view/joerg_rw/">Joerg Reisenweber</a> (DocScrutinizer/joerg_rw), <a href="http://maemo.org/profile/view/merlin1991/">Christian Ratzenhofer</a> (merlin1991), <a href="http://maemo.org/profile/view/qwazix/">Michael Demetriou</a> (qwazix), and Akash Sadh (<a href="http://maemo.org/profile/view/thedead1440/">Kash</a>)"</p><p>"Inaugural Hildon Foundation Council: <a href="http://maemo.org/profile/view/chemist/">R&uuml;diger Schiller</a> (chemist), <a href="http://maemo.org/profile/view/joerg_rw/">Joerg Reisenweber</a> (DocScrutinizer/joerg_rw), <a href="http://maemo.org/profile/view/merlin1991/">Christian Ratzenhofer</a> (merlin1991), <a href="http://maemo.org/profile/view/qwazix/">Michael Demetriou</a> (qwazix), and Paul Healy (<a href="http://maemo.org/profile/view/sixwheeledbeast/">sixwheeledbeast</a>)" </p><p><span class="lead-out">Sadly the plan to have both votes result in identical councils to allow the merging of the Maemo Community Council and the Hildon Foundation Council into a single body did not work out, resulting in a situation with separate Maemo Community and Hildon Foundation councils that cannot be easily merged. In practice, it seems likely they will end up operating mostly like a single 6-person body.</span></p><div class="link"><a href="http://thread.gmane.org/gmane.comp.handhelds.maemo.community/5418">Read more</a> (thread.gmane.org)</div><div class="permalink"></div></div>
<div class="article article-front" id="front-2"><h2>Logs from the Maemo Community Council handover meeting available</h2><p><span class="lead-in">The Maemo Community Council handover meeting was held last week. The minutes have not yet been posted, but the logs are available. The meeting mostly dealt with formalities of the handover, but there was some interesting discussion about the banking details of the Hildon Foundation. Rather than coloring the discussion with his own interpretation, your editor suggests reading from about 22:30 onward in the logs. It deals primarily with Hildon Foundation funds, donations, bank account access for new board members and the resigned treasurer, and future board meeting scheduling (or lack thereof).</span></p><div class="link"><a href="http://mg.pov.lt/maemo-meeting-irclog/%23maemo-meeting.2013-05-10.log.html#t2013-05-10T21:29:37">Read more</a> (mg.pov.lt)</div><div class="permalink"></div></div>

<h3>In this edition (<a href="http://www.mwkn.net/2013/20/download.html">Download</a>)...</h3><ol><li><span class="newscat"><a href="http://www.mwkn.net/2013/20/front.html">Front Page</a></span><ul><li>New Maemo Community Council and Hildon Foundation Council elected</li><li>Logs from the Maemo Community Council handover meeting available</li></ul></li><li><span class="newscat"><a href="http://www.mwkn.net/2013/20/community.html">Community</a></span><ul><li>Hildon Foundation Board meeting minutes from April 19, 2013 posted</li></ul></li></ol>
  <span class="net_nemein_favourites">1 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=1e2bc32ef52327cbc3211e2bdb0c7b82cf9c208c208&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/1e2bc32ef52327cbc3211e2bdb0c7b82cf9c208c208/" 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=1e2bc32ef52327cbc3211e2bdb0c7b82cf9c208c208&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/1e2bc32ef52327cbc3211e2bdb0c7b82cf9c208c208/" 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>Andrew Flegg &lt;andrew@bleb.org&gt;</author>
            <category>feed:3e97844fb140de8423afbcb8ff62ccf8</category>
            <pubDate>Mon, 13 May 2013 00:00:00 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-1e2bc32ef52327cbc3211e2bdb0c7b82cf9c208c208</guid>
        </item>
        <item>
            <title>Large-scale sparse multiclass classification</title>
            <link>http://www.mblondel.org/journal/2013/05/12/large-scale-sparse-multiclass-classification/</link>
            <description><![CDATA[
<p>I&#8217;m thrilled to announce that my paper &#8220;Block Coordinate Descent Algorithms for Large-scale Sparse Multiclass Classiﬁcation&#8221; (published in the Machine Learning journal) is now online: <a href="http://www.mblondel.org/publications/mblondel-mlj2013.pdf">PDF</a>, <a href="http://www.mblondel.org/publications/bib/mblondel-mlj2013.txt">BibTeX</a> [*].</p>
<h3>Abstract</h3>
<p>Over the past decade, l1 regularization has emerged as a powerful way to learn classifiers with implicit feature selection. More recently, mixed-norm (e.g., l1/l2) regularization has been utilized as a way to select entire groups of features. In this paper, we propose a novel direct multiclass formulation specifically designed for large-scale and high-dimensional problems such as document classification. Based on a multiclass extension of the squared hinge loss, our formulation employs l1/l2 regularization so as to force weights corresponding to the same features to be zero across all classes, resulting in compact and fast-to-evaluate multiclass models. For optimization, we employ two globally-convergent variants of block coordinate descent, one with line search (Tseng and Yun, 2009) and the other without (Richtárik and Takáč, 2012). We present the two variants in a unified manner and develop the core components needed to efficiently solve our formulation. The end result is a couple of block coordinate descent algorithms specifically tailored to our multiclass formulation. Experimentally, we show that block coordinate descent performs favorably to other solvers such as FOBOS, FISTA and SpaRSA. Furthermore, we show that our formulation obtains very compact multiclass models and outperforms l1/l2- regularized multiclass logistic regression in terms of training speed, while achieving comparable test accuracy.
</p></blockquote>
<h3>Code</h3>
<p>The code of the proposed multiclass method is available in my Python/Cython machine learning library, <a href="https://github.com/mblondel/lightning">lightning</a>. Below is an example of how to use it on the News20 dataset.</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">from</span> sklearn.<span style="color: black;">datasets</span> <span style="color: #ff7700;font-weight:bold;">import</span> fetch_20newsgroups_vectorized
<span style="color: #ff7700;font-weight:bold;">from</span> lightning.<span style="color: black;">primal_cd</span> <span style="color: #ff7700;font-weight:bold;">import</span> CDClassifier
&nbsp;
bunch = fetch_20newsgroups_vectorized<span style="color: black;">&#40;</span>subset=<span style="color: #483d8b;">&quot;all&quot;</span><span style="color: black;">&#41;</span>
X = bunch.<span style="color: black;">data</span>
y = bunch.<span style="color: black;">target</span>
&nbsp;
clf = CDClassifier<span style="color: black;">&#40;</span>penalty=<span style="color: #483d8b;">&quot;l1/l2&quot;</span>,
                   loss=<span style="color: #483d8b;">&quot;squared_hinge&quot;</span>,
                   multiclass=<span style="color: #008000;">True</span>,
                   max_iter=<span style="color: #ff4500;">20</span>,
                   alpha=1e-4,
                   C=<span style="color: #ff4500;">1.0</span> / X.<span style="color: black;">shape</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>,
                   tol=1e-3<span style="color: black;">&#41;</span>
clf.<span style="color: black;">fit</span><span style="color: black;">&#40;</span>X, y<span style="color: black;">&#41;</span>
<span style="color: #808080; font-style: italic;"># accuracy</span>
<span style="color: #ff7700;font-weight:bold;">print</span> clf.<span style="color: black;">score</span><span style="color: black;">&#40;</span>X, y<span style="color: black;">&#41;</span> 
<span style="color: #808080; font-style: italic;"># percentage of selected features</span>
<span style="color: #ff7700;font-weight:bold;">print</span> clf.<span style="color: black;">n_nonzero</span><span style="color: black;">&#40;</span>percentage=<span style="color: #008000;">True</span><span style="color: black;">&#41;</span></pre></div></div>

<p>To use the variant without line search (as presented in the paper), add the max_steps=0 option to CDClassifier.</p>
<h3>Data</h3>
<p>I also released the <a href="http://www.mblondel.org/data/">Amazon7</a> dataset used in the paper. It contains 1,362,109 reviews of Amazon products. Each review may belong to one of 7 categories (apparel, book, dvd, electronics, kitchen &#038; housewares, music, video) and is represented as a 262,144-dimensional vector. It is, to my knowledge, one of the largest publically available multiclass classification dataset.</p>
<p>[*] The final publication is available <a href="http://link.springer.com/article/10.1007%2Fs10994-013-5367-2">here</a>.</p>
<span class="net_nemein_favourites">1 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=1e2bb0438d91ac6bb0411e29818a7abbf70e57fe57f&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/1e2bb0438d91ac6bb0411e29818a7abbf70e57fe57f/" 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=1e2bb0438d91ac6bb0411e29818a7abbf70e57fe57f&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/1e2bb0438d91ac6bb0411e29818a7abbf70e57fe57f/" 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>Mathieu Blondel &lt;mblondel@rubyforge.org&gt;</author>
            <category>feed:46b1d6b26651a331cde2ad188d699e0c</category>
            <pubDate>Sun, 12 May 2013 12:52:56 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-1e2bb0438d91ac6bb0411e29818a7abbf70e57fe57f</guid>
        </item>
        <item>
            <title>Petals for Harmattan - A pure Qt4/Qt5 JS/QML puzzle game</title>
            <link>http://thpmaemo.blogspot.com/2013/05/petals-for-harmattan-pure-qt4qt5-jsqml.html</link>
            <description><![CDATA[
Next up in my list of things I did in the last weeks/months and never blogged about is <a href="https://thp.io/2013/petals/">Petals</a> (<a href="http://store.ovi.com/content/363292">Nokia Store link</a>), a "<i>beautiful, brain-teasing puzzle game for 1-4 players</i>" if the game's website is to be believed (I would like to think it is...). As always, there's some technical details about the porting and creation of this game. While another recent game (<a href="http://thp.io/2013/tetrepetete/">Tetrepetete</a>) has been done on a low level (C++ using no frameworks, and interfacing with multiple front-ends directly, including an OpenGL ES frontend, a <a href="http://youtu.be/g6AMngkwbsQ">console-based ncurses frontend</a>(!) as well as a <a href="http://youtu.be/Zf3uVGKKJW8">server-sent events/XHR/Canvas2D-based HTML5 frontend</a>(!!)), this one is approaching things from a very high level: JavaScript.<br /><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="https://thp.io/2013/petals/squareshot_a.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://thp.io/2013/petals/squareshot_a.png" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;"><a href="https://thp.io/2013/petals/">Petals</a>: A puzzle game written in pure JavaScript and QML</td></tr></tbody></table>The gameplay logic of the game is implemented in pure JavaScript (without any QML dependencies), so it could easily be ported to, say, HTML5, but for integration reasons, QML seemed like the better choice for a release on the N9/Harmattan. Also, writing things in JavaScript wouldn't preclude a console-based frontend using nodejs and <a href="https://github.com/mscdex/node-ncurses">node-ncurses</a> from happening should the need arise (making the flowers look good in ASCII art would be the challenge there - or cheating by using <a href="http://caca.zoy.org/wiki/libcaca">libcaca</a>). Ok, ok - stop cursing, I'll stop talking about curses (cue laugh track).<br /><br />Writing pure QML applications has the advantage of easing porting to Qt 5. While QtQuick 1.1 still exists on Qt 5 (and is <a href="http://blog.qt.digia.com/blog/2013/04/15/evolution-of-the-qml-engine-part-1/">the only QML option at the moment</a> if you are also targetting iOS), QtQuick 2.0 is usually the better choice for performance reasons.<br /><br />In my case, the changes necessary to port from QtQuick 1.1 to QtQuick 2.0 were:<br /><ul><li>Change "<span style="font-family: &quot;Courier New&quot;,Courier,monospace;">import QtQuick 1.1</span>" to "<span style="font-family: &quot;Courier New&quot;,Courier,monospace;">import QtQuick 2.0</span>" (<span style="font-family: &quot;Courier New&quot;,Courier,monospace;"><a href="http://linux.die.net/man/1/sed">sed</a>(1)</span> helps here)</li><li>Instead of assigning a JavaScript function to a property to create a dynamic property binding (<span style="font-family: &quot;Courier New&quot;,Courier,monospace;">item.someprop = function() { return otheritem.otherprop * 3.0; }</span>), this function has to be wrapped in a call to Qt.binding() in Qt 5 (see "<a href="http://qt-project.org/doc/qt-5.0/qtqml/qtqml-syntax-propertybinding.html">Creating Property Bindings from JavaScript</a>" in the Qt 5 docs)</li><li>Instead of using SQL Local Storage directly as in QtQuick 1.1, use <a href="http://qt-project.org/doc/qt-5.0/qtquick/qmlmodule-qtquick-localstorage2-qtquick-localstorage-2.html">QtQuick.LocalStorage 2.0</a>, which you can still do in your .js files - <a href="http://kunalmaemo.blogspot.com/2013/03/using-localstorage-api-from-javascipt.html">use ".import" as described in this blog post</a></li><li>In your C++ launcher (in case you need one), <span style="font-family: &quot;Courier New&quot;,Courier,monospace;">QApplication</span> becomes <span style="font-family: &quot;Courier New&quot;,Courier,monospace;">QGuiApplication</span>, and <span style="font-family: &quot;Courier New&quot;,Courier,monospace;">QDeclarativeView</span> becomes <span style="font-family: &quot;Courier New&quot;,Courier,monospace;">QQuickView</span></li><li>Use "<span style="font-family: &quot;Courier New&quot;,Courier,monospace;">QT += quick qml</span>" instead of "<span style="font-family: &quot;Courier New&quot;,Courier,monospace;">QT += declarative</span>" in your qmake project file</li></ul>And that's basically it. Of course, as this is a full-screen game with custom UI, no platform-specific components (such as <a href="http://harmattan-dev.nokia.com/docs/library/html/qt-components/qt-components.html">Harmattan Components</a> or <a href="https://sailfishos.org/sailfish-silica/">Sailfish Silica</a>) are used, so porting is a bit easier there (no need to "wait" for specific components to be compatible with QtQuick 2.0, which might realistically not happen at all for Harmattan Components). More screenshots of Petals and download links for multiple platforms can be found on the <a href="https://thp.io/2013/petals/">Petals Website</a>.<span class="net_nemein_favourites">1 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=1e2bae9b5ebb994bae911e294cd1fd1e7ec21242124&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/1e2bae9b5ebb994bae911e294cd1fd1e7ec21242124/" 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=1e2bae9b5ebb994bae911e294cd1fd1e7ec21242124&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/1e2bae9b5ebb994bae911e294cd1fd1e7ec21242124/" 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>Thomas Perl &lt;m@thp.io&gt;</author>
            <category>feed:437c40ecc45d4b0fa868e422ae16adb1</category>
            <pubDate>Sun, 12 May 2013 11:30:00 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-1e2bae9b5ebb994bae911e294cd1fd1e7ec21242124</guid>
        </item>
        <item>
            <title>Board Meeting Minutes of April 19, 2013</title>
            <link>http://hildonfoundation.org/board-meeting-minutes-of-april-19-2013/</link>
            <description><![CDATA[
<h4>Board Members Attending:</h4>
<ul>
<li>Craig Woodard / Woody14619 (audio only)</li>
<li>Rob Bauer / SD69 (audio only)</li>
<li>Jim Jagielski / Jimjag (audio only)</li>
</ul>
<h4>Personnel and Organization</h4>
<ul>
<li>Motion by Craig Woodard to appoint Xes as co-sysop for maemo.org, with physical access to server if needed.  Passed unanimously.</li>
<li>Motion by Robert Bauer to appoint Jacekowski as co-sysop for maemo.org, with physical access to server if needed, under supervision of other co-sysops and subject to their continuing consent.  Passed unanimously.</li>
<li>Resignation of Cosimo Kroll as Treasurer was noted and circumstances of bank account discussed.  Volunteers to be requested for Treasurer and appointed at next Board meeting.</li>
<li>Discussion of Secretary and Chair positions.  Robert Bauer will continue as Secretary and Craig Woodard will be Chair.</li>
<li>Discussion of Board Meeting Schedule.  Board members will communicate via email to determine schedule.</li>
<li>Discussion of roles of Hildon Foundation Council and Maemo Community Council.  Colloquoy between Craig Woodard and Robert Bauer on background of the councils.  Jim Jagielski recommends to continue the process of initiating a Hildon Foundation Council election process.  Further colloquoy on the councils during which Jim Jagielski leaves meeting.  Joint motion by Craig Woodard and Robert Bauer to continue with elections for Hildon Foundation Council at the same time as election for Maemo Community Council.  Jim Jagielski not present and does not vote on motion.</li>
<li>Discussion of suggestion of special election for Board of Directors.  Robert Bauer noted that special election of the current Board can be prompted by resignation of a Director and one of the remaining two Directors refusing to appoint a replacement for the resigning Director within 7 days.</li>
<h4>Infrastructure Issues</h4>
<li>Motion by Jim Jagielski to purchase SSL certificates for maemo.org immediately upon transfer of domain from Nokia.  Passed unanimously.</li>
<li>Motion by Craig Woodard to reimburse Joerg Reisenweber up to $300 for purchase of hard drives subject to documentation.  Passed unanimously.</li>
<li>Discussion of IPHH annual contract for server hosting and payment by Treasurer.  Motion by Craig Woodard to sign contract.  Passed unanimously.</li>
<li>Discussion of offering Hildon Foundation server to act as mirror for Qt project.  Suggested by Craig Woodard to request Falk to discuss the matter with IPHH.</li>
</ul>
<span class="net_nemein_favourites">1 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=1e2ba985b6c8602ba9811e297985d49048d2dfa2dfa&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/1e2ba985b6c8602ba9811e297985d49048d2dfa2dfa/" 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=1e2ba985b6c8602ba9811e297985d49048d2dfa2dfa&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/1e2ba985b6c8602ba9811e297985d49048d2dfa2dfa/" 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>Hildon Foundation &lt;board@hildonfoundation.org&gt;</author>
            <category>feed:5c1888b4e2ca0a6afeb71f6631bd8c8a</category>
            <pubDate>Sat, 11 May 2013 21:10:04 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-1e2ba985b6c8602ba9811e297985d49048d2dfa2dfa</guid>
        </item>
        <item>
            <title>Wayland utilizing Android GPU drivers on glibc based systems, Part 2</title>
            <link>http://mer-project.blogspot.com/2013/05/wayland-utilizing-android-gpu-drivers.html</link>
            <description><![CDATA[
<div dir="ltr" style="text-align: left;" trbidi="on"><div class="separator" style="clear: both; text-align: center;"><br /></div>In  this blog series, I am presenting a solution that I've developed  that enables the use of Wayland on top of Android hardware adaptations,  specifically the GPU drivers, but without actually requiring the OS to  be Bionic based. <br /><br />This is part 2 and will cover the actual server side (and a little bit about generic EGL implementation) of the solution. The <a href="http://mer-project.blogspot.fi/2013/04/wayland-utilizing-android-gpu-drivers.html" target="_blank">first part can be read here</a>. The third and last blog post will revolve around the client side solution and how you can use it today, as well as future work. There are a -lot- of links in this blog, please take a look at them to fully understand what is being explained.<br /><br />This work was and is done as part of <a href="http://pl.linkedin.com/in/carstenmunk/" target="_blank">my job</a> as Chief Research Engineer in <a href="http://www.jolla.com/" target="_blank">Jolla,</a> which develop <a href="http://www.sailfishos.org/" target="_blank">Sailfish OS, a mobile-optimized operating system</a> that has the flexibility, ubiquity and stability of the Linux core with a cutting edge user experience built with the renowned <a href="http://qt-project.org/" target="_blank">Qt</a> platform.<br /><br />The views and opinions expressed in this blog series are my own and not that of my employer.<br /><br />The aim is to have documented the proof of concept code and published it under a "LGPLv2.1 only" license,  for the benefit of many different communities&nbsp;and projects&nbsp;(Sailfish,  OpenWebOS, Qt Project, KDE, GNOME, Hawaii, Nemo Mobile, Mer Core based  projects, EFL, etc).<br /><br />This work is done with the hope that it will attract more contribution  and collaboration to bring this solution and Wayland in general into  wider use across the open source ecosystem and use a large selection of  reference device designs for their OS'es.<br /><br /><b>Rendering with OpenGL ES 2.0 to a screen with Android APIs</b><br /><br />In Android, when <a href="http://developer.mips.com/2012/04/11/learning-about-android-graphics-subsystem/" target="_blank">SurfaceFlinger</a> wants to render to the screen, it utilizes a class named <a href="https://android.googlesource.com/platform/frameworks/native/+/jb-mr0-release/libs/ui/FramebufferNativeWindow.cpp" target="_blank">FramebufferNativeWindow</a> which it passes to <a href="http://www.khronos.org/registry/egl/sdk/docs/man/xhtml/eglCreateWindowSurface.html" target="_blank">eglCreateWindowSurface</a>. As I mentioned in my previous post, on Android, when you use eglCreateWindowSurface you utilize a type/'class' named <a href="https://android.googlesource.com/platform/system/core/+/jb-dev/include/system/window.h" target="_blank">ANativeWindow</a>. FramebufferNativeWindow implements this type. This then means it gets buffers utilizing FramebufferNativeWindow, renders to them within the OpenGL ES 2.0 implementation and queues them to be shown on the screen utilizing the same FramebufferNativeWindow.<br /><br />But what happens under the hood? I'll try to explain with <a href="https://github.com/libhybris/libhybris/tree/master/hybris/egl/platforms/fbdev" target="_blank">libhybris' "fbdev" windowing system as an example. </a><br /><br />We're back to ANativeWindow - what libhybris' "fbdev" windowing system does is practically to do an implementation of ANativeWindow.<br /><br />When a OpenGL ES 2.0 implementation wants to have a buffer to render into, it will call the <a href="https://github.com/libhybris/libhybris/blob/master/hybris/egl/platforms/fbdev/fbdev_window.cpp#L134" target="_blank">dequeueBuffer</a> method of an ANativeWindow. This usually happens upon surface creation or when you have done eglSwapBuffers and would like a new fresh buffer to render into. <br /><br />You may have heard of fancy things like <a href="http://www.tweakguides.com/Graphics_9.html" target="_blank">'vsync'</a> and you know that you have to follow signaling of vsync to avoid things like tearing. On the occasion that you do not have any buffers available (as some might be waiting to be posted to the framebuffer), you will need to <a href="https://github.com/libhybris/libhybris/blob/master/hybris/egl/platforms/fbdev/fbdev_window.cpp#L146" target="_blank">block and wait for a non-busy buffer</a> to be available within a dequeueBuffer implementation - don't just return NULL. Use <a href="http://linux.die.net/man/3/pthread_cond_wait" target="_blank">pthread conditions and be CPU-friendly.</a> This also makes sure you will block in eglSwapBuffers()<br /><br />A quick note for implementors of ANativeWindow: Many OpenGL ES drivers are very temperamental. When it relays the information to you that it wants to set your buffer count to 4 buffers, it means that it wants 4 buffers and only to see those 4 buffers in the lifetime until usage or format changes. Mess up and it will happily crash on you - these drivers do not come with debug symbols.<br /><br />When you want to allocate graphical buffers you naturally need gralloc to do so - gralloc is a module that is accessible through Android's <a href="https://github.com/libhybris/libhybris/blob/master/hybris/include/android/hardware/hardware.h" target="_blank">libhardware API </a>- in practice, gralloc is a shared object that libhardware dlopen()s, see /system/lib/hw/ for examples of these (gps, lights, sensors, etc).<br /><br />When loading gralloc you will naturally get the interface of the <a href="https://github.com/libhybris/libhybris/blob/master/hybris/egl/platforms/fbdev/eglplatform_fbdev.cpp#L32" target="_blank">gralloc module itself</a>, but when you initialize gralloc, you get an <a href="https://github.com/libhybris/libhybris/blob/master/hybris/egl/platforms/fbdev/eglplatform_fbdev.cpp#L32" target="_blank">allocation device interface</a> where you can allocate and free buffers with, by <a href="https://github.com/libhybris/libhybris/blob/master/hybris/egl/platforms/fbdev/eglplatform_fbdev.cpp#L32" target="_blank">specifying parameters</a> such as width, height, <a href="https://github.com/libhybris/libhybris/blob/master/hybris/egl/platforms/fbdev/eglplatform_fbdev.cpp#L32" target="_blank">usage</a>, <a href="https://github.com/libhybris/libhybris/blob/master/hybris/include/android/system/graphics.h#L42" target="_blank">format</a>. Usage is important since we'd like to <a href="https://github.com/libhybris/libhybris/blob/master/hybris/include/android/hardware/gralloc.h#L76" target="_blank">allocate buffers for use with the framebuffer</a> - so when we allocate a buffer, we allocate with usage <a href="https://github.com/libhybris/libhybris/blob/master/hybris/egl/platforms/fbdev/fbdev_window.cpp#L431" target="_blank">'usage | GRALLOC_USAGE_HW_FB'</a>.<br /><br />The return value of the alloc() call is a integer value indicating if it was a success, a native handle in the provided memory location (read my previous blog post for an explanation on what this is) and <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/aa473780%28v=vs.85%29.aspx" target="_blank">stride of the buffer</a>.<br /><br />We then wrap the handle and related information in a <a href="https://github.com/libhybris/libhybris/blob/master/hybris/include/android/system/window.h#L86" target="_blank">ANativeWindowBuffer structure</a> and pass it back to the caller. Please note two things in this structure. <a href="https://github.com/libhybris/libhybris/blob/master/hybris/include/android/system/window.h#L82" target="_blank">incRef and decRef</a> - they are very important. <a href="https://github.com/libhybris/libhybris/blob/master/hybris/egl/platforms/common/nativewindowbase.cpp#L36" target="_blank">You will need to implement reference counting</a> and you will need to increase/decrease your reference counting matching your own references to it. When reference count reaches 0, the buffer should destruct.<br /><br />Eventually we will then get the buffer back from the caller in queueBuffer -- but how do we now send it to the framebuffer to be displayed?<br /><br />In the initialization of our framebuffer window, we should have also opened the framebuffer with the libhardware API. It is in <a href="https://github.com/libhybris/libhybris/blob/master/hybris/egl/platforms/fbdev/eglplatform_fbdev.cpp#L30" target="_blank">the same hw_module_t as gralloc.</a> The <a href="https://github.com/libhybris/libhybris/blob/master/hybris/include/android/hardware/fb.h#L38" target="_blank">framebuffer interface</a> includes handy information such as the width, height, format, dpi and a few methods to actually utilize the framebuffer. The <a href="https://github.com/libhybris/libhybris/blob/master/hybris/include/android/hardware/fb.h#L126" target="_blank">most important one for us is post()</a>. This allows us to flip an actual buffer to the screen - utilizing the buffer handle, provided it has the same width, height/format as framebuffer and is allocated with appropiate usage (framebuffer usage). This call will on occasion block.<br /><br />We have to be careful not to deliver the current front buffer to the caller in dequeueBuffer until we have replaced it with another at the front of the screen or we may see flickering.<br /><br />A note to users of libhybris: there may be some Android adaptations that implement a custom framebuffer interface requiring extra implementation to achieve sane posting of frames that blocks. Check your <a href="http://framebuffernativewindow.cpp/">FramebufferNativeWindow.cpp</a> for this. This does not seem to be pervasive but I've encountered it on HP Touchpad with CyanogenMod/ICS. <br /><br /><b>Server-side Wayland enablement</b><br /><br />The wayland protocol has two sides, server - and client. But unlike X, there is no "Wayland server". The implementation of the protocol communication for each side is implemented in respectively libwayland-server and libwayland-client. When implementing a compositor, you then utilize libwayland-server API to create server sockets, do communication, etc.<br /><br />But how does the EGL stack get to be connected to a Wayland server instance when the associated EGLDisplay the stack is connected to, probably isn't a Wayland display? (note: may be in nested compositors - ie, a Wayland compositor running as a client to another Wayland compositor) That's where the next topic comes in:<br /><br /><b><a href="http://cgit.freedesktop.org/mesa/mesa/tree/docs/specs/WL_bind_wayland_display.spec">EGL extensions - EGL_WL_bind_wayland_display</a> </b><br /><br />In order to connect your EGL stack to a Wayland display, you need to bind to one - you do this with <a href="http://cgit.freedesktop.org/mesa/mesa/tree/docs/specs/WL_bind_wayland_display.spec#n53" target="_blank">eglBindWaylandDisplay(EGLDisplay, struct wl_display *)</a> from the EGL_WL_bind_wayland_display. <a href="https://github.com/libhybris/libhybris/blob/master/hybris/egl/platforms/common/eglplatformcommon.cpp" target="_blank">In libhybris, we provide this extension</a> when it has been configured with --enable-wayland and available in most windowing systems (we provide an environment variable EGL_PLATFORM to select between 'windowing systems). Since the extension is not just part of the Wayland windowing system, it is possible to do nested Wayland compositors.<br /><br />But what happens in libhybris when you bind to a Wayland display? We call the <a href="https://github.com/libhybris/libhybris/blob/master/hybris/egl/platforms/common/server_wlegl.cpp#L131" target="_blank">server_wlegl_create method in server_wlegl.cpp</a>. What this does is to add a global object to the Wayland protocol - with a certain interface, - but where is this interface defined? As it has to be shared between both client and server; it is <a href="https://github.com/libhybris/libhybris/blob/master/hybris/egl/platforms/common/wayland-android.xml" target="_blank">specified in a xml format file that</a> is then converted by a <a href="https://github.com/libhybris/libhybris/blob/master/hybris/egl/platforms/common/Makefile.am#L18" target="_blank">tool called 'wayland-scanner' into .c files that are then linked into your client or server part</a>. <a href="https://github.com/libhybris/libhybris/blob/master/hybris/egl/platforms/common/server_wlegl.cpp#L114" target="_blank">We then implement the actual interfaces for server side</a> in our code.<br /><b><br /></b><b>Creation of buffers</b><br /><b><br /></b>When a client requests to create a buffer, <a href="https://github.com/libhybris/libhybris/blob/master/hybris/egl/platforms/common/wayland-android.xml#L40" target="_blank">it first creates an Android native handle object on server side</a> and shares the client's native handle through the Wayland protocol (<a href="https://github.com/libhybris/libhybris/blob/master/hybris/egl/platforms/common/wayland-android.xml#L72" target="_blank">utilizing the support for fd passing</a>) and then actually asks to <a href="https://github.com/libhybris/libhybris/blob/master/hybris/egl/platforms/common/wayland-android.xml#L52" target="_blank">create the buffer</a> (note: we actually created the buffer on client side, now we're just sharing it with the compositor and letting it know the details).<br /><br />When that happens on libhybris side, is when a handle is created, we <a href="https://github.com/libhybris/libhybris/blob/master/hybris/egl/platforms/common/server_wlegl_handle.cpp#L97" target="_blank">construct an Android native_handle_t on server side - with the correct fd and integer information</a>. We then <a href="https://github.com/libhybris/libhybris/blob/master/hybris/egl/platforms/common/server_wlegl_buffer.cpp#L87" target="_blank">map this with registerBuffer into the compositor's address space so the buffer is available to EGL and related stacks.</a><br /><br />Once we have the handle in place, we can now create an Android native buffer - like we made ANativeBuffer on client side in the framebuffer/generic window scenario, <a href="https://github.com/libhybris/libhybris/blob/master/hybris/egl/platforms/common/server_wlegl_buffer.cpp#L93" target="_blank">we make one representing the remote buffer with the reconstructed handle</a>. <a href="https://github.com/libhybris/libhybris/blob/master/hybris/egl/platforms/common/server_wlegl_buffer.cpp#L76" target="_blank">Finally we construct a Wayland object referencing this Android buffer and increase the reference counter of the Android buffer - and pass the buffer back to the Wayland client.</a><br /><br />When we want to destroy the buffer again (well, when the reference count reaches 0), <a href="https://github.com/libhybris/libhybris/blob/master/hybris/egl/platforms/common/server_wlegl_buffer.cpp#L101" target="_blank">we unregister the buffer and close the native handle.</a><br /><b><br /></b><b>Utilizing a Wayland-Android buffer as part of your scenegraph</b><br /><br />When a compositor would like to utilize a Wayland buffer in general, it uses <a href="http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image_base.txt" target="_blank">eglCreateImageKHR</a> with the EGL_WAYLAND_BUFFER_WL target and passing the (server-side) wl_buffer. This means that the compositor does not have to worry about the factual implementation of the wl_buffer behind the scene.<br /><br />In our case, our wl_buffer is the one we indicated above - so we know it <a href="https://github.com/libhybris/libhybris/blob/master/hybris/egl/platforms/common/server_wlegl_buffer.cpp#L72" target="_blank">actually encapsulates a ANativeWindowBuffer with a handle/width/height </a>etc. The knowledged reader might realize that eglCreateImageKHR in the Android EGL implementation does not support EGL_WAYLAND_BUFFER_WL. It does however support <a href="http://www.khronos.org/registry/egl/extensions/ANDROID/EGL_ANDROID_image_native_buffer.txt" target="_blank">EGL_NATIVE_BUFFER_ANDROID</a><br /><br />The way that this is handled is that we wrap eglCreateImageKHR and when we see EGL_WAYLAND_BUFFER_WL, we call the real eglCreateImageKHR with EGL_NATIVE_BUFFER_ANDROID - with the ANativeWindowBuffer. And we get the Wayland client's buffer as part of our OpenGL scenegraph.<br /><br />This way we can also easily implement method such as eglQueryWaylandBufferWL as we know the attributes of the Android buffer.<br /><br />An implementor's note: the destructor of a buffer is first called with wl_buffer_destroy coming from client side. You'll have to remember reference counting and no<span id="goog_1461963314"></span><a href="http://www.blogger.com/"></a><span id="goog_1461963315"></span>t just delete the buffer<br /><br /><b>Conclusion</b><br /><br />Thanks for reading this (rather technical) second blog post, the third one should follow quite soon. The code is already published and continually developed in <a href="http://github.com/libhybris/libhybris">http://github.com/libhybris/libhybris</a> but it's not easy to approach or use for general users or developers right now.<br /><br />The final post will describe how you can use this solution together with QtCompositor on top of <a href="http://www.merproject.org/" target="_blank">Mer Core</a> as well as describe how the Wayland client side works to make all this tie together. <a href="https://github.com/libhybris/libhybris/tree/master/hybris/egl/platforms/wayland" target="_blank">You can already now study, comment or flame the client side implementation</a>. But for the explanation and for a description of what is missing, you'll have to wait for next one :)<br /><br /><a href="http://webchat.freenode.net/" target="_blank">Feel free to join us in #libhybris on irc.freenode.net to discuss and contribute</a> to this work. </div><span class="net_nemein_favourites">1 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=1e2b813ad92de22b81311e2b989c9fe9b8822232223&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/1e2b813ad92de22b81311e2b989c9fe9b8822232223/" 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=1e2b813ad92de22b81311e2b989c9fe9b8822232223&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/1e2b813ad92de22b81311e2b989c9fe9b8822232223/" 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>Carsten Munk &lt;carsten.munk@gmail.com&gt;</author>
            <category>feed:f795a4d0dabfedf317983d102f26b25c</category>
            <pubDate>Wed, 08 May 2013 20:22:00 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-1e2b813ad92de22b81311e2b989c9fe9b8822232223</guid>
        </item>
        <item>
            <title>Upcoming: Billboard 1.0.9 for Nokia N9</title>
            <link>http://thpmaemo.blogspot.com/2013/05/upcoming-billboard-109-for-nokia-n9.html</link>
            <description><![CDATA[
Turns out I haven't posted here for two months, so here we go again: <a href="http://thp.io/2012/billboard/">Billboard</a>, your favorite low-power mode standby screen will soon receive a new update - version 1.0.9 has been uploaded to Nokia Store QA two days ago, and should hopefully pass QA and be available as an update in the next few days. This release brings a few major under-the-hood improvements and small bugfixes:<br /><ul><li>Fixed MeeCast icon (in 1.0.8, you can already use <span style="font-family: &quot;Courier New&quot;,Courier,monospace;">&lt;&lt;{meecast-icon-src}&gt;&gt;</span>)</li><li>New formatter that allows you to <a href="http://www.flickr.com/photos/thp4/8619724556">nest {} expressions</a> used for adding dynamic content</li><li> Optional <a href="http://www.flickr.com/photos/thp4/8655275610">image dithering</a> (using <span style="font-family: &quot;Courier New&quot;,Courier,monospace;">#</span> after the filename) for better colors in low power mode</li></ul>With the new formatter, you can now output {} expressions in your scripts so that they get replaced, and similarly pass {} expressions as parameters to your scripts (for example to modify them in some way before displaying). This should allow for even more customization, some examples of what users have been doing on their N9 standby screen can be seen in the <a href="http://talk.maemo.org/showthread.php?t=84507">Billboard Standby Screen support thread</a> on talk.maemo.org.<br /><br />If you are looking for additional ways to tweak and enhance your Billboard-on-N9 experience, have a look at <a href="https://github.com/harmattan/billboard-scripts">billboard-scripts</a>, a growing collection of Shell and Python scripts that provide even more ways of customizing your standby screen.<br /><br />If you haven't purchased Billboard from Nokia Store yet, you can <a href="http://store.ovi.com/content/279408">get the current version now</a> for your N9, and get the upgrade to 1.0.9 as soon as it's available. If you are already a happy user, watch your application updates in the next few days, and get the new version.<span class="net_nemein_favourites">1 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=1e2b805155b4e0eb80511e2be39015ddd2a3d153d15&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/1e2b805155b4e0eb80511e2be39015ddd2a3d153d15/" 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=1e2b805155b4e0eb80511e2be39015ddd2a3d153d15&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/1e2b805155b4e0eb80511e2be39015ddd2a3d153d15/" 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>Thomas Perl &lt;m@thp.io&gt;</author>
            <category>feed:437c40ecc45d4b0fa868e422ae16adb1</category>
            <pubDate>Wed, 08 May 2013 19:20:00 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-1e2b805155b4e0eb80511e2be39015ddd2a3d153d15</guid>
        </item>
        <item>
            <title>Save Ferris: Show some love for libferris...</title>
            <link>http://monkeyiq.blogspot.com/2013/05/save-ferris-show-some-love-for-libferris.html</link>
            <description><![CDATA[
Libferris has been gaining some KDE love in recent times. There is now a KIO slave to allow you to see <a href="http://monkeyiq.blogspot.com.au/2012/11/libferris-as-kio-slave.html">libferris from KDE</a>, also the ability to get at <a href="http://monkeyiq.blogspot.com.au/2010/05/plasma-libferris-and-google.html">libferris from plasma</a>.<br /><br />I've been meaning to update the mounting of some Web services like vimeo for quite some time. I'd also like to expand to allow mounting google+ as a filesystem and add other new Web services.<br /><br />In order to manage time so that this can happen quicker, I thought I'd try the waters with a <a href="http://pledgie.com/campaigns/20036">pledgie</a>. I've left this open ended rather than sticking an exact "bounty" on things. I had the idea of trying a pledgie with my recent investigation into the libferris indexing plugins on a small form factor ARM machine. I'd like to be able to spend more time on libferris, and also pay the rent while doing that, so I thought I'd throw the idea out into the public.<br /><br />If you've enjoyed the old tricks of mounting XML, Berkeley DB, SQLite, PostgreSQL and other relational databases, flickr, google docs, identica, and others and want to see more then please support <a href="http://pledgie.com/campaigns/20036">the pledgie</a> to speed up continued development. Enjoy libferris!<br /><br /><a href="http://www.pledgie.com/campaigns/20036"><img a="" along="" alt="Click here to lend your support to: Save Ferris: Show some love for libferris and help kick it" and="" at="" border="0" development="" donation="" make="" s="" src="http://www.pledgie.com/campaigns/20036.png?skin_name=chrome" www.pledgie.com="" /></a><br /><br /><span class="net_nemein_favourites">0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=1e2b7bf8952051eb7bf11e29d2625794213fdf6fdf6&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/1e2b7bf8952051eb7bf11e29d2625794213fdf6fdf6/" 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=1e2b7bf8952051eb7bf11e29d2625794213fdf6fdf6&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/1e2b7bf8952051eb7bf11e29d2625794213fdf6fdf6/" 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>Ben Martin &lt;monkeyiq@users.sourceforge.net&gt;</author>
            <category>feed:db85272b5cc4c48c874836930690af4e</category>
            <pubDate>Wed, 08 May 2013 01:57:00 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-1e2b7bf8952051eb7bf11e29d2625794213fdf6fdf6</guid>
        </item>
        <item>
            <title>MWKN Weekly News for Monday,  6 May 2013</title>
            <link>http://www.mwkn.net/2013/18/front.html</link>
            <description><![CDATA[
<h1>Front Page</h1>
<div class="article article-front" id="front-1"><h2>Nominations over for Maemo Community Council and Hildon Foundation Council</h2><p><span class="lead-in">Last week, <a href="http://maemo.org/profile/view/qwazix/">Michael Demetriou</a> announced the closure of the nominations for Maemo Community Council and Hildon Foundation Council:</span> "The nomination period for candidates for the upcoming Maemo Community Council and Hildon Foundation Council has ended on the 23rd of the current month of April. The voting begins on Tuesday the 30th of April. We are happy to see more than enough candidates to hold an election this time. The candidates are as follows: <a href="http://maemo.org/profile/view/chemist/">R&uuml;diger Schiller</a> (chemist), <a href="http://maemo.org/profile/view/joerg_rw/">Joerg Reisenweber</a> (joerg_rw/DocScrutinizer), <a href="http://maemo.org/profile/view/kerio/">Edoardo Spadolini</a> (kerio), <a href="http://maemo.org/profile/view/merlin1991/">Christian Ratzenhofer</a> (merlin1991), Aakash Sadh (<a href="http://maemo.org/profile/view/thedead1440/">Kash</a>), <a href="http://maemo.org/profile/view/qwazix/">Michael Demetriou</a> (qwazix), and <a href="http://maemo.org/profile/view/sixwheeledbeast/">sixwheeledbeast</a> (sixwheeledbeast)."</p><div class="link"><a href="http://talk.maemo.org/showpost.php?p=1339456&postcount=2">Read more</a> (talk.maemo.org)</div><div class="permalink"></div></div>
<div class="article article-front" id="front-2"><h2>Voting for Maemo Community Council and Hildon Foundation Council begins on 2013-04-30 at 23:59 UTC</h2><p><span class="lead-in">The election for Maemo Community Council and the Hildon Foundation Council will be opening this week on 2013-04-30 at 23:59 UTC. The election should run through Tuesday 2013-05-07 at 23:59 UTC.</span></p><p><span class="lead-in">The election will be for both the Maemo Community Council and a Hildon Foundation Council. Unfortunately, this situation arose by happenings that seem primarily rooted in political motivations. These motivations prevented the current Maemo Community Council from taking on the mantle and responsibilities of the Hildon Foundation Council to provide for a smooth transition.</span></p><p><span class="lead-in">The compromise reached has left the electorate voting on one set of candidates for two bodies, with the idea being that voters can voice their opinion about whether the Maemo Community Council and Hildon Foundation Council should be two separate bodies or a single one by the composition of their ballots for each body (identical ballots indicating desire for a single body).</span></p><p><span class="lead-in">Editorially speaking, this publication is in favor of a single body. This being the only sensible interpretation of the intentions of the by-laws in providing for a Hildon Foundation Council, as a Maemo Community Council without Nokia and with a nearly-duplicate body in the Hildon Foundation Council would serve very little purpose. If you prefer to see a single council body, cast both ballots identically.</span></p><div class="link"><a href="http://talk.maemo.org/showthread.php?t=89926">Read more</a> (talk.maemo.org)</div><div class="permalink"></div></div>

<h3>In this edition (<a href="http://www.mwkn.net/2013/18/download.html">Download</a>)...</h3><ol><li><span class="newscat"><a href="http://www.mwkn.net/2013/18/front.html">Front Page</a></span><ul><li>Nominations over for Maemo Community Council and Hildon Foundation Council</li><li>Voting for Maemo Community Council and Hildon Foundation Council begins on 2013-04-30 at 23:59 UTC</li></ul></li><li><span class="newscat"><a href="http://www.mwkn.net/2013/18/community.html">Community</a></span><ul><li>Voting on the Maemo Community Council election rules refendum closes</li></ul></li></ol>
  <span class="net_nemein_favourites">2 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=1e2b7420fd7352eb74211e29e8e9d7e4d68814e814e&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/1e2b7420fd7352eb74211e29e8e9d7e4d68814e814e/" 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=1e2b7420fd7352eb74211e29e8e9d7e4d68814e814e&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/1e2b7420fd7352eb74211e29e8e9d7e4d68814e814e/" 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>Andrew Flegg &lt;andrew@bleb.org&gt;</author>
            <category>feed:3e97844fb140de8423afbcb8ff62ccf8</category>
            <pubDate>Mon, 06 May 2013 04:00:00 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-1e2b7420fd7352eb74211e29e8e9d7e4d68814e814e</guid>
        </item>
        <item>
            <title>QUItIndicators: Performance considerations</title>
            <link>http://kgronholm.blogspot.com/2013/05/quitindicators-performance.html</link>
            <description><![CDATA[
(This is part III, please check also <a href="http://kgronholm.blogspot.fi/2013/04/quitindicators-introduction.html">parts I</a> and <a href="http://kgronholm.blogspot.fi/2013/04/quitindicators-design-considerations.html">II</a>)<br /><br />Even with a small component like this, there are plenty of possibilities to improve (or sink) the performance. To make sure that our indicators perform as expected, we'll test them on Nokia N9 and and on Raspberry Pi.<br /><br />These both devices are relatively low-end by current standards. N9 contains 1GHz Cortex-A8 CPU which is still quite beefy, but GPU (SGX530) on the other hand is getting old and unable to handle more complicated fragment shaders. For RPi these are just the opposite: CPU is slowish 700MHz ARM11 while the GPU (VideoCore IV) is more performant than N9 SGX530. Because of these qualities (and because both support Qt5, naturally) this duo is excellent for our performance ensurement.<br /><br />So here's a short video showing how our indicators perform on Nokia N9 and on RaspberryPi:<br /><br /><object height="260" width="420"><param name="movie" value="http://www.youtube.com/v/zlkYm3_OwM0?fs=1&amp;hl=en_US"> <param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/zlkYm3_OwM0?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="260" width="420"></embed></object><br /><br /><br />Performs pretty OK on both, right? ProgressIndicator stress test isn't smooth on RPi, which indicates that its CPU can't handle 100 indicators animated like that. So stress test does what it's supposed to, normal use cases perform well.<br /><br />Even with declarative QML language, good performance doesn't just happen, you need to work towards it. By looking at the sources of these indicators, at least these tips/notes can be made:<br /><br /><ul><li>BusyIndicator and ProgressIndicator are separate components instead of just one component with e.g. "indeterminate" property. This allows using a more light-weight (only one texture, animating only vertex shader, less properties etc.) BusyIndicator component with indeterminate use-cases. Lesson to learn is to avoid making too general/bloat QML components.</li><li>There are four different sizes for indicators, from small (64x64px) to huge (512x512px). These sizes were selected because power-of-two texture sizes are more optimal for GPU. <a href="http://qt-project.org/doc/qt-5.0/qtquick/qml-qtquick2-image.html#sourceSize-prop">SourceSize</a> property is used to scale and cache exactly the correct sized textures.</li><li>BusyIndicator animation is achieved purely on vertex shader. As vertex shader is run once for every vertex instead of once for every fragment (pixel), it can be much more GPU-friendly. In case of an 256x256px indicator, our vertex shader is executed over 650(!) times less than fragment shader.</li><li>To keep the amount of vertices as small as possible while making sure animation looks still smooth, the mesh size is allocated based on indicator size. <a href="http://qt-project.org/doc/qt-5.0/qtquick/qml-qtquick2-gridmesh.html">GridMesh</a> resolution for 256x256 indicator is 10x10 while 64x64 indicator manages with a 4x4 mesh.</li><li>When using items&amp;images as sources for <a href="http://qt-project.org/doc/qt-5.0/qtquick/qml-qtquick2-shadereffect.html">ShaderEffect</a> and not needing the original one, remember to set its visibility to false to prevent it from rendering.</li><li>ProgressIndicator can show percentages in the center and applies vertex animation also for it, which requires that the whole Item is used as a source for ShaderEffect. Initialize of Item as a ShaderEffect source is slightly slower than initialize of Image. This is because Items (with their child Items) need to be rendered into FBO first while Image textures are instantly available. When percentages are disabled (showPercentages: false), Image is used directly and stress test of 162 ProgressIndicators starts pretty instantly. So if you need instantly appearing ProgressIndicators, don't show percentages on them.</li><li>Minimize the amount of property changes. Property bindings in QML are so easy to make that without paying attention you may forget to disable those when not needed. As an example, ProgressIndicator percentages Text element visibility was set to false when disabled and it wasn't even used as part of the shader source. But because of an oversight, its text property was still updated whenever ProgressIndicator value changed. That's bad, fixed now to update text only when showPercentages is true. Qt Creator QML Profiler is the tool to use to analyze your code.</li></ul><br />So with all this, does it mean that these indicator components are fully optimized? Well of course not! There are still some generalization left and room for improvements. Additinally, although we have tried to offload most of the work from CPU to GPU, indicator animations like these should be run in a separate thread instead of the GUI thread. Only this would allow smooth 60fps even when processing under heavy CPU load. For details, please read this blog post by Gunnar: <a href="http://blog.qt.digia.com/blog/2012/08/20/render-thread-animations-in-qt-quick-2-0/">http://blog.qt.digia.com/blog/2012/08/20/render-thread-animations-in-qt-quick-2-0/</a><br /><br />Summing up briefly: When implementing QML components for applications, developers and designers should co-operate closely to bend the design to be as CPU&amp;GPU friendly as possible while still making designers happy. Designers dig perfect pixels, but they also appreciate smooth 60fps. By making wise compromises and utilizing Qt5 correctly, we can deliver both.<br /><br />Sources of QUItIndicator components &amp; examples are available from: <a href="http://quitcoding.com/?page=work#indicators">http://quitcoding.com/?page=work#indicators</a><br /><br /><span class="net_nemein_favourites">0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=1e2b74176e122bcb74111e29e8e9d7e4d68814e814e&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/1e2b74176e122bcb74111e29e8e9d7e4d68814e814e/" 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=1e2b74176e122bcb74111e29e8e9d7e4d68814e814e&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/1e2b74176e122bcb74111e29e8e9d7e4d68814e814e/" 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>Kaj Grönholm &lt;kgronholm@gmail.com&gt;</author>
            <category>feed:ffedab845b17ad5f072a1f90af70d0f9</category>
            <pubDate>Thu, 02 May 2013 13:34:00 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-1e2b74176e122bcb74111e29e8e9d7e4d68814e814e</guid>
        </item>
        <item>
            <title>MWKN Weekly News for Monday, 29 Apr 2013</title>
            <link>http://www.mwkn.net/2013/17/front.html</link>
            <description><![CDATA[
<h1>Front Page</h1>
<div class="article article-front" id="front-1"><h2>Nominations over for Maemo Community Council and Hildon Foundation Council</h2><p><span class="lead-in">Last week, <a href="http://maemo.org/profile/view/qwazix/">Michael Demetriou</a> announced the closure of the nominations for Maemo Community Council and Hildon Foundation Council:</span> "The nomination period for candidates for the upcoming Maemo Community Council and Hildon Foundation Council has ended on the 23rd of the current month of April. The voting begins on Tuesday the 30th of April. We are happy to see more than enough candidates to hold an election this time. The candidates are as follows: <a href="http://maemo.org/profile/view/chemist/">R&uuml;diger Schiller</a> (chemist), <a href="http://maemo.org/profile/view/joerg_rw/">Joerg Reisenweber</a> (joerg_rw/DocScrutinizer), <a href="http://maemo.org/profile/view/kerio/">Edoardo Spadolini</a> (kerio), <a href="http://maemo.org/profile/view/merlin1991/">Christian Ratzenhofer</a> (merlin1991), Aakash Sadh (<a href="http://maemo.org/profile/view/thedead1440/">Kash</a>), <a href="http://maemo.org/profile/view/qwazix/">Michael Demetriou</a> (qwazix), and <a href="http://maemo.org/profile/view/sixwheeledbeast/">sixwheeledbeast</a> (sixwheeledbeast)."</p><div class="link"><a href="http://talk.maemo.org/showpost.php?p=1339456&postcount=2">Read more</a> (talk.maemo.org)</div><div class="permalink"></div></div>
<div class="article article-front" id="front-2"><h2>Voting for Maemo Community Council and Hildon Foundation Council begins on 2013-04-30 at 23:59 UTC</h2><p><span class="lead-in">The election for Maemo Community Council and the Hildon Foundation Council will be opening this week on 2013-04-30 at 23:59 UTC. The election should run through Tuesday 2013-05-07 at 23:59 UTC.</span></p><p><span class="lead-in">The election will be for both the Maemo Community Council and a Hildon Foundation Council. Unfortunately, this situation arose by happenings that seem primarily rooted in political motivations. These motivations prevented the current Maemo Community Council from taking on the mantle and responsibilities of the Hildon Foundation Council to provide for a smooth transition.</span></p><p><span class="lead-in">The compromise reached has left the electorate voting on one set of candidates for two bodies, with the idea being that voters can voice their opinion about whether the Maemo Community Council and Hildon Foundation Council should be two separate bodies or a single one by the composition of their ballots for each body (identical ballots indicating desire for a single body).</span></p><p><span class="lead-in">Editorially speaking, this publication is in favor of a single body. This being the only sensible interpretation of the intentions of the by-laws in providing for a Hildon Foundation Council, as a Maemo Community Council without Nokia and with a nearly-duplicate body in the Hildon Foundation Council would serve very little purpose. If you prefer to see a single council body, cast both ballots identically.</span></p><div class="link"><a href="http://talk.maemo.org/showthread.php?t=89926">Read more</a> (talk.maemo.org)</div><div class="permalink"></div></div>

<h3>In this edition (<a href="http://www.mwkn.net/2013/17/download.html">Download</a>)...</h3><ol><li><span class="newscat"><a href="http://www.mwkn.net/2013/17/front.html">Front Page</a></span><ul><li>Nominations over for Maemo Community Council and Hildon Foundation Council</li><li>Voting for Maemo Community Council and Hildon Foundation Council begins on 2013-04-30 at 23:59 UTC</li></ul></li><li><span class="newscat"><a href="http://www.mwkn.net/2013/17/community.html">Community</a></span><ul><li>Voting on the Maemo Community Council election rules refendum closes</li></ul></li></ol>
  <span class="net_nemein_favourites">1 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=1e2b08a33614390b08a11e289f02179699989188918&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/1e2b08a33614390b08a11e289f02179699989188918/" 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=1e2b08a33614390b08a11e289f02179699989188918&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/1e2b08a33614390b08a11e289f02179699989188918/" 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>Andrew Flegg &lt;andrew@bleb.org&gt;</author>
            <category>feed:3e97844fb140de8423afbcb8ff62ccf8</category>
            <pubDate>Mon, 29 Apr 2013 04:00:00 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-1e2b08a33614390b08a11e289f02179699989188918</guid>
        </item>
        <item>
            <title>MWKN Weekly News for Monday, 22 Apr 2013</title>
            <link>http://www.mwkn.net/2013/16/front.html</link>
            <description><![CDATA[
<h1>Front Page</h1>
<div class="article article-front" id="front-1"><h2>This week in Maemo Community politics</h2><p><span class="lead-in">Maemo Community politics always get interesting during periods of change. Nokia is in the process of handing over control of maemo.org and its infrastructure to the community, which makes this one of the largest fundamental changes in community history. Big change, lots of politics.</span></p><p><span class="lead-in">Last year, the Hildon Foundation was formed to act as a legal proxy to the community and provide stewardship for the infrastructure. A board of three directors was elected at that time to direct the foundation. It has, in many ways, had a rocky start. Despite success in negotiations with Nokia about the specifics of the maemo.org handover, and generous assistance from the community in the form donations (last count was totalled at several thousand dollars) and time (volunteer sysops like <a href="http://maemo.org/profile/view/fstern/">Falk Stern</a> stepped up to provide support for the new infrastructure), all of the elected board members have resigned (<a href="http://maemo.org/profile/view/texrat/">Randall Arnold</a> early on, and <a href="http://maemo.org/profile/view/timsamoff/">Tim Samoff</a> and <a href="http://maemo.org/profile/view/ivgalvez/">Ivan Galvez Junquera</a> more recently), leaving a board composed entirely of appointed members. This has lead to calls from the community to hold new elections for the board.</span></p><p><span class="lead-in">Unfortunately, there are several issues causing contention and a number of different interpretations of how they should shake out. We&#39;re going to attempt to give you a good overview of most of the issues in question and summarize the arguments from the major positions on them. The core issue the week, though, is whether the Maemo Community Council has the authority to call for an election of the Hildon Foundation Board (which is covered further down the page).</span></p><div class="permalink"></div></div>
<div class="article article-front" id="front-2"><h2>Rob Bauer&#39;s take on the Maemo Community Council/Hildon Foundation Council distinction</h2><p><span class="lead-in">One of the major issues in the recent debates is the interpretation of a clause in the by-laws which provides for a Hildon Foundation Council alongside the Hildon Foundation Board. At issue is whether the Maemo Community Council was intended to become the Hildon Foundation Council from the start, whether they were appointed as such by the initial Hildon Foundation Board, or whether there currently is no Hildon Foundation Council and one must be elected.</span></p><p><span class="lead-in">This is important, because the Maemo Community Council&mdash;if it&#39;s not also the Hildon Foundation Council&mdash;has no authority to call for a mid-term election of the Hildon Foundation Board. The current Maemo Community Council was attempting to call just such an election based on the all-appointed composition of the current Hildon Foundation Board and desire from members of the community to see an election to validate the board.</span></p><p><span class="lead-in">Posting from the Hildon Foundation account on the news page at hildonfoundation.org, <a href="http://maemo.org/profile/view/sd69/">RM Bauer</a> has given us the &quot;official&quot; board position on the breakdown of the situation with the Maemo Community Council and the Hildon Foundation Council:</span> "It is noted that the three current members of the Maemo Community Council have purported to appoint themselves as a three member Hildon Foundation Council and to conduct the elections of the Foundation without the Electorate and Nominations Requirements document specified in the Bylaws. This was not done through any cooperation with the Board or the community at large. It was an unofficial act, beyond the authority of the maemo community council indicated above and is of no effect." </p><p><span class="lead-out">Given that at least one member of the board does not seem to agree with this interpretation, your editor believes this post to be simply an opinion piece from Mr. Bauer and not necessarily the official stance of the board; however, a compromise was reached on this subject in the board meeting held last Friday. The summary of which we&#39;ve covered later in this issue.</span></p><div class="link"><a href="http://hildonfoundation.org/an-update-on-hildon-foundation-council-and-maemo-community-council/">Read more</a> (hildonfoundation.org)</div><div class="permalink"></div></div>

<h3>In this edition (<a href="http://www.mwkn.net/2013/16/download.html">Download</a>)...</h3><ol><li><span class="newscat"><a href="http://www.mwkn.net/2013/16/front.html">Front Page</a></span><ul><li>This week in Maemo Community politics</li><li>Rob Bauer's take on the Maemo Community Council/Hildon Foundation Council distinction</li></ul></li><li><span class="newscat"><a href="http://www.mwkn.net/2013/16/community.html">Community</a></span><ul><li>Summary of the Hildon Foundation Board meeting</li><li>Summary of the Maemo Community Council meeting</li><li>kerio (kerio) running for Maemo Community Council</li><li>karmaflux (khm/karmaflux) running for Hildon Foundation Board of Directors</li><li>S. Howard running for Hildon Foundation Council</li></ul></li></ol>
  <span class="net_nemein_favourites">2 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=1e2ab4a1312ec00ab4a11e2b7498d1db17567176717&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/1e2ab4a1312ec00ab4a11e2b7498d1db17567176717/" 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=1e2ab4a1312ec00ab4a11e2b7498d1db17567176717&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/1e2ab4a1312ec00ab4a11e2b7498d1db17567176717/" 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>Andrew Flegg &lt;andrew@bleb.org&gt;</author>
            <category>feed:3e97844fb140de8423afbcb8ff62ccf8</category>
            <pubDate>Mon, 22 Apr 2013 11:17:00 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-1e2ab4a1312ec00ab4a11e2b7498d1db17567176717</guid>
        </item>
        <item>
            <title>QUItIndicators: Design considerations</title>
            <link>http://kgronholm.blogspot.com/2013/04/quitindicators-design-considerations.html</link>
            <description><![CDATA[
(This is part II, for the introduction see <a href="http://kgronholm.blogspot.fi/2013/04/quitindicators-introduction.html">part I</a>)<br /><br />The main points of this indicators exercise are to promote Qt5 QML+GLSL approach for building dynamic UI components (part I) and to give performance tips (part III, coming!). But here in the middle, we talk also a bit about design considerations behind these indicators. After all, who cares if your component performs well if it doesn't also look good and fulfil its functionality. <br /><br />Here's set of design-related notes about QUItIndicators which we wanted to achieve:<br /><br /><ul><li>The design language should be relatively neutral. Indicators like these may be used in many places, in applications and games, so they should not be too characteristic. And circles are pretty universal, so circles it is. The amount of circles in BusyIndicator is 11, by design. Reason behind this is that ProgressIndicator has one missing from top to mark start/end position, meaning 10 circles. This is optimal for percentages math e.g. when user sees 4 circles highlighted she can count that progress is at 40%. For smaller indicators, less &amp; bigger circles might look better but decision was not to differentiate on these.</li></ul><br /><ul><li>Different use-cases call for different kind of indicators. When indicator is only visible briefly and progress can't be tracked, BusyIndicator is the one to use. Some events may take more time and then ProgressIndicator can be used to keep users better informed of how long they still need to wait. With longer taking tasks you could show percentages and make indicator even more dynamic to make it less boring for user to watch. Watching interesting animation makes 5 seconds to feel like 2... So from brief (left) to longer (right) waiting times, indicator to choose from our set would be:</li></ul><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-zmfwXJlRj48/UXE55z6yPeI/AAAAAAAAAOo/kbbpmeJgMiY/s1600/indicators2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="80" src="http://2.bp.blogspot.com/-zmfwXJlRj48/UXE55z6yPeI/AAAAAAAAAOo/kbbpmeJgMiY/s320/indicators2.png" width="320" /></a></div><br /><ul><li>Indicators should fit and be clearly visible on top of any background. Users may wish to place them on white, black or colorful areas and expects indicator to fit there. To achieve this, our indicators use neutral black&amp;white as their base colors and contain inverted version which works better on light backgrounds. It's also possible to define alternative highlight color when the default yellowish isn't suitable. Here are few examples of ProgressIndicators on top of different backgrounds:</li></ul><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-w06LWqnE_Ec/UXE6L21uiwI/AAAAAAAAAOw/RdMbMpUheAw/s1600/indicators.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="80" src="http://2.bp.blogspot.com/-w06LWqnE_Ec/UXE6L21uiwI/AAAAAAAAAOw/RdMbMpUheAw/s320/indicators.png" width="320" /></a></div><br /><ul><li>Show/hide animations are also important. Too often animated items like these appear and disappear suddenly, breaking the illusion of a fluid component. In our component showing/hiding animations are combination of opacity, scale and vertex position skewing. Strips below show what the animation looks like. This could be made smoother but for performance reasons we use only vertex shader with a minimal mesh size. Fastly animated it anyway looks better than these still images.</li></ul><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-x6mc3eBWov0/UXE6TTabv7I/AAAAAAAAAO4/Nk5C8LZg5Ls/s1600/indicators3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="80" src="http://4.bp.blogspot.com/-x6mc3eBWov0/UXE6TTabv7I/AAAAAAAAAO4/Nk5C8LZg5Ls/s320/indicators3.png" width="320" /></a></div><br /><ul><li>Sometimes indicators like these should attract user attention. When the application is blocked until loading is ready, it's good that user eyes focus on the indicator. Darkening (and blurring, <a href="http://qt-project.org/doc/qt-5.0/qtgraphicaleffects/qml-qtgraphicaleffects1-fastblur.html">Qt5 graphical effects</a> make that easy) the rest of the UI is a good way to achieve this. But sometimes just the opposite is desired, directing user focus to real content and keeping indicators relatively obscure. Example of this is our Picture Wall demo, users attention is on loaded images instead of the ones still loading. With our indicators this can be achieved by decreasing opacity. <i>(Developer note: When making your own ShaderEffect which rewrites the default fragmentShader, remember to multiply gl_FragColor with qt_Opacity to keep QML opacity property behaving correctly!)</i>. Here's how Picture Wall demo fades indicators into background:</li></ul><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-LerD4KzPLh0/UXE6aC56w3I/AAAAAAAAAPA/_HvO8JMijf4/s1600/indicators4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="80" src="http://4.bp.blogspot.com/-LerD4KzPLh0/UXE6aC56w3I/AAAAAAAAAPA/_HvO8JMijf4/s320/indicators4.png" width="320" /></a></div><br /><ul><li>Circular zooming animation doesn't progress linearly, but instead follows a custom bezier curve. This change in speed makes animation feel more lively and natural as it would be affected by slight gravity, gaining speed when moving down and slowing down while reaching the top. Designs are often filled with small details like this, final touches.</li></ul><br />These indicators are not highly original and will not win design awards. Graphics, effects and small details could be greatly refined. But we anyway tried to consider use-cases and apply them into the design. If you are eager to experiment yourself, grab the <a href="http://quitcoding.com/?page=work#indicators">sources</a>.<br /><br />Next part will explain how to reach optimal performance to support these design considerations. <br /><br /><br /><span class="net_nemein_favourites">0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=1e2a8f61b318ba4a8f611e2b2ef770686ceab5cab5c&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/1e2a8f61b318ba4a8f611e2b2ef770686ceab5cab5c/" 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=1e2a8f61b318ba4a8f611e2b2ef770686ceab5cab5c&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/1e2a8f61b318ba4a8f611e2b2ef770686ceab5cab5c/" 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>Kaj Grönholm &lt;kgronholm@gmail.com&gt;</author>
            <category>feed:ffedab845b17ad5f072a1f90af70d0f9</category>
            <pubDate>Fri, 19 Apr 2013 16:20:00 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-1e2a8f61b318ba4a8f611e2b2ef770686ceab5cab5c</guid>
        </item>
        <item>
            <title>Erudite now available for Symbian Belle</title>
            <link>http://blog.mikeasoft.com/2013/04/19/erudite-now-available-for-symbian-belle/</link>
            <description><![CDATA[
<p><a href='http://mikeasoft.com/~mike/firestarter-library.png'><img alt="Erudite displaying a book library" src="http://mikeasoft.com/~mike/firestarter-library-small.png" title="Erudite displaying a book library" class="alignright" width="169" height="300" style="float: right; margin-left: 1em; margin-bottom: 1em;" /></a></p>
<h3>Overview</h3>
<p>Erudite makes it possible to use Amazon’s Cloud Reader on various mobile platforms which aren&#8217;t officially supported by Amazon. You can either read books online, or download them for reading offline. Your progress in a book is then also kept synchronised between your phone and other Kindle devices.</p>
<h3>Symbian Belle support</h3>
<p> Until recently Erudite only supported MeeGo Harmattan and Mer based phones (such as the Nokia N9), but now it&#8217;s also available for Symbian Belle phones as well. I&#8217;ll try and put together a build for Symbian Anna phones in the near future.</p>
<p> There&#8217;s a fairly comprehensive review of Erudite for Symbian over on All About Symbian: <a href='http://www.allaboutsymbian.com/flow/item/17320_Erudite_brings_Amazon_Kindle_e.php'>Erudite review</a>.</p>
<h3>Upcoming features</h3>
<p> In the next release for both Symbian and MeeGo I&#8217;ll be focusing on orientation switching support, so users can optionally view their books in landscape mode, as well as investigating some apparent issues with very large books.</p>
<h3>Download</h3>
<ul>
<li><a href='http://store.ovi.com/content/358486'>Symbian Belle version</a> &mdash; Nokia 701, Nokia C6-01, Nokia C7-00, Nokia N8-00, Nokia X7-00, Nokia E6-00, Nokia 808 Pureview, Nokia 603, Nokia Oro, Nokia E7-00, and Nokia 700</li>
<li><a href='http://store.ovi.com/content/307241'>MeeGo Harmattan version</a> &mdash; Nokia N9, Nokia N950</li>
</ul>
<span class="net_nemein_favourites">1 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=1e2a8d743e0d43ea8d711e288febf833618f027f027&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/1e2a8d743e0d43ea8d711e288febf833618f027f027/" 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=1e2a8d743e0d43ea8d711e288febf833618f027f027&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/1e2a8d743e0d43ea8d711e288febf833618f027f027/" 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>Michael Sheldon &lt;mike@mikeasoft.com&gt;</author>
            <category>feed:5bc2385bc6ad322a949feafe5e504227</category>
            <pubDate>Fri, 19 Apr 2013 09:51:34 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-1e2a8d743e0d43ea8d711e288febf833618f027f027</guid>
        </item>
        <item>
            <title>QUItIndicators: Introduction</title>
            <link>http://kgronholm.blogspot.com/2013/04/quitindicators-introduction.html</link>
            <description><![CDATA[
Few months ago I wrote a normal mapping series with <a href="http://kgronholm.blogspot.fi/2012/10/qt5-and-normal-mapping.html">part I</a> and <a href="http://kgronholm.blogspot.fi/2012/10/qt5-and-normal-mapping-reloaded.html">part II</a>. That was a good experience, so series it is again! This time about implementing dynamic QML components, with an example case being busy&amp;progress indicators. We'll call these specific ones QUItIndicators.<br /><br />Let's start with obligatory video which demonstrates these components, BusyIndicator and ProgressIndicator, with few examples:<br /><br /><object height="260" width="420"><param name="movie" value="http://www.youtube.com/v/5SAAfSXkW8s?fs=1&amp;hl=en_US"> <param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/5SAAfSXkW8s?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="260" width="420"></embed></object><br /><br />Traditionally indicators like these would be implemented as an animated GIF or a sprite. Cons of that approach are zero customization and memory consumption: 2s animation of 256x256px 32-bit color indicator at 60fps would mean 2*60*256*256*4 = 31.5Mb memory consumption. That's quite a bit for just one indicator, so usually frames are animated slower than 60fps which makes animation less smooth.<br /><br />Alternative way to implement animated indicator would be using imperative drawing API (QPainter, Cairo, Skia etc.). Drawing freely to a canvas gives a lot of possibilities, but can easily lead to non-optimal performance. Many of these APIs have OpenGL backends which sounds good in theory, but the reality is that they can't take full gains out of modern GPUs. Like wise Tro^H^H^HDigians have said, combining QPainter with OpenGL backend doesn't make a perfect harmony.<br /><br />So as you probably guessed, our indicators use Qt5+QML+GLSL instead. The pros of this approach compared to sprites or imperative drawing are rendering performance, low memory consumption and customization possibilities. There is also at least one con: Indicator needs to be designed so that required animations can be achieved with vertex &amp; fragment shaders.<br /><br />Next blog post goes through design thoughts behind these indicators. In the meantime, you can get the sources <a href="http://quitcoding.com/?page=work#indicators">from here</a> and try yourself!<br /><br /><span class="net_nemein_favourites">0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=1e2a81e5f267b04a81e11e2b3abe32c13ab620d620d&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/1e2a81e5f267b04a81e11e2b3abe32c13ab620d620d/" 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=1e2a81e5f267b04a81e11e2b3abe32c13ab620d620d&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/1e2a81e5f267b04a81e11e2b3abe32c13ab620d620d/" 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>Kaj Grönholm &lt;kgronholm@gmail.com&gt;</author>
            <category>feed:ffedab845b17ad5f072a1f90af70d0f9</category>
            <pubDate>Thu, 18 Apr 2013 14:26:00 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-1e2a81e5f267b04a81e11e2b3abe32c13ab620d620d</guid>
        </item>
        <item>
            <title>C/C++ Hacker looking for next project</title>
            <link>http://monkeyiq.blogspot.com/2013/04/cc-hacker-looking-for-next-project.html</link>
            <description><![CDATA[
I recently added initial support for real time collaboration in fontforge. This was followed by the wonderful fortune of presenting the work at the Libre Graphics Meeting last week.&nbsp; Having collab in fontforge allows you to create and edit glyphs and have other fontforge instances in the collab session see your changes in (near) real time. There is also support for python scripting, so you can have one fontforge instance be a headless scripted one which continually creates new ttf files as you edit a font. Using collab with scripts like this allows for possibilities which didn't exist. For example, the ttf generation can take time, and doing it each time an edit is made in the fontforge process that is editing a glyph would be too slow. Even saving the font to SFD/UFO each edit so you can fork() and create the ttf would be too slow. The Collab support is needed to allow the user experience of editing glyphs not to bog down.<br /><br />I'm now working out what I'll be hacking on next. If you are looking for a C/C++ programmer with a Bachelors, Masters, and PhD on computer science to do some hacking feel free to contact me. I own the gmail and sf.net email addresses associated with this blog.<br /><br />I've hacked on Abiword, Calligra, some fringe EFL stuff, fontforge (as one already knows from the top of this post), and many other contributions here and there. My main for fun project is libferris, a metadata handling virtual filesystem with index and search capabilities.<br /><br /><span class="net_nemein_favourites">0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=1e2a7f38897815ca7f311e2a39f29e87d46d745d745&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/1e2a7f38897815ca7f311e2a39f29e87d46d745d745/" 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=1e2a7f38897815ca7f311e2a39f29e87d46d745d745&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/1e2a7f38897815ca7f311e2a39f29e87d46d745d745/" 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>Ben Martin &lt;monkeyiq@users.sourceforge.net&gt;</author>
            <category>feed:db85272b5cc4c48c874836930690af4e</category>
            <pubDate>Wed, 17 Apr 2013 23:42:00 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-1e2a7f38897815ca7f311e2a39f29e87d46d745d745</guid>
        </item>
    </channel>
</rss>
