<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.forwardbias.in/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" version="2.0">

<channel>
	<title>The ForwardBias Blog</title>
	
	<link>http://blog.forwardbias.in</link>
	<description>The Official Blog of ForwardBias Technologies</description>
	<lastBuildDate>Sun, 21 Feb 2010 08:28:28 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.forwardbias.in/fb/blog" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="fb/blog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>maemo-bangalore foss.in N900 contest</title>
		<link>http://blog.forwardbias.in/2010/02/maemo-bangalore-foss-n900-contest.html</link>
		<comments>http://blog.forwardbias.in/2010/02/maemo-bangalore-foss-n900-contest.html#comments</comments>
		<pubDate>Sun, 21 Feb 2010 08:17:06 +0000</pubDate>
		<dc:creator>girish</dc:creator>
				<category><![CDATA[KDE]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[girish]]></category>

		<guid isPermaLink="false">http://blog.forwardbias.in/?p=198</guid>
		<description><![CDATA[I managed to get my hands on the N900 after a long long wait. But the path to getting the device was long and tragic. Here&#8217;s the story.
Back at foss.in (Dec 1st week 2009), I heard of a contest held by the Nokia maemo-bangalore team.  The sexy 3d pic on the blog got me all [...]]]></description>
			<content:encoded><![CDATA[<p>I managed to get my hands on the N900 after a long long wait. But the path to getting the device was long and tragic. Here&#8217;s the story.</p>
<p>Back at <a href="http://www.foss.in">foss.in</a> (Dec 1st week 2009), I heard of a <a href="http://maemobangalore.wordpress.com/2009/11/24/maemo-foss-in-hack-ideas/">contest</a> held by the Nokia <a href="http://maemobangalore.wordpress.com/">maemo-bangalore</a> team.  The sexy 3d pic on the blog got me all excited. So, at foss.in, including all my customer commitments, I worked 3 days/nights at a stretch to write a youtube video browser, <a href="http://git.forwardbias.in/?p=cilantro.git">cilantro</a> (anagram of the irc nick of a good friend and lead of qt/webkit team to whom the app is dedicated to <img src='http://blog.forwardbias.in/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ).  In all honestly, I put myself under some pressure to participate in the contest &#8211; I was already overloaded with work but I thought that if I can get my hands on the device I can improve QtWebKit <a href="http://blog.forwardbias.in/2009/12/flash-in-qgraphicsview.html">Flash</a> performance  since I was working on that at that point. So, you can understand my excitement when awaiting for the results.</p>
<p>Except it was not announced (we were told informally that it will be announced at end of foss.in). We were told it was postponed to be on the 8 Dec 2009. Minor disappointment. But, fine. That didn&#8217;t happen either. After a few tweets and poking a nokia friend, the results were <a href="http://maemobangalore.wordpress.com/2009/12/11/maemo-foss-in-hack-results/">announced</a> on 11 Dec 2009. No mail to winners, no notification on when we will get the devices. Just the blog.  I mean no &#8220;thanks for participating, we will announce winners on xx date&#8221; even. Oh well. I forgive, <strong>only because</strong> I won. But my joy wasn&#8217;t long lived.</p>
<p>To my shock, the winners had folks who had <strong>not</strong> written their app for the contest. Atleast following the links on the blog suggests that the apps were published way back. Surely, one expects code to be written around the time of the contest? I must be wrong, so to make a more judicious decision, I went around looking for the source. Except, with all my googling powers, I cannot find the source for any (except one which had a commit long before contest announcement). Still convinced that my assumptions were just wrong, I left a <a href="http://maemobangalore.wordpress.com/2009/12/11/maemo-foss-in-hack-results/#comments">comment</a> on the blog asking for the code. No response. I sent a mail asking for the code. No response. So, I poked the Nokia friend yet again. This time I got a response saying they *cannot* publish the code and they will send a mail to just let people upload code to maemo garage if they care. HUH!? So, here we have a contest for foss.in where the winners have been adjudged with no published code. Sad, really sad.</p>
<p>On dec 18, I was told it *might* take a month for the device to arrive (and only after I asked them). 1 month!? I mean I wrote this app to get my hands on it immediately. Maybe I am expecting too much. I wait. On Jan 8, I asked them what the status was. No response (see the trend?). So I poked Nokia friend again and I got a response on Jan 14, saying they will intimate me by phone. As, you can guess, nothing was heard from them ever again. On Feb 3, I mailed them again. No response as usual. This time I didn&#8217;t ask my Nokia friend. I had given up on the people running the contest and I was going to take this outrageous behavior public.</p>
<p>Amazingly on Feb 16 2009, I got contacted by the maemo team for the first time ever (i.e first time initiated by them). And I did end up getting the N900 but the whole thing was such a sorry experience that I will never enter a contest that involves the maemo-bangalore team. I am not even sure if I deserve the award and if the contest was a FOSS contest (we can never know until we see the source). I had given them the link to my source but they haven&#8217;t bothered updating the blog post.</p>
<p>@maemo-bangalore<strong> &#8211; </strong>you need to learn to communicate and in the least, atleast respond when asked questions. You should be ashamed of treating the community and contest winners this way. If you don&#8217;t have resources to do a good job, just don&#8217;t run contests. What you have done is a mockery of FOSS. I am not actually upset with the late delivery of the device but the way you ran the contest.</p>
<p>If I were Nokia, I would fire the incompetent person who ran the contest.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.forwardbias.in/2010/02/maemo-bangalore-foss-n900-contest.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flash in QGraphicsView</title>
		<link>http://blog.forwardbias.in/2009/12/flash-in-qgraphicsview.html</link>
		<comments>http://blog.forwardbias.in/2009/12/flash-in-qgraphicsview.html#comments</comments>
		<pubDate>Thu, 10 Dec 2009 15:10:15 +0000</pubDate>
		<dc:creator>girish</dc:creator>
				<category><![CDATA[KDE]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[girish]]></category>

		<guid isPermaLink="false">http://blog.forwardbias.in/?p=102</guid>
		<description><![CDATA[Over the past couple of months, I have been working losing sleep over getting Flash to work in QGraphicsView on all platforms.  The good news is that flash now works in QGV on all platforms. Yes, that means that not only can QGV display Flash but can also rotate and transform flash when using QGraphicsWebView. IMPORTANT: Flash embedded [...]]]></description>
			<content:encoded><![CDATA[<p>Over the past couple of months, I have been <span style="text-decoration: line-through;">working</span> losing sleep over getting Flash to work in QGraphicsView on all platforms.  The good news is that flash now works in QGV on all platforms. Yes, that means that not only can QGV display Flash but can also rotate and transform flash when using <a href="http://doc.trolltech.com/4.6/qgraphicswebview.html">QGraphicsWebView</a>. <em><strong>IMPORTANT</strong></em>: Flash embedded in a QWebView using QGraphicsProxyWidget is NOT supported.</p>
<div style="text-align: center;">
<dl id="attachment_137" style="display: block; margin-left: auto; margin-right: auto; text-align: center; background-color: #f3f3f3; padding-top: 4px; margin-top: 10px; margin-bottom: 10px; -webkit-border-top-right-radius: 3px 3px; -webkit-border-top-left-radius: 3px 3px; -webkit-border-bottom-left-radius: 3px 3px; -webkit-border-bottom-right-radius: 3px 3px; width: 513px; border: 1px solid #dddddd;">
<dt><img style="padding: 0px; margin: 0px; border: 0px none initial;" title="youtube_45" src="http://blog.forwardbias.in/wp-content/uploads/2009/12/youtube_451.png" alt="Youtube in QGVLauncher" width="503" height="425" /></dt>
<dd style="font-size: 11px; line-height: 17px; padding-top: 0px; padding-right: 4px; padding-bottom: 5px; padding-left: 4px; margin: 0px;">Youtube in QGVLauncher</dd>
</dl>
</div>
<p style="text-align: center;">
<p>What follows is a brief summary of my work and the list of patches that you will need to get Flash working with Qt 4.6.0. Note that when I say plugin below, I mean<a href="https://developer.mozilla.org/en/Gecko_Plugin_API_Reference/Plug-in_Basics"> NPAPI plugins</a> like Flash. They have nothing to do with <a href="http://doc.trolltech.com/4.6/qwebpage.html#createPlugin">QWidget based plugins</a>. QWidget based plugins should work in Qt 4.6.0 when using QGraphicsWebView. I have also simplified the concepts (in favor of being completely correct) in the post below so that it is readable.</p>
<p><strong>Windowed and Windowless plugins</strong></p>
<p>Flash gets embedded into web pages using an API called <a href="http://en.wikipedia.org/wiki/NPAPI">NPAPI</a> (Netscape Plugin API). NPAPI provides two mechanisms to embed plugins into a web page &#8211; Windowed mode and Windowless mode.</p>
<p><em>Windowed mode</em> &#8211; the idea is that the plugin gets a native widget handle and does it&#8217;s own mouse, keyboard processing. For example, on Windows, we give the plugin a HWND. The plugin will install a window proc and process events directly (i.e the events are never seen by the browser). On X11, the plugin embeds itself into the Window using XEmbed. When the browser scrolls, the browser moves the native window appropriately. Mac doesn&#8217;t support windowed mode.</p>
<p>Windowed mode should have been enough but it has a limitation that it interferes with the z-ordering of html elements.  Some sites like to put html _over_ their flash content (for example, menus). This can be achieved by making the menu html have a higher z-order than the plugin. Can you spot the conflict interest here between z-ordering of native widgets and z-ordering of HTML elements? The plugin native window is a child of the browser&#8217;s window and we have a situation where the browser wants to paint HTML <em>after</em> the child has painted itself! This is not possible since a parent window always draw before it&#8217;s child. There are other disadvantages too &#8211; it is also impossible to <a href="http://webkit.org/blog/130/css-transforms/">transform</a> plugins (native widgets are rectangular), making them <a href="http://communitymx.com/content/source/E5141/wmodetrans.htm">transparent</a> is tricky and printing plugins requires lots of hacks.</p>
<p><em>Windowless mode</em> &#8211; The idea here is that plugins just paint to a pixmap &#8211; platform&#8217;s graphics context to be more precise (HDC on Windows, Pixmap on X11, ContextRef on Mac). It is now the browser&#8217;s responsibility to pass (forward) mouse and keyboard events to the plugin. Since the browser now contains a screenshot/snapshot/pixmap of the plugin, the browser can transform plugins, draw it in the correct z-order, make is transparent even. The main disadvantage here is that it can tend to be a bit slow.</p>
<p>Evan has a <a href="http://neugierig.org/software/chromium/notes/2009/07/windowed-windowless-plugins.html">better explanation</a> of the modes. There&#8217;s also one by <a href="http://weblogs.mozillazine.org/roc/">Robert</a> from which I originally learnt about these modes but I cannot find the link anymore).</p>
<p><strong>Flash</strong></p>
<p>I keep saying Plugin but really we care only about Flash <img src='http://blog.forwardbias.in/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  At least, for the moment that is our priority. All version of Flash supports Windowed mode. Only Flash 10 supports <a href="http://blogs.adobe.com/penguin.swf/2008/07/turkish_localization_also_wmod_1.html">windowless mode</a> on linux.</p>
<p>Flash lets the html/plugin author control the mode of operation using the wmode parameter (i.e pass it as part of html &lt;object&gt; tag). By default, it operates in windowed mode. Setting wmode to &#8216;transparent&#8217;  makes the html below visible through the flash. If wmode is set it to &#8216;opaque&#8217;, the html will not be seen through and the flash will have some solid background color (think of it as Qt::WA_OpaquePaintEvent, it allows for optimizations). transparent and opaque mode are implemented using &#8216;windowless&#8217; mode. Here&#8217;s a <a href="http://www.communitymx.com/content/source/E5141/wmodetrans.htm">great site</a> to test out these modes in action.</p>
<p><em><strong>Important</strong></em>: When in windowed mode, Flash expects a native window handle/id. A browser cannot force windowless mode &#8211; the mode is decided by the plugin. A browser can, in theory, say that it supports only windowless mode but this makes Flash crash (at least) on Linux. Hence, when we have a site like youtube (which uses Flash in windowed mode) in QGV, we need to come up with a way of providing flash with a window handle. There are two ways to deal with this problem &#8211; we can either give Flash a fake native window, we then grab the contents of this fake native window and paint it wherever we want OR we can inject the wmode &#8216;opaque&#8217; parameter when loading flash in QGV. The former approach is platform specific and requires lots of work. The latter is a 10 line patch.</p>
<p><strong>Plugins in QGraphicsView</strong></p>
<p>Items inside QGraphicsView are not native widgets. They are just items on a canvas that can be transformed and visualized using multiple views. This means that windowed mode of plugins is not feasible (apart from the fact that we have no native widget handle for items on canvas). To make plugins work in QGV, we need to implement windowless mode.</p>
<p><strong>X11 (Linux)</strong></p>
<p>Windowed mode on Linux has already been implemented in Qt 4.5. What was missing is the windowless mode support. One nice feature is that Flash is able to fall back windowed mode when the browser says it cannot support windowless mode (vice versa crashes as I noted before). This is the reason that sites that use windowless mode work in QWebView with Qt 4.5.</p>
<p>To support Flash in QGV, I started out adding windowless mode support. In theory, implementing windowless mode is a matter of passing a X Pixmap to the plugin, but there were lots of problems. The entire history is on <a href="https://bugs.webkit.org/show_bug.cgi?id=20081">bugzilla bug 20081</a>.</p>
<ul>
<li>Flash uses a different X Display connection &#8211; the default one provided by gtk/gdk and not the one that Qt provides it. Ouch. This means that when flash paints something, we have to XSync to get changes reflected in the Qt connection and vice versa. The uglier part is that Qt somehow needs to get hold of gdk&#8217;s Display without linking to gdk. It&#8217;s all very hairy. (<a href="http://trac.webkit.org/changeset/49158">r49158</a>).</li>
<li>Flash uses a different X Visual (the default system visual) rather than the one provided by Qt. This means that even if we created a 32-bit pixmap, Flash won&#8217;t be able to draw into it because it uses a 24-bit visual. Since people really wanted transparency to work, the solution is to grab the contents of the backing store to fake transparency. Very hairy stuff. This solution works in QWebView but not with QGraphicsWebView (<a href="http://trac.webkit.org/changeset/49169">r49169</a>). We have <strong>turned off transparency in QGV</strong>until this Flash bug is fixed.</li>
<li>The NPAPI requires X Pixmap. QPixmap may or may not be backed by a X Pixmap depending on the<a href="http://doc.trolltech.com/4.6/qapplication.html#setGraphicsSystem">graphicssystem</a>.</li>
<li>Print preview implementation of Qt holds a reference to the X Pixmap (because of QPicture). This meant that when the user prints we have to &#8216;let go&#8217; of the X Pixmap because the print preview has to remain unaffected by on screen changes. At the same time, someone needs to destroy this X Pixmap when the print preview dialog close. This one was very tricky to solve. Actually, I didn&#8217;t solve it, <a href="http://labs.trolltech.com/blogs/author/sroedal/">Samuel</a> did <img src='http://blog.forwardbias.in/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  (<a href="http://trac.webkit.org/changeset/50123">r50123</a>)</li>
</ul>
<p>All windowless mode changes for Linux are part of Qt/WebKit 4.6. QGV on linux can display Flash <strong>only</strong> in windowless mode. If Flash is in windowed mode (like in youtube), it does <strong>not</strong> work.  As mentioned there are two methods to fix windowed mode in QGV . Method 1 &#8211; we create a fake window and grab it&#8217;s contents. This can be achieved using X Composite and X Damage (as done in <a href=" https://bugzilla.mozilla.org/show_bug.cgi?id=442109">Fennec</a>). I have a patch at <a href="https://bugs.webkit.org/show_bug.cgi?id=31232">31232</a> but it requires more work. Method 2 &#8211; we can inject wmode opaque. This has been committed as part of <a href="https://bugs.webkit.org/show_bug.cgi?id=32059">32059</a>. If you need youtube to work in QGV, you need to apply that the patch <a href="http://trac.webkit.org/changeset/51759">r51759</a> on top of Qt 4.6.0.</p>
<p><strong>Mac OS X</strong></p>
<p>On the Mac, plugins operate in Windowless mode _always_.  There is no such thing as windowed mode on the Mac. NPAPI  on Mac supports various <em>event</em> models and <em>painting</em> models. Event model dictates how we pass the mouse/keyboard events to Flash (i.e which data structure is used to report events &#8211; NSEvent or the classic EventRecord).  Qt/WebKit only supports only the carbon event model and the CoreGraphics drawing model (there&#8217;s a open gl drawing model, core animation and a QuickDraw drawing model). ATM, only Carbon based apps can display flash. <strong>Qt/Cocoa apps (32 or 64 bit) cannot display Flash in QWebView or QGV</strong>. (Confusingly, this has nothing do with Qt/WebKit not supporting cocoa event model. It is possible for Qt/Cocoa apps to display using the carbon event model. This is tracked using <a href="https://bugs.webkit.org/show_bug.cgi?id=32376">32376</a>)</p>
<p>Now to the carbon event model &#8211; how it works is that the browser provides the plugin it&#8217;s window handle (a WindowRef), a ContextRef and the position (a rectangle) inside the window and Flash draws itself there.</p>
<p>Simple, no? You wish <img src='http://blog.forwardbias.in/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Unlike in QWebView, one cannot provide a rectangle as the position of Flash since the Flash could be transformed. For those new to Mac, ContextRef is like a QPainter (it can be over any paint device &#8211; a widget, pixmap, image). What we do is to get the ContextRef of a QPixmap and pass the position as (0, 0, width, height). Unfortunately, Flash requires the WindowRef parameter to be valid because it seems to be using it to detect if the window is &#8216;active&#8217; for processing mouse move events. To workaround, we create a fake hidden window. In addition, we also fake the fact that this fake hidden window is the active window (else Flash won&#8217;t process mouse move events)! If you thought this was insane, you should check out what the <a href="http://src.chromium.org/viewvc/chrome/trunk/src/webkit/glue/plugins/webplugin_delegate_impl_mac.mm?view=markup&amp;pathrev=25433">chrome devs do</a> (they intercept carbon calls of Flash by injecting a library using DYLD_INSERT_LIBRARY at runtime). See <a href="https://bugs.webkit.org/show_bug.cgi?id=31183">31183</a> , <a href="https://bugs.webkit.org/show_bug.cgi?id=31794">31794</a>, <a href="https://bugs.webkit.org/show_bug.cgi?id=31979">319</a><a href="https://bugs.webkit.org/show_bug.cgi?id=31979">79 </a>for more history.</p>
<p>None of the patches are in Qt 4.6.0. You need to apply  <a href="http://trac.webkit.org/changeset/51234">r51234</a> for painting; <a href="http://trac.webkit.org/changeset/51105">r51105</a>, <a href="http://trac.webkit.org/changeset/51412">r51412</a> for mouse handling and<a href="http://trac.webkit.org/changeset/51485">r51485</a> for context menu position. Currently, <strong>printing does not work on the Mac</strong>. This is tracked at <a href="https://bugs.webkit.org/show_bug.cgi?id=31975">31975</a>. Flash transparency works fine in QGV.</p>
<p><strong>Windows</strong></p>
<p>Windows has always supported Windowed and Windowless mode (Thanks to Apple). Printing already works thanks to some <a href="http://www.fengyuan.com/article/wmprint.html">awesome hacks</a>. Flash transparency works in QGV. However, the problem (as mentioned above) is that Flash expects a HWND when in windowed mode. So, youtube inside QGV requires a HWND. Fix is to inject wmode opaque. You need to apply <a href="http://trac.webkit.org/changeset/51979">r51979</a> on Qt 4.6.0</p>
<p><strong>Symbian</strong></p>
<p>The hardwork here was done by Yael. See <a href="https://bugs.webkit.org/show_bug.cgi?id=29302">29302</a> for more details.</p>
<p><strong>Gitorious</strong></p>
<p>I have done the necessary cherry-picking and published a branch (based of 4.6.0) at<a href="http://qt.gitorious.org/~girish/qt/girishs-qt/commits/4.6.0-gv-flash">http://qt.gitorious.org/~girish/qt/girishs-qt/commits/4.6.0-gv-flash</a>. With that branch, Qt should support Flash in QGV on all platforms in all modes.</p>
<p><strong>More information</strong></p>
<p>If you need more information on internal working of plugins, Yael, Torarne and I have written<a href="http://trac.webkit.org/wiki/QtWebKitPlugins">http://trac.webkit.org/wiki/QtWebKitPlugins</a>. Drop by on irc channel #qtwebkit on freenode for any clarification. Performance needs some love, we are working on it.</p>
<p>My work would not have been possible without the tireless reviews of <a href="http://labs.trolltech.com/blogs/author/simon/">Simon</a>, <a href="http://zecke.blogspot.com/">Holger</a>, <a href="http://codeposts.blogspot.com/">Kenneth</a>. Thanks guys! Simon, in particular, who  kept pushing me to try out various possibilities/hacks. I cannot thank him enough! And it&#8217;s a matter of great pride that I am now a <a href="http://webkit.org/coding/commit-review-policy.html">webkit commiter</a>! <img src='http://blog.forwardbias.in/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>The guys at <a href="http://lindenlab.com/">Linden Lab</a> have made <a href="http://ubrowser.com/">ubrowser</a> support Qt/WebKit (<a href="http://bitbucket.org/lindenlab/llqtwebkit/">llqtwebkit</a>). With the above changes, flash works in ubrowser.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto; border: 0px initial initial;" title="Qt/WebKit in ubrowser" src="http://blog.forwardbias.in/wp-content/uploads/2009/12/Picture-1.png" alt="Qt/WebKit in ubrowser" width="485" height="461" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.forwardbias.in/2009/12/flash-in-qgraphicsview.html/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Qt DevDays 2009 SFO</title>
		<link>http://blog.forwardbias.in/2009/11/qt-devdays-2009-sfo.html</link>
		<comments>http://blog.forwardbias.in/2009/11/qt-devdays-2009-sfo.html#comments</comments>
		<pubDate>Sat, 21 Nov 2009 06:48:43 +0000</pubDate>
		<dc:creator>girish</dc:creator>
				<category><![CDATA[KDE]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[girish]]></category>
		<category><![CDATA[hyves]]></category>

		<guid isPermaLink="false">http://blog.forwardbias.in/?p=92</guid>
		<description><![CDATA[(A very late update on DevDays 2009 SFO. I am one lazy blogger)
In an unexpected twist of events, I ended up attending Qt Developer Days at SFO. I had just one week to get my visa, flight and hotel bookings in place, so I wasn&#8217;t too hopeful. Amazingly, I got my visa interview appointment in [...]]]></description>
			<content:encoded><![CDATA[<p>(A very late update on DevDays 2009 SFO. I am one lazy blogger)</p>
<p>In an unexpected twist of events, I ended up attending <a href="http://qt.nokia.com/about/events/qt-developer-days-2009-u.s">Qt Developer Days </a>at SFO. I had just one week to get my visa, flight and hotel bookings in place, so I wasn&#8217;t too hopeful. Amazingly, I got my visa interview appointment in 2 days  and received the passport by courier in another 2 days! Also, the chennai embassy didn&#8217;t have any long queues that every indian so dreads. Either the U.S.A visa process has made giant leaps or it&#8217;s the downturn .</p>
<p>1. Sebastian Nyström talked about Qt being everywhere and that it was being used by Google, Skype et al. One of the slides showed a screenshot mashup of &#8216;cool&#8217; Qt applications. I was pleasantly surprised to see Hyves Photo Uploader in there <img src='http://blog.forwardbias.in/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Slides <a href="http://www.slideshare.net/qtbynokia/dd09-keynote-sebastian-n">here</a> (slide 11, we have the highest z-order even)</p>
<p>2. Tapani Mikola mentioned the &#8216;death of widgets&#8217; in one his slides when presenting QML. QML is awesome and the talk was excellent but I am a bit saddened by the &#8216;death of widgets&#8217; phrase &#8211; as much as I like all the new developments, qgv is no where near providing all the ui elements required to develop applications on the desktop. Ask an app developer, he will give you many examples of widgets that Qt lacks. When was the last new widget that was added to Qt, that made you go &#8216;nice!&#8217; or &#8216;finally!&#8217;? Maybe I am reading too much into the phrase <img src='http://blog.forwardbias.in/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>3. Meeting up with old friends made me really miss Norway and the oslo development team <img src='http://blog.forwardbias.in/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>4. Major shortage of Qt developers &#8211; I lost count of the number of people looking for Qt developers and consultants. The interest in Qt has exploded after Nokia has taken over. I have been in 2 dev days as Trolltech employee before and it was nothing like this. It was crazy, a few people had signed up for the conference only to hire more developers/consultants. Funnily, I even ended up getting two job offers with no interview! If you are a Qt developer and out of job, you are not looking at the right places. On the topic, we are still <a href="http://www.forwardbias.in/careers">hiring</a>.</p>
<p>5. <a href="http://qt.nokia.com/developer/learning/certification">Qt Certification</a> at SFO didn&#8217;t see as much participation as munich, but Vladmir thought it was up to a great start. Roop and I are Qt Certified even <img src='http://blog.forwardbias.in/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>If you missed Dev Days, be sure to plan on being there the next time (the munich event was even bigger and had 700 delegates). If you want to keep up with the trends in Qt development, there is nothing like meeting the people who are making the change. You just cannot afford to miss these events.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.forwardbias.in/2009/11/qt-devdays-2009-sfo.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>~/research cleanup (part 2)</title>
		<link>http://blog.forwardbias.in/2009/11/research-cleanup-part-2.html</link>
		<comments>http://blog.forwardbias.in/2009/11/research-cleanup-part-2.html#comments</comments>
		<pubDate>Sun, 08 Nov 2009 19:15:58 +0000</pubDate>
		<dc:creator>girish</dc:creator>
				<category><![CDATA[Qt]]></category>
		<category><![CDATA[girish]]></category>
		<category><![CDATA[quickhack]]></category>

		<guid isPermaLink="false">http://blog.forwardbias.in/?p=91</guid>
		<description><![CDATA[Final part of my ~/research cleanup
1. slidelistviewselection &#8211; A widget in which item selection moves with animation from one item to another. I made this initially for an embedded device on which itemviews was too heavy.
2. skinnable mediaplayer &#8211; An example that shows how to create a skinnable Qt app (see my old blog post).
3. [...]]]></description>
			<content:encoded><![CDATA[<p>Final part of my ~/research cleanup</p>
<p>1. <a href="http://git.forwardbias.in/?p=hacks/slidelistviewselection.git;a=summary">slidelistviewselection</a> &#8211; A widget in which item selection moves with animation from one item to another. I made this initially for an embedded device on which itemviews was too heavy.</p>
<p>2. <a href="http://git.forwardbias.in/?p=hacks/mediaplayer.git;a=summary">skinnable mediaplayer</a> &#8211; An example that shows how to create a skinnable Qt app (see my <a href="http://labs.trolltech.com/blogs/2007/11/27/theming-qt-for-fun-and-profit/">old blog post</a>).</p>
<p>3. <a href="http://git.forwardbias.in/?p=hacks/bubblelist.git;a=summary">bubblelist</a> &#8211; An example of how one can create a scrollable item in graphicsview (like QScrollArea which scrolls  i.e positions a big widget)</p>
<p>4. <a href="http://labs.trolltech.com/blogs/2007/06/06/lineedit-with-a-clear-button/">lineeditwithclearbutton</a> &#8211; Line edit with clear button (see my <a href="http://labs.trolltech.com/blogs/2007/06/06/lineedit-with-a-clear-button/">old blog post</a>)</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 13px; width: 1px; height: 1px;">http://labs.trolltech.com/blogs/2007/06/06/lineedit-with-a-clear-button/</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.forwardbias.in/2009/11/research-cleanup-part-2.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>~/research cleanup</title>
		<link>http://blog.forwardbias.in/2009/10/research-cleanup.html</link>
		<comments>http://blog.forwardbias.in/2009/10/research-cleanup.html#comments</comments>
		<pubDate>Tue, 06 Oct 2009 04:20:16 +0000</pubDate>
		<dc:creator>girish</dc:creator>
				<category><![CDATA[KDE]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[girish]]></category>
		<category><![CDATA[quickhack]]></category>

		<guid isPermaLink="false">http://blog.forwardbias.in/?p=82</guid>
		<description><![CDATA[A habit that I picked up from my job at Trolltech was to put all my experimental code in a directory called research. Each project gets its own sub-directory there. We used to also have a similarly named folder in p4 depot and it was totally unmanageable. I wonder what happened to all that code [...]]]></description>
			<content:encoded><![CDATA[<p>A habit that I picked up from my job at Trolltech was to put all my experimental code in a directory called research. Each project gets its own sub-directory there. We used to also have a similarly named folder in p4 depot and it was totally unmanageable. I wonder what happened to all that code after they moved to git &#8211; there were hundreds of very interesting code samples there.</p>
<p><span style="background-color: #ffffff;">Back to me, over the years (yeah, like past 4-5 years), I have abused my research directory for examples, bug reports, writeups, screenshots/videos, blog posts and I thought it&#8217;s about time I clean it up <img src='http://blog.forwardbias.in/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . I have been cleaning up 10-15 subdirectories a day for the past week (I have ~100 more to go) and I have to admit I grossly overestimated the value of the stuff in there <img src='http://blog.forwardbias.in/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . But here&#8217;s what I found worth sharing so far (all of them are Qt examples, of course):</span></p>
<ul>
<li><a href="http://git.forwardbias.in/?p=hacks/customfont.git;a=summary">customfont</a> &#8211; How to load and use custom fonts.</li>
<li><a href="http://git.forwardbias.in/?p=hacks/mplayerembed.git;a=summary">mplayerembed</a> &#8211; How to embed mplayer into your app and control movie play (X11 only)</li>
<li><a href="http://git.forwardbias.in/?p=hacks/customnetworkreply.git;a=summary">customnetworkreply</a> &#8211; This lets you create custom url&#8217;s inside qt/webkit. For example, you can embed a myapp://give/me/some/stuff or a http://myapp/foo.png. Code inspired from assistant.</li>
<li><a href="http://git.forwardbias.in/?p=hacks/textlayoutprimer.git;a=summary">textlayoutprimer</a> &#8211; I wrote this one when I was trying to understand how laying out text works inside QTextEdit (using QTextLayout). More didactic than an usable example.</li>
<li><a href="http://git.forwardbias.in/?p=hacks/translucentbackground.git;a=summary">translucentbackground</a> &#8211; Translucent background example (Uses ARGB visuals, requires composition manager)</li>
<li><a href="http://git.forwardbias.in/?p=hacks/clipboardwatcher.git;a=summary">clipboardwatcher</a> &#8211; Displays content of clipboard/selection as they change. Very useful to test dnd. I think I stole initial parts of the code from a similar Qt example.</li>
</ul>
<p>I am still figuring what is a good way to maintain all this sample/throw away code. I also have ~/tmp where I have code that I can nuke without any thought. Any suggestions? What do you do? A problem I have had is I <em>never </em>manage to find the right code samples when I need them. I have already found many dups when cleaning up!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.forwardbias.in/2009/10/research-cleanup.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Displaying html with animated gifs</title>
		<link>http://blog.forwardbias.in/2009/09/displaying-html-with-animated-gifs.html</link>
		<comments>http://blog.forwardbias.in/2009/09/displaying-html-with-animated-gifs.html#comments</comments>
		<pubDate>Tue, 22 Sep 2009 09:07:52 +0000</pubDate>
		<dc:creator>girish</dc:creator>
				<category><![CDATA[KDE]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[girish]]></category>
		<category><![CDATA[quickhack]]></category>

		<guid isPermaLink="false">http://blog.forwardbias.in/?p=70</guid>
		<description><![CDATA[When consulting for Hyves, we wanted a light-weight widget that displays html and animated gifs (for smileys) for the chat client and for tooltips. The option to use Qt/WebKit was out since we intended to create numerous instances of this widget (it consumed lots of memory) and the rendering was not as fast we would like. [...]]]></description>
			<content:encoded><![CDATA[<p>When consulting for <a href="http://hyves.nl">Hyves</a>, we wanted a light-weight widget that displays html and animated gifs (for smileys) for the chat client and for tooltips. The option to use Qt/WebKit was out since we intended to create numerous instances of this widget (it consumed lots of memory) and the rendering was not as fast we would like. QLabel does not support animated gifs, so that was not an option either.</p>
<p>Instead of writing a basic html parser, layouter and renderer, I thought I can somehow trick QTextDocument into displaying animated gifs. You can see the basic idea in this <a href="http://qt.nokia.com/developer/faqs/faq.2008-03-05.5300306332">kb</a> but to get it working with animations wasn&#8217;t easy. One good thing about adding the feature to QTextDocument is that you can set it on QTextBrowser and QTextEdit.</p>
<p>Without further ado, get the code <a href="http://git.forwardbias.in/?p=hacks/giflabel.git;a=summary">here</a>. <em>Label</em> is a richtext label that does not support links or selection. <em>TextBrowser</em> is a browser that supports selection and links. <em>TextEdit</em> is an editor with support for undo/redo.</p>
<p>P.S. Thanks to Hyves for making it possible to actually publish this code; they released <a href="http://www.hyves.nl/hyvesdesktop/downloads/?platform=src">most of their code</a> as GPL.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.forwardbias.in/2009/09/displaying-html-with-animated-gifs.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Non-selectable QWebView</title>
		<link>http://blog.forwardbias.in/2009/09/non-selectable-qwebview.html</link>
		<comments>http://blog.forwardbias.in/2009/09/non-selectable-qwebview.html#comments</comments>
		<pubDate>Thu, 17 Sep 2009 19:53:57 +0000</pubDate>
		<dc:creator>girish</dc:creator>
				<category><![CDATA[KDE]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[girish]]></category>
		<category><![CDATA[quickhack]]></category>

		<guid isPermaLink="false">http://blog.forwardbias.in/?p=67</guid>
		<description><![CDATA[There are situations where you don&#8217;t want text to be selected and images to be dragged in your QWebView (See my previous post). Qt does not provide support out of the box, but this is fairly straightforward to do. I wrote a quick hack to demonstrate, get it here.
]]></description>
			<content:encoded><![CDATA[<p>There are situations where you don&#8217;t want text to be selected and images to be dragged in your QWebView (See my <a href="http://blog.forwardbias.in/2009/09/side-effects-of-using-qtwebkit-for-desktop-apps.html">previous post</a>). Qt does not provide support out of the box, but this is fairly straightforward to do. I wrote a quick hack to demonstrate, get it <a href="http://git.forwardbias.in/?p=hacks/nonselectablewebview.git;a=summary">here</a><span style="line-height: normal; font-size: small;">.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.forwardbias.in/2009/09/non-selectable-qwebview.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>KDocker 4.0 released</title>
		<link>http://blog.forwardbias.in/2009/09/kdocker-4-0-released.html</link>
		<comments>http://blog.forwardbias.in/2009/09/kdocker-4-0-released.html#comments</comments>
		<pubDate>Wed, 16 Sep 2009 13:42:14 +0000</pubDate>
		<dc:creator>girish</dc:creator>
				<category><![CDATA[KDE]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[girish]]></category>

		<guid isPermaLink="false">http://blog.forwardbias.in/?p=63</guid>
		<description><![CDATA[Almost a year back, I was looking for a maintainer for kdocker. I had practically given up, when out of the blue John contacted me to be the new maintainer. What more, he had already ported it Qt4! That made handing over maintainership to him a no-brainer  
Also, KDocker is now moved from sourceforge to launchpad. [...]]]></description>
			<content:encoded><![CDATA[<p>Almost a year back, I was <a href="http://blog.forwardbias.in/2008/08/looking-for-maintainer-for-kdocker.html">looking</a> for a maintainer for kdocker. I had practically given up, when out of the blue <a href="http://john.nachtimwald.com/">John</a> contacted me to be the new maintainer. What more, he had already ported it Qt4! That made handing over maintainership to him a no-brainer <img src='http://blog.forwardbias.in/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Also, KDocker is now moved from <a href="http://kdocker.sourceforge.net">sourceforge</a> to <a href="https://launchpad.net/kdocker">launchpad</a>. Once I regain access to sourceforge, I will update the sourceforge page.</p>
<p><span style="background-color: #ffffff;">Read the release announcement <a href="http://john.nachtimwald.com/2009/09/16/kdocker-4-0/">here</a>. If you are interested in helping  out with translating the app, please contact <a href="mailto:john@nachtimwald.com">John</a>.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.forwardbias.in/2009/09/kdocker-4-0-released.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Side effects of using QtWebKit for desktop apps</title>
		<link>http://blog.forwardbias.in/2009/09/side-effects-of-using-qtwebkit-for-desktop-apps.html</link>
		<comments>http://blog.forwardbias.in/2009/09/side-effects-of-using-qtwebkit-for-desktop-apps.html#comments</comments>
		<pubDate>Sat, 12 Sep 2009 08:03:50 +0000</pubDate>
		<dc:creator>girish</dc:creator>
				<category><![CDATA[KDE]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[girish]]></category>

		<guid isPermaLink="false">http://blog.forwardbias.in/?p=38</guid>
		<description><![CDATA[Integrating the web into desktop apps is now incredibly easy thanks to Qt WebKit.  Qt WebKit also allows us to embed any Qt widget inside the html. This feature makes it extremely tempting to develop full blown desktop applications using Qt WebKit &#8211; your interface is entirely designed using html/css (instead of .ui) and you [...]]]></description>
			<content:encoded><![CDATA[<p>Integrating the web into desktop apps is now incredibly easy thanks to <a href="http://doc.trolltech.com/4.5/qtwebkit.html">Qt WebKit</a>.  Qt WebKit also allows us to embed any Qt widget inside the html. This feature makes it extremely tempting to develop full blown desktop applications using Qt WebKit &#8211; your interface is entirely designed using html/css (instead of .ui) and you as a C++ developer decide what parts are best done in Qt/C++ and embed them into the html page.</p>
<p>The above scheme works very well (for the most part). However, there are a lot of features that make our applications feel <em>native, </em>that we take for granted in desktop apps when using Qt/C++ but not so when using Qt WebKit. So here is a list of short comings that you should know about.</p>
<p><span style="background-color: #ffffff; "><strong><span style="font-weight: normal;"><strong>1. Focus handling - <span style="background-color: #ffffff; font-weight: normal; ">Tab focus  doesn&#8217;t work at all when navigating from html into a c++ plugin and vice versa.</span></strong></span></strong></span></p>
<p><span style="background-color: #ffffff; "><strong><span style="font-weight: normal;"><strong>2. Keyboard accelerators </strong>- In html, you can specify accelerator using &#8216;accesskey&#8217;. They don&#8217;t seem to work in QtWebKit. They do work in google chrome, so must be something to do with the Qt port.</span></strong></span></p>
<p><strong>3. Text can be selected and images can be dragged</strong> &#8211; Your main ui is html, what did you expect <img src='http://blog.forwardbias.in/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ?</p>
<p><span style="background-color: #ffffff; "><strong>4. Plugins will get deleted if you hide them &#8211; </strong>If you hide your C++ plugin/widget using &#8216;display: none&#8217;, Qt/WebKit will delete it. In your traditional Qt program, all your data is part of the widget &#8211; now it&#8217;s all gone. To prevent this, you have to write all your widgets to use the model-view paradigm. An alternative is to use &#8216;visibility: hidden&#8217; which won&#8217;t delete the plugin but the plugin will continue to hog space in the layout. Side note: In Qt 4.4.x, plugins weren&#8217;t deleted (aka leak). Starting Qt 4.5.x, they were deleted &#8211; we found this problem when our app starting crashing gloriously when we moved to Qt 4.5.x.</span></p>
<p><span style="background-color: #ffffff; "><strong>5. Fluid layouts </strong>- When the windows resizes, UI elements inside are expected to reposition and resize nicely; the window must have a nice minimum size &#8211; that is all done by QLayout does. This is really hard to get right when using html. You will most likely end up writing js layouting code.</span></p>
<p><span style="background-color: #ffffff; "><strong>6. Moving data back and forth is slow &#8211; </strong>Passing Qt types from C++ to JS works very well using <a href="http://qjson.sourceforge.net/">QJson</a>. Converting complex types like a QPixmap to html img is really really slow, since you have to convert in into <a href="http://en.wikipedia.org/wiki/Data_URI_scheme">png first</a>. Also, using this method crashes Asus laptops/Windows, probably some graphics card issue, nevertheless your app has to deal with it.</span></p>
<p><span style="background-color: #ffffff; "><strong>8. RTL &#8211; </strong>Qt will layout your widgets automatically when your app is run in a RTL environment. With HTML, you will have to provide an alternate html file, do your own RTL detection, implement sizing fixes to elements for different languages and so on.</span></p>
<p><span style="background-color: #ffffff;"><strong>9. Translations</strong> &#8211; Qt provides you linguist, lrelease, lupdate. When using HTML, you will have to roll out your own translation framework (this is an awful lot of work).</span></p>
<p><strong>10. Misc &#8211; </strong>There are other minor problems depending on your Qt version <strong>- </strong>the default fonts of html and qt didn&#8217;t match. There was a time when a 12pt font of Qt and 12 pt font of webkit don&#8217;t match (this seems to be fixed now). Displaying plugins inside divs had some artifacts.</p>
<p>Note that the above is not a case against using Qt/WebKit for developing desktop apps since they can all be worked around. It&#8217;s more for you to know what you will be up against if you decide to go down this road.</p>
<p><em>Update 1: </em>Added note on rtl and translations</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.forwardbias.in/2009/09/side-effects-of-using-qtwebkit-for-desktop-apps.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Hyves Photo Uploader 1.2: Do More</title>
		<link>http://blog.forwardbias.in/2009/09/hyves-photo-uploader-1-2-do-more.html</link>
		<comments>http://blog.forwardbias.in/2009/09/hyves-photo-uploader-1-2-do-more.html#comments</comments>
		<pubDate>Fri, 11 Sep 2009 08:12:01 +0000</pubDate>
		<dc:creator>roop</dc:creator>
				<category><![CDATA[Qt]]></category>
		<category><![CDATA[hyves]]></category>
		<category><![CDATA[roop]]></category>
		<category><![CDATA[services]]></category>

		<guid isPermaLink="false">http://blog.forwardbias.in/?p=40</guid>
		<description><![CDATA[Late last year, I blogged about the beta release of Hyves Desktop. In about half-a-year, the application has grown much more than just helping folks upload images to Hyves. It now has some very interesting features to help you spice up your photos. Here is a short video demo showing off some of them:

You can [...]]]></description>
			<content:encoded><![CDATA[<p>Late last year, I <a href="http://blog.forwardbias.in/2008/12/hyves-photo-uploader.html">blogged</a> about the beta release of Hyves Desktop. In about half-a-year, the application has grown much more than just helping folks upload images to <a href="http://www.hyves.nl/">Hyves</a>. It now has some very interesting features to help you spice up your photos. Here is a short video demo showing off some of them:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/6SZzzVtbNVw&amp;hl=en&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/6SZzzVtbNVw&amp;hl=en&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>You can download the app for free from <a href="http://www.hyves.nl/hyvesdesktop/download">http://hyves.nl/hyvesdesktop/download</a> (but you need to have joined Hyves (for free again) before you can download it).</p>
<p>A lot of work has gone into this 1.2 release from the Hyves Desktop team: <a href="http://arendjr.hyves.nl/">Arend</a>, <a href="http://boudewijnrempt.hyves.nl/">Boud</a>, <a href="http://gramakri.hyves.nl/">Girish</a>, <a href="http://lohmar.hyves.nl/">Markus</a> and <a href="http://slaydragon.hyves.nl/">self</a>. We&#8217;ve also designed the application in a unique way &#8211; the main screen&#8217;s ui is in html/js, with each core functionality coded in C++ and integrated into the app as a Qt/Webkit plugin.</p>
<p>We can already see how popular the pimping and effects features are, by the sheer number of photos in Hyves <a href="http://www.hyves.nl/photos/tags/gepimpt/">tagged gepimpt</a>. Keep em coming, folks.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.forwardbias.in/2009/09/hyves-photo-uploader-1-2-do-more.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
