<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3676448</id><updated>2012-02-16T08:17:04.056Z</updated><category term='VBScript'/><category term='sysadmin'/><category term='transport'/><category term='bosnia'/><category term='movies'/><category term='books'/><category term='Frisco'/><category term='development'/><category term='GooglePlus'/><category term='jeBlogger'/><category term='privacy'/><category term='Kate'/><category term='cartoons'/><category term='Windows'/><category term='pythonaro'/><category term='webmail'/><category term='bambini'/><category term='Reddit'/><category term='N900'/><category term='springsteen'/><category term='video'/><category term='tarfile'/><category term='unicode'/><category term='greed'/><category term='feedreaders'/><category term='GMail'/><category term='sched'/><category term='dcom'/><category term='sport'/><category term='i18n'/><category term='hdd'/><category term='MSN'/><category term='java'/><category term='ukip'/><category term='kmymoney'/><category term='rants'/><category term='putty'/><category term='gSculpt'/><category term='philosophy'/><category term='django'/><category term='chroot'/><category term='ideas'/><category term='UK'/><category term='maemo'/><category term='j2me'/><category term='Firefox'/><category term='kio'/><category term='whyIhavedoubtsaboutmovingtotheus'/><category term='anobii'/><category term='GData'/><category term='Amnesty International'/><category term='delicious'/><category term='saas'/><category term='webcomics'/><category term='marketing'/><category term='Atomic'/><category term='blogging'/><category term='SanFrancisco'/><category term='pydoctor'/><category term='svn'/><category term='stickyouriphonewherethesundontshine'/><category term='education'/><category term='domains'/><category term='Microsoft'/><category term='NoScript'/><category term='NYC'/><category term='advertising'/><category term='wine'/><category term='ftplib'/><category term='genocide'/><category term='passaporto'/><category term='giornalismoincapace'/><category term='spy'/><category term='JohnBoltonIsATwat'/><category term='Resolver'/><category term='PowerShell'/><category term='lazyweb'/><category term='GoogleGroups'/><category term='pywin32'/><category term='phpeace'/><category term='Trolltech'/><category term='LibraryLookup'/><category term='IRC'/><category term='Obama'/><category term='libero.it'/><category term='BT'/><category term='Facebook'/><category term='IM'/><category term='hardware'/><category term='mod_mp3'/><category term='eric'/><category term='p2p'/><category term='Debian'/><category term='PyQt'/><category term='JetBrains'/><category term='startup'/><category term='PyCharm'/><category term='ssh'/><category term='music'/><category term='discrimination'/><category term='vnc'/><category term='WSH'/><category term='Google'/><category term='kde'/><category term='idiocy'/><category term='PyconUK'/><category term='literature'/><category term='kdelicious'/><category term='akonadi'/><category term='vote with your wallet'/><category term='ireland'/><category term='kamaelia'/><category term='ATI'/><category term='alanmoore'/><category term='Ubuntu'/><category term='wmi'/><category term='Thinlet'/><category term='charset'/><category term='Silverlight'/><category term='PythonNorthWest'/><category term='BobWalsh'/><category term='icann'/><category term='openid'/><category term='GoogleFinance'/><category term='whytheEUcanbegoodforBritain'/><category term='SQL'/><category term='pymedia'/><category term='comedy'/><category term='ICQ'/><category term='theinbredparty'/><category term='TouchMouse'/><category term='ovi'/><category term='plasma'/><category term='odbc'/><category term='fuck I hate vegans'/><category term='tories'/><category term='travel'/><category term='Jython'/><category term='utf8'/><category term='LinkedIn'/><category term='eclipse'/><category term='openSUSE'/><category term='IronPython'/><category term='mafiaa'/><category term='greasemonkey'/><category term='dataprotection'/><category term='phorm'/><category term='dbxml'/><category term='tld'/><category term='laptop'/><category term='webplumbing'/><category term='backup'/><category term='chm'/><category term='backupify'/><category term='racism'/><category term='mafia'/><category term='meego'/><category term='S60'/><category term='foreverythingelsetherespython'/><category term='shelfari'/><category term='Italy'/><category term='imsotemptedtotagthiswiththeemployersname'/><category term='setuptools'/><category term='mysql'/><category term='logic'/><category term='Nokia'/><category term='vmware'/><category term='sourceforge'/><category term='com'/><category term='OEL'/><category term='Simotrone'/><category term='Amarok'/><category term='pykde'/><category term='Blogger'/><category term='SuSE'/><category term='toggl'/><category term='GeekDiary'/><category term='labour'/><category term='oracle'/><category term='kde4'/><category term='channel4'/><category term='rv350'/><category term='radeon'/><category term='coopbank'/><category term='paulgraham'/><category term='pytthon'/><category term='Japan'/><category term='googlemaps'/><category term='Qt'/><category term='HackerNews'/><category term='Emacs'/><category term='corruption'/><category term='Stockport'/><category term='journalism'/><category term='OpenBSD'/><category term='Atom'/><category term='proxy'/><category term='goodreads'/><category term='jdbc'/><category term='javascript'/><category term='Lost'/><category term='weezer'/><category term='kded'/><category term='apple'/><category term='comics'/><category term='Slashdot'/><category term='LinuxMint'/><category term='webwise'/><category term='libdems'/><category term='grest'/><category term='youtube'/><category term='MJHibbett'/><category term='Gentoo'/><category term='Politics'/><category term='kdiary'/><category term='activism'/><category term='SQLAlchemy'/><category term='python'/><category term='amazon'/><category term='burocrazia'/><category term='internet'/><category term='librarything'/><category term='piratebay'/><category term='docbook'/><category term='football'/><category term='itsadaylikethat'/><category term='diemicrosoftdie'/><category term='SiliconValley'/><category term='linux'/><category term='apache'/><category term='personal finances'/><category term='creditcards'/><category term='children'/><category term='zipfile'/><category term='Ravenbrook'/><category term='personal'/><category term='Lost Theories'/><category term='kubuntu'/><category term='american football'/><category term='callblocker'/><category term='python3'/><category term='greens'/><category term='programming'/><category term='games'/><category term='BNP'/><category term='jedit'/><category term='WSGI'/><category term='pykeylicious'/><category term='Manchester'/><category term='OpenSource'/><category term='rethoric'/><category term='Pycon'/><category term='xorg'/><category term='adblock'/><category term='Sun'/><category term='web2.0'/><category term='food'/><category term='GeekDiay'/><category term='personal OMGim30'/><category term='KMail'/><category term='konqueror'/><category term='biscotto'/><category term='qemu'/><category term='LiveConnector'/><category term='why Alan Moore should be made Wizard of England'/><category term='PingFire'/><category term='opensolaris'/><category term='fail'/><category term='pykdeextensions'/><category term='mercurial'/><category term='2minutesofhate'/><title type='text'>Subclassed</title><subtitle type='html'>Pythonaro, oh-oh-oh.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default'/><link rel='alternate' type='text/html' href='http://blog.pythonaro.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default?start-index=26&amp;max-results=25'/><author><name>Giacomo Lacava</name><uri>https://profiles.google.com/112001311733983789595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WWGLdc8H1Uk/AAAAAAAAAAI/AAAAAAAAAYE/tA6iBrZYdng/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>280</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3676448.post-2796004136764803207</id><published>2012-01-10T00:22:00.000Z</published><updated>2012-01-10T00:23:27.483Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Slashdot'/><category scheme='http://www.blogger.com/atom/ns#' term='Reddit'/><category scheme='http://www.blogger.com/atom/ns#' term='GeekDiary'/><category scheme='http://www.blogger.com/atom/ns#' term='HackerNews'/><category scheme='http://www.blogger.com/atom/ns#' term='GooglePlus'/><category scheme='http://www.blogger.com/atom/ns#' term='webplumbing'/><title type='text'>Conversation silos are an anti-pattern</title><content type='html'>It looks (to me) like people just stopped commenting on blog posts. More and more, I might find some great, very technical post, just to discover it has zero comments; ironically, I'd probably got there through a link on Hacker News or Reddit or G+, where it'd have dozens (if not hundreds) of comments. The original author might or might not know about the conversation; if it's happening on one of the large portals, he'll probably find out because of the traffic surge and its side-effects (db crash, bandwidth bill, etc), but if it's happening in a smaller community he doesn't participate in, he might remain completely oblivious to its existence.&lt;br /&gt;
&lt;br /&gt;
This is a sad anti-pattern, exactly as bad as Disqus; it's just another way of building information silos. It's even more sad to see this model being pushed by the geek community, who should know better. Yes, trackback/pingback and &amp;nbsp;RSS have failed; but there &lt;i&gt;must&lt;/i&gt; be a better way to interlink the debate across this bunch of URLs we call "the web".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3676448-2796004136764803207?l=blog.pythonaro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/2796004136764803207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3676448&amp;postID=2796004136764803207' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/2796004136764803207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/2796004136764803207'/><link rel='alternate' type='text/html' href='http://blog.pythonaro.com/2012/01/conversation-silos-are-anti-pattern.html' title='Conversation silos are an anti-pattern'/><author><name>Giacomo Lacava</name><uri>https://profiles.google.com/112001311733983789595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WWGLdc8H1Uk/AAAAAAAAAAI/AAAAAAAAAYE/tA6iBrZYdng/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3676448.post-9006773283075579240</id><published>2012-01-04T03:27:00.000Z</published><updated>2012-01-05T10:10:12.446Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='GeekDiary'/><category scheme='http://www.blogger.com/atom/ns#' term='Jython'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='PyCharm'/><category scheme='http://www.blogger.com/atom/ns#' term='JetBrains'/><title type='text'>IntelliJ PyCharm 2.0 and Jython 2.2 don't really go together</title><content type='html'>UPDATE: Dmitry Jemerov from IntelliJ &lt;a href="http://blog.jetbrains.com/pycharm/2012/01/the-story-behind-jython-support-in-pycharm"&gt;responded&lt;/a&gt;, explaining what the situation is. TL;DR: 2.2 is simply too old, other features might come if there is demand. I've amended the post to reflect this. &lt;br /&gt;
&lt;br /&gt;
Let me preface this rant by saying that I've been happily using &lt;a href="http://www.jetbrains.com/"&gt;JetBrains&lt;/a&gt; &lt;a href="http://www.jetbrains.com/pycharm/"&gt;PyCharm&lt;/a&gt; for a few months, and it's certainly one of the best Python &lt;abbr title="Integrated Development Environment"&gt;IDE&lt;/abbr&gt;s out there. The price is ridiculously low and if you're serious about Python, buying PyCharm is one of the best investments you can make. It can be used for free for 30 days, so you really should give it a shot.&lt;br /&gt;
&lt;br /&gt;
This said, if you happen to work with &lt;a href="http://www.jython.org"&gt;Jython 2.2&lt;/a&gt;, you'll probably want to use something else. The claim that Jython is fully supported as a runtime, while literally true, &lt;strike&gt;is somehow stretched&lt;/strike&gt; is only valid for 2.5+.&lt;br /&gt;
&lt;br /&gt;
Let's say you work on Windows, and you have your Jython installed under C:\jython-2.2 (yes, it's damn old, but it's still the most widely-deployed release out there -- just ask IBM and Oracle).&lt;br /&gt;
&lt;br /&gt;
You create a new project in PyCharm, then go to Settings -&amp;gt; Python interpreter, remove the preconfigured CPython runtime, then click on &lt;i&gt;Add&lt;/i&gt; and point to your &lt;nobr&gt;C:\jython-2.2\jython.bat&lt;/nobr&gt;. Bang, "SDK is not valid". The list of library paths, which supposed to be automatically generated by the IDE picking up the environment configuration, is now empty.&lt;br /&gt;
&lt;br /&gt;
Still, PyCharm should be smart enough to parse arbitrary .py files in specific directories, right? So let's click on &lt;i&gt;Add...&lt;/i&gt; to point to &lt;nobr&gt;C:\jython-2.2\Lib&lt;/nobr&gt;, then OK.&lt;br /&gt;
Now let's create a .py file, "from pprint import pprint", the module is recognised; "Run" the script, output is correct, life is good: Jython is indeed supported as a Python &lt;i&gt;runtime&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
Ok, let's do some file I/O, "import os"... uh, &lt;i&gt;os&lt;/i&gt; is not recognised as a valid module. Same for &lt;i&gt;sys&lt;/i&gt;. Apparently, they are somewhat special in Jython and are implemented directly into the main jar, so PyCharm can't see them for autocompletion or any other smart feature. I don't know what else is "special" in Jython 2.2, but I'd rather not have to find out.&lt;br /&gt;
&lt;br /&gt;
Which brings us to the main shortcoming of PyCharm as a Jython IDE: it simply won't recognise or parse any Java jar. This is somewhat surprising, considering how the program is basically a spin-off of &lt;a href="http://www.jetbrains.com/idea/"&gt;IntelliJ IDEA&lt;/a&gt;, a Java IDE, and is completely built on Java. In fact, it shares the codebase with the Python Plugin for IDEA. One would think PyCharm would be ideally suited to the task of handling the "Python on Java" mesh that is Jython, but alas that's not the case. A quick search on the IntelliJ forum brings up recent posts stating that full Jython support for autocompletion is simply not on the cards; Jython is supported &lt;i&gt;as a runtime&lt;/i&gt; and nothing more. In fact, the Python plugin for IDEA &lt;strike&gt;probably&lt;/strike&gt; handles a Jython setup better than PyCharm, and that's not going to change any time soon. The main target for PyCharm are clearly Django/web developers, not integrators. UPDATE: see &lt;a href="http://blog.jetbrains.com/pycharm/2012/01/the-story-behind-jython-support-in-pycharm"&gt;this blog post&lt;/a&gt; for more details on the real situation.&lt;br /&gt;
&lt;br /&gt;
This state of things is a bit saddening. I don't know if this is a way for JetBrains to avoid cannibalizing its main cash-cow (IDEA), or simply a commercial oversight; the fact is that we have a product, ideally positioned to completely own a niche, which simply refuses to do so and actually delivers a second-rate experience. I hope JetBrains will re-evaluate their stance at some point, because it's a bit of a shame really.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3676448-9006773283075579240?l=blog.pythonaro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/9006773283075579240/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3676448&amp;postID=9006773283075579240' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/9006773283075579240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/9006773283075579240'/><link rel='alternate' type='text/html' href='http://blog.pythonaro.com/2012/01/intellij-pycharm-and-jython-dont-really.html' title='IntelliJ PyCharm 2.0 and Jython 2.2 don&apos;t really go together'/><author><name>Giacomo Lacava</name><uri>https://profiles.google.com/112001311733983789595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WWGLdc8H1Uk/AAAAAAAAAAI/AAAAAAAAAYE/tA6iBrZYdng/s512-c/photo.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3676448.post-5563315572593009563</id><published>2011-12-28T11:39:00.000Z</published><updated>2011-12-28T11:56:11.604Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='GeekDiary'/><category scheme='http://www.blogger.com/atom/ns#' term='TouchMouse'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>The Microsoft Touch Mouse Needs Better Software</title><content type='html'>I've recently picked up a &lt;a href="http://www.amazon.co.uk/gp/product/B0055857VY/ref=as_li_ss_tl?ie=UTF8&amp;amp;tag=subclassed-21&amp;amp;linkCode=as2&amp;amp;camp=1634&amp;amp;creative=19450&amp;amp;creativeASIN=B0055857VY"&gt;Microsoft Touch Mouse&lt;/a&gt; in post-Christmas sales with a huge discount, and I thought I'd describe my experience.&lt;br /&gt;
&lt;br /&gt;
The mouse itself is a nice (Apple-inspired) concept: a multitouch sensor replacing good ol' mouse buttons and wheel; after enduring several mice with hardware defects, having one (almost) without any mechanical moving parts feels reassuring.&lt;br /&gt;
&lt;br /&gt;
Actual usage is slightly less natural than you'd expect. Scrolling is probably the trickiest activity, since in practice it now depends on friction between your finger and the mouse surface, and you have no mechanical feedback.&lt;br /&gt;
Right-clicking is also a bit weird, if you're in the habit of resting your index finger while doing it: the sensor detects "rested index + clicking middle" as a different (void) activity, not as a right-click, so you'll need to actually lift the index as you click with the middle finger, or move all the way and right-click with your index finger.&lt;br /&gt;
&lt;br /&gt;
I believe the two items above are to be blamed for 99% of bad reviews; they break long-standing muscle memory for power users, who are heavy on their scrolling and right-clicking, and give a feel that the mouse will randomly decide what to do rather than respond to actual gestures.&lt;br /&gt;
&lt;br /&gt;
The scrolling speed can be&amp;nbsp;adjusted in the driver properties, reducing awkwardness, but there is no tweak for the right-click problem. And this is where Microsoft really failed: there is no way to easily customize the device.&lt;br /&gt;
&lt;br /&gt;
The driver defines a limited set of gestures that you can turn on or off, but you cannot override their assignment (i.e. what they actually do) nor create new ones. Some of these gestures are quite nice: three-finger swipes will bring up the Windows equivalent of Apple's Expose'; two-finger swipes work like Win+Arrows (probably the best feature in the Windows 7 Aero desktop), thumb swipes perform Back/Forward in a very natural way. Unfortunately there is a long list of other gestures that one would really need (open/close browser tabs, a middle-click replacement, window resizing, etc etc) and there is no way to add them; worse, there is no way to simply remap existing gestures to new commands, which should be dead easy; one can only remap left and right click, which nobody will ever do.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://3.gvt0.com/vi/E4I5n7cuJbc/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/E4I5n7cuJbc&amp;fs=1&amp;source=uds" /&gt;

&lt;param name="bgcolor" value="#FFFFFF" /&gt;

&lt;embed width="320" height="266"  src="http://www.youtube.com/v/E4I5n7cuJbc&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;
Apparently there is a C#/C++ SDK for the sensor (&lt;a href="http://research.microsoft.com/en-us/downloads/8ca8f8d1-c0b8-43a3-a519-0276195a6eec/default.aspx"&gt;32bit&lt;/a&gt; and &lt;a href="http://research.microsoft.com/en-us/downloads/8e2847f1-0e2d-48d3-b924-71400b358c17/default.aspx"&gt;64bit&lt;/a&gt;), and some students have already come up with nice improvements (like the one shown in this embedded video), but it's a shame that Microsoft, a software company first and foremost, &amp;nbsp;let down this lovely piece of hardware so badly by not shipping a proper gesture editor or mapper. I really do hope they'll release updated drivers with more features in the near future.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3676448-5563315572593009563?l=blog.pythonaro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/5563315572593009563/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3676448&amp;postID=5563315572593009563' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/5563315572593009563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/5563315572593009563'/><link rel='alternate' type='text/html' href='http://blog.pythonaro.com/2011/12/microsoft-touch-mouse-needs-better.html' title='The Microsoft Touch Mouse Needs Better Software'/><author><name>Giacomo Lacava</name><uri>https://profiles.google.com/112001311733983789595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WWGLdc8H1Uk/AAAAAAAAAAI/AAAAAAAAAYE/tA6iBrZYdng/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3676448.post-5263965807094888890</id><published>2011-12-21T13:05:00.000Z</published><updated>2011-12-21T13:07:17.341Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='VBScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Jython'/><category scheme='http://www.blogger.com/atom/ns#' term='sysadmin'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='PowerShell'/><category scheme='http://www.blogger.com/atom/ns#' term='IronPython'/><title type='text'>VBScript, PowerShell, Python, IronPython, Jython, or... ?</title><content type='html'>In my job, more and more I find that we end up building distributed architectures, i.e. multi-server installations where services are routinely spread around 20+ Windows boxes, plus the occasional Unix. These services have specific startup and shutdown sequences and dependencies, so they can't just be set to Automatic startup; we&amp;nbsp;usually provide batch files to manage them, but this is quickly becoming ugly and unreliable as the number of machines go up every year. It's also tricky to test actual service availability -- some are binary-based, some are HTTP based, some are Weblogic services, etc etc etc...&amp;nbsp;So I'm investigating alternatives.&lt;br /&gt;
&lt;br /&gt;
The first, natural choice for me was obviously Python: it does everything I need, it's flexible etc. However, distributing scripts to customers is a bitch; either you compile everything with cx_freeze (crashy) or py2exe (no python 3! no 64bit bundling! party like it was 2004! have fun tracking down which un-redistributable DLL or manifest you need on each release...), or you drop an entire environment and teach the customer what python is -- not ideal.&lt;br /&gt;
&lt;br /&gt;
The traditional "native" approach to these problems in the Windows world is VBScript. It's fairly flexible, doesn't need to be deployed on Windows Win2003+ (yes, we still deal with loads of Win2003 servers), documentation is extensive and there are plenty of resources out there.&lt;br /&gt;
The problem with VBScript, apart from the ugly syntax and pseudo-OOP quirkiness, is that it's clearly seen as legacy by Microsoft. Year after year, running scripts becomes more cumbersome, security checks increase and new technologies don't expose the necessary interfaces. Does it make sense, in 2011, to invest time and effort building solutions that are, de-facto, already obsolete?&lt;br /&gt;
&lt;br /&gt;
So we come to PowerShell, Microsoft's "future of scripting", which must be the less intuitive shell I've ever had the pleasure to deal with. I simply can't get my head around the way it deals with input and output; it doesn't seem to have reference assignment, so you have to retrieve an object on every line before you can use it; the syntax seems to combine the worst of Perl and Bash, and it quickly becomes unreadable. Also, deploying it on anything older than Vista has to be done manually and has to be justified to customers.&lt;br /&gt;
&lt;br /&gt;
I honestly can't see a good solution here. I keep looking at IronPython, but its infrastructure baffles me and I wouldn't know where to start redistributing programs (I don't use Visual Studio). It's clearly a second-class citizen in the .Net world, with all that it entails.&lt;br /&gt;
&lt;br /&gt;
Maybe Jython? After all, the products we install will drop JREs absolutely everywhere, so I could leverage that. I'd like to avoid going full-Java if I can, I hate the whole byzantine toolchain and I'm not really up to speed with post-1.4 changes; plus, there's always a degree of customization required in each environment, so I'd like to keep stuff as easily-editable as possible.&lt;br /&gt;
&lt;br /&gt;
Please feel free to drop any suggestions in comments, I could really do with them!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3676448-5263965807094888890?l=blog.pythonaro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/5263965807094888890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3676448&amp;postID=5263965807094888890' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/5263965807094888890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/5263965807094888890'/><link rel='alternate' type='text/html' href='http://blog.pythonaro.com/2011/12/vbscript-powershell-or-python.html' title='VBScript, PowerShell, Python, IronPython, Jython, or... ?'/><author><name>Giacomo Lacava</name><uri>https://profiles.google.com/112001311733983789595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WWGLdc8H1Uk/AAAAAAAAAAI/AAAAAAAAAYE/tA6iBrZYdng/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3676448.post-5964836291932108687</id><published>2011-12-06T21:34:00.001Z</published><updated>2011-12-06T22:03:58.945Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='python3'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><title type='text'>State of Python 3</title><content type='html'>&lt;p&gt;I want to start a little side-project, basically a few lines of HTTP automation and mail sending; nothing that some Taco Bell Programming couldn't handle, but I don't particularly like shell scripts and I figured it'd be cleaner in Python.&lt;/p&gt;&lt;p&gt;It's 2011 and &lt;i&gt;One Should Really Use Python 3&lt;/i&gt;, right ? The box I'll work on is a brand new Debian Testing where Python 2.x is not even installed, perfect! I'll just grab virtualenv... Waitamminute, "python" doesn't even run, but I'm sure I had installed the python3 package...? Oh, "python3" in Debian doesn't give you /usr/bin/python but rather /usr/bin/python&lt;b&gt;3&lt;/b&gt; !&lt;br /&gt;Thank you, Debian Project, for your &lt;i&gt;consistent inconsistency&lt;/i&gt; dealing with anything Python-related. Ok, so a quick run of update-alternatives and that's sorted.&lt;/p&gt;&lt;p&gt;Now I'll &lt;pre&gt;easy_install virtualenv&lt;/pre&gt;... sorry, easy_install&lt;b&gt;3&lt;/b&gt; virtualenv, of course... oops, syntax error, clearly a Python 2.x package there. Does easy_install discriminate between 2.x and 3.x package? Er, no. Joy.&lt;/p&gt;&lt;p&gt;Whatever, I'll just grab virtualenv.py and drop it in /usr/local/bin, right? cool, works a treat. Activated my virtualenv, let's try again to download a couple of libs... paramiko: syntax error, clearly a 2.x package. funkload: syntax error, again a 2.x package. I know, I'll use pip! ... no difference.&lt;/p&gt;&lt;p&gt;Basically I can choose whether to handle libraries like it was 2001, website after website, setup.py after setup.py; or I can develop like it was 2009, i.e. with python 2.x.&lt;/p&gt;&lt;p&gt;I think for now I'll choose life, and drop python 3.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3676448-5964836291932108687?l=blog.pythonaro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/5964836291932108687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3676448&amp;postID=5964836291932108687' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/5964836291932108687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/5964836291932108687'/><link rel='alternate' type='text/html' href='http://blog.pythonaro.com/2011/12/state-of-python-3.html' title='State of Python 3'/><author><name>Giacomo Lacava</name><uri>https://profiles.google.com/112001311733983789595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WWGLdc8H1Uk/AAAAAAAAAAI/AAAAAAAAAYE/tA6iBrZYdng/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3676448.post-9032936232968366794</id><published>2011-09-16T11:13:00.005+01:00</published><updated>2011-09-16T11:46:55.847+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pywin32'/><category scheme='http://www.blogger.com/atom/ns#' term='GeekDiary'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='wmi'/><title type='text'>Python WMI, services and UAC</title><content type='html'>&lt;p&gt;In this day and age, security-conscious Windows users "enjoy" the protection of User Access Control (UAC), a feature introduced with Vista and now a stalwart of the Microsoft world in Windows Server 2008 and Windows 7. This is why you get prompted to "allow this program to make changes to your computer" every time you install a program, or if you run a lot of "legacy" Win32 applications.&lt;/p&gt;
&lt;p&gt;Under UAC, even when you are a local administrator, the programs you launch will not, by default, enjoy all system privileges you would expect. Until you get prompted by UAC to allow for system access, processes will run under a &lt;i&gt;basic&lt;/i&gt; user profile.&lt;/p&gt;
&lt;p&gt;This is a problem when you try to interoperate with Windows from Python. As soon as you try to manipulate system objects, for example to start/stop services, you'll get a lot of "Access Denied" return codes.&lt;/p&gt;
&lt;p&gt;One solution, obviously, is to use the "Run as Administrator" option to launch python.exe, so that you get prompted by UAC and the resulting process will effectively run under elevated privileges. Note that it's not enough to launch Command Prompt (cmd.exe) with "run as an administrator" and to then call python.exe from there. You must explicitly hunt down python.exe in explorer and right-click on it, nothing less will do.&lt;/p&gt;
&lt;p&gt;This is fine and dandy for the basic REPL interpreter, but what if you need to do  it from a script? How do you elevate the process from inside a running python.exe?&lt;/p&gt;
&lt;p&gt;The answer is to use ShellExecute with the "runas" verb, like this:&lt;/p&gt;
&lt;pre&gt;import win32api
win32api.ShellExecute( 0, # parent window
    "runas", # need this to force UAC to act
    "C:\\python27\\python.exe", 
    "c:\\path\\to\\script.py", 
    "C:\\python27", # base dir
    1 ) # window visibility - 1: visible, 0: background
&lt;/pre&gt;

UAC will then prompt the user and elevate the process. For an example script that you can only run under elevated privileges, check this:
&lt;pre&gt;import wmi
c = wmi.WMI()
serviceToStart = 'aspnet_state' # example
for service in c.Win32_Service(Name=serviceToStart): 
    service.StartService()
&lt;/pre&gt;
&lt;p&gt;Note: I haven't tested this with py2exe yet, but at worst you should be able to right-click on the py2exe-generated binary and select to Run as Administrator anyway.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3676448-9032936232968366794?l=blog.pythonaro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/9032936232968366794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3676448&amp;postID=9032936232968366794' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/9032936232968366794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/9032936232968366794'/><link rel='alternate' type='text/html' href='http://blog.pythonaro.com/2011/09/python-wmi-services-and-uac.html' title='Python WMI, services and UAC'/><author><name>Giacomo Lacava</name><uri>https://profiles.google.com/112001311733983789595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WWGLdc8H1Uk/AAAAAAAAAAI/AAAAAAAAAYE/tA6iBrZYdng/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3676448.post-975134179442068528</id><published>2011-06-20T12:47:00.001+01:00</published><updated>2011-06-20T12:47:51.478+01:00</updated><title type='text'>Random Linux tips</title><content type='html'>Playing with Arch Linux, I was forced to learn a thing or two about terminals. For example, I've often seen that silly annoyance where VI would start typing A, B etc when using arrow keys in insert mode; apparently it's due to a mismatch between what VI thinks the $TERM type should send and what actually gets there.
In my case, I had to add the following option in my .vimrc: 
set term=builtin_xterm

Also: xterms colors and options go in a .Xresources file, which must be loaded at some point with "xrdb -merge .Xresources"

Meanwhile, emacs was taking ages to start up. Turns out it's doing some funky things with hostnames, you can use strace to see where it gets stuck polling for what emacs thinks is the machine name, and make sure that name can be resolved quickly (e.g. fix your /etc/hosts).

Who knew grep can use colours? grep --color=auto (note: the "auto" scheme assumes a dark background for the terminal).
And who knew there was such a thing as colordiff?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3676448-975134179442068528?l=blog.pythonaro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/975134179442068528/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3676448&amp;postID=975134179442068528' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/975134179442068528'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/975134179442068528'/><link rel='alternate' type='text/html' href='http://blog.pythonaro.com/2011/06/random-linux-tips.html' title='Random Linux tips'/><author><name>Giacomo Lacava</name><uri>https://profiles.google.com/112001311733983789595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WWGLdc8H1Uk/AAAAAAAAAAI/AAAAAAAAAYE/tA6iBrZYdng/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3676448.post-6343975405545895095</id><published>2011-03-23T21:54:00.005Z</published><updated>2011-03-23T22:28:35.737Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='LinkedIn'/><category scheme='http://www.blogger.com/atom/ns#' term='GeekDiary'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Social experiments with Facebook IDs</title><content type='html'>&lt;p&gt;Having just watched "The Social Network", I stumbled on a post on Twitter pointing to &lt;a href="http://graph.facebook.com"&gt;graph.facebook.com&lt;/a&gt;, the free API you can use to scrape the shit out of FB (well, almost).&lt;/p&gt;

&lt;p&gt;Turns out the API will work with IDs. Since FB started as a Harvard-only site, the first few hundred users were all Harvard alumni, obviously. So I started thinking about simple experiments like finding the most popular surnames, certain of having my class-based prejudices reinforced by loads of Winklevoss-style "aristonames". Turns out the most common names are actually Asian -- the elites of tomorrow, of course.&lt;/p&gt;

&lt;p&gt;That's the issue, isn't it? Harvard is (supposedly) a top institution, churning out the "elites of tomorrow"; they won't all become Mark Zuckerberg, but they probably won't be homeless either.&lt;/p&gt;

&lt;p&gt;So, as a joke, I wrote a script looking for Wikipedia pages dedicated to the first 1000 users of Facebook. Turns out there are a lot of very common names, which obviously result in false positives; unfortunately Wikipedia doesn't give you easily-parsed metadata (here's a new project for Jimbo Wales and friends), so I couldn't do things like discarding everyone born before 1970. With a bit of patience, I narrowed down the number to a rough 6%. Some of them are (or were) Facebook employees, of course, but there are also young poets, writers and comedians.&lt;/p&gt;

&lt;p&gt;You would probably get better results by replacing Wikipedia with LinkedIn, which would include more successful businesspeople and professionals -- Harvard's bread and butter. Obviously you could also start digging across the entire FB userbase, beyond the first lucky Harvardites.&lt;/p&gt;

&lt;p&gt;These web APIs are a great tool for smart researchers; you now have a lot of data to be correlated with a little bit of programming glue and very little time. The result might not be scientifically exact, but could still unearth surprising insights.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3676448-6343975405545895095?l=blog.pythonaro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/6343975405545895095/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3676448&amp;postID=6343975405545895095' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/6343975405545895095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/6343975405545895095'/><link rel='alternate' type='text/html' href='http://blog.pythonaro.com/2011/03/social-experiments-with-facebook-ids.html' title='Social experiments with Facebook IDs'/><author><name>Giacomo Lacava</name><uri>https://profiles.google.com/112001311733983789595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WWGLdc8H1Uk/AAAAAAAAAAI/AAAAAAAAAYE/tA6iBrZYdng/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3676448.post-6137486788504910550</id><published>2011-02-25T08:33:00.010Z</published><updated>2011-02-25T10:32:56.113Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='GeekDiary'/><title type='text'>XKCD Fanfiction</title><content type='html'>&lt;small&gt;&lt;i&gt;Panel 1:&lt;/i&gt;&lt;/small&gt;&lt;br /&gt;
Stick Figure &lt;b&gt;A&lt;/b&gt;: "Can you believe it? I once touched Michael Jackson's HAND!"&lt;br /&gt;
Stick Figure &lt;b&gt;B&lt;/b&gt;: "So what?"&lt;br /&gt;&lt;br /&gt;
&lt;small&gt;&lt;i&gt;Panel 2:&lt;/i&gt;&lt;/small&gt;&lt;br /&gt;
SF&lt;b&gt;B&lt;/b&gt;: "You touched the hand of a singer famous for grabbing his private parts while dancing. Did this improve your life in any way?"&lt;br /&gt;&lt;br /&gt;
SF&lt;b&gt;A&lt;/b&gt;: "..."&lt;br /&gt;&lt;br /&gt;
&lt;small&gt;&lt;i&gt;Panel 3:&lt;/i&gt;&lt;/small&gt;&lt;br /&gt;
SF&lt;b&gt;B&lt;/b&gt;: "I mean, did you ever SPEAK to him? Did he write you a SONG or something?"&lt;br /&gt;&lt;br /&gt;
&lt;small&gt;&lt;i&gt;Panel 4:&lt;/i&gt;&lt;/small&gt;&lt;br /&gt;
SF&lt;b&gt;A&lt;/b&gt;: "No, but last year Donald Knuth waved at me through a cafeteria window."&lt;br /&gt;
SF&lt;b&gt;B&lt;/b&gt;: "Dude, that's &lt;i&gt;AWESOME!&lt;/i&gt;"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;small&gt;ALT-TEXT: "He was really looking at some Finnish creep behind me, one Snoopy Torvalds I think. Yeah, never heard of him either."&lt;/small&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3676448-6137486788504910550?l=blog.pythonaro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/6137486788504910550/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3676448&amp;postID=6137486788504910550' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/6137486788504910550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/6137486788504910550'/><link rel='alternate' type='text/html' href='http://blog.pythonaro.com/2011/02/xkcd-fanfiction.html' title='XKCD Fanfiction'/><author><name>Giacomo Lacava</name><uri>https://profiles.google.com/112001311733983789595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WWGLdc8H1Uk/AAAAAAAAAAI/AAAAAAAAAYE/tA6iBrZYdng/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3676448.post-4992379779507081546</id><published>2010-10-24T20:49:00.006+01:00</published><updated>2010-10-27T23:39:09.778+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pykde'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='kde'/><category scheme='http://www.blogger.com/atom/ns#' term='kio'/><title type='text'>Valid keywords for KIO.Job.addMetaData</title><content type='html'>&lt;p&gt;I spent three hours last night, pulling my hair out, while trying to add a custom &lt;abbr title="HyperText Transfer Protocol"&gt;HTTP&lt;/abbr&gt; header to a &lt;a href="http://api.kde.org/4.x-api/kdelibs-apidocs/kio/html/classKIO_1_1StoredTransferJob.html"&gt;StoredTransferJob&lt;/a&gt; generated by &lt;a href="http://api.kde.org/4.x-api/kdelibs-apidocs/kio/html/namespaceKIO.html#acbf810e468e3904f7fe17e77933b4a54"&gt;KIO.storedHttpPost&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In my naivety, I thought &lt;a href="http://api.kde.org/4.x-api/kdelibs-apidocs/kio/html/classKIO_1_1Job.html#af509b3764a6b915df1273424e40b80d2"&gt;KIO.Job.addMetaData(key,value)&lt;/a&gt; would accept an &lt;abbr title="HyperText Transfer Protocol"&gt;HTTP&lt;/abbr&gt; header name as key, and the actual header value as value. I was twice wrong: "key" is a limited list of accepted keywords (documented in the obscure &lt;a href="http://lxr.kde.org/source/KDE/kdelibs/kio/DESIGN.metadata"&gt;DESIGN.metadata&lt;/a&gt; file, buried in the &lt;acronym title="K Desktop Environment"&gt;KDE&lt;/acronym&gt; source tree and not linked by any tutorial), and "value" is the complete header (e.g. "Content-Type: application/x-www-form-urlencoded"). It's essential to get the key right, or the metadata will be silently dropped (argh); I had to fiddle with &lt;a href="http://www.wireshark.org"&gt;Wireshark&lt;/a&gt; to find out. By the way, the two essential keys you probably want to remember are "content-type" and the life-saving &lt;del&gt;"CustomHTTPHeader"&lt;/del&gt;&lt;ins&gt;"customHTTPHeader" (DAMN LOWERCASE C!!! it's wrong in the design document, btw.)&lt;/ins&gt;.&lt;/p&gt;

&lt;p&gt;(That's the terrible thing about &lt;acronym title="K Desktop Environment"&gt;KDE&lt;/acronym&gt; &lt;abbr title="Application Programming Interface"&gt;API&lt;/abbr&gt;s: lots of barely-documented quirkiness hidden under an appearance of ease-of-use. You start developing thinking that it's all going to be easy, and find out along the way that things are not really as simple as they seem. I guess I should be thankful that at least they have good web tools to browse and grep their source, and fairly complete doxygen docs... but it still hurts more than it should.)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3676448-4992379779507081546?l=blog.pythonaro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/4992379779507081546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3676448&amp;postID=4992379779507081546' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/4992379779507081546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/4992379779507081546'/><link rel='alternate' type='text/html' href='http://blog.pythonaro.com/2010/10/valid-keywords-for-kiojobaddmetadata.html' title='Valid keywords for KIO.Job.addMetaData'/><author><name>Giacomo Lacava</name><uri>https://profiles.google.com/112001311733983789595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WWGLdc8H1Uk/AAAAAAAAAAI/AAAAAAAAAYE/tA6iBrZYdng/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3676448.post-4004475560922664746</id><published>2010-07-23T20:00:00.001+01:00</published><updated>2010-08-21T23:26:28.849+01:00</updated><title type='text'>If anything can go wrong...</title><content type='html'>Blogger forced people to move off FTP publishing... expect breakage.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3676448-4004475560922664746?l=blog.pythonaro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/4004475560922664746/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3676448&amp;postID=4004475560922664746' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/4004475560922664746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/4004475560922664746'/><link rel='alternate' type='text/html' href='http://blog.pythonaro.com/2010/07/if-anything-can-go-wrong.html' title='If anything can go wrong...'/><author><name>Giacomo Lacava</name><uri>https://profiles.google.com/112001311733983789595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WWGLdc8H1Uk/AAAAAAAAAAI/AAAAAAAAAYE/tA6iBrZYdng/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3676448.post-4836210923099235287</id><published>2010-03-09T20:30:00.003Z</published><updated>2010-03-09T21:18:33.753Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='PyQt'/><category scheme='http://www.blogger.com/atom/ns#' term='meego'/><category scheme='http://www.blogger.com/atom/ns#' term='GeekDiary'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><title type='text'>The joys of Python and Qt</title><content type='html'>&lt;p&gt;I'm currently working on a tutorial regarding &lt;a href="http://meego.com/"&gt;MeeGo&lt;/a&gt;, the new Linux-based embedded platform born by the merging of (Nokia-sponsored) &lt;a href="http://maemo.org"&gt;Maemo&lt;/a&gt; and (Intel-adopted) &lt;a href="http://moblin.org"&gt;Moblin&lt;/a&gt;. MeeGo is probably the closest thing we'll ever get to a real "Linux for the masses": differently from Android, where Linux is just a kernel for Java to run on top, here we'll have the full GNU toolchain, X display, desktop technologies based on &lt;a href="http://www.freedesktop.org/"&gt;FreeDesktop&lt;/a&gt; standards, &lt;abbr title="Redhat Package Management"&gt;RPM&lt;/abbr&gt; packages, etc etc.&lt;/p&gt;
&lt;p&gt;The main development toolkit for MeeGo, from now on, will officially be &lt;a href="http://qt.nokia.com/products"&gt;QT&lt;/a&gt;. This seems to fly in the face of reason, having two existing &lt;a href="http://gtk.org"&gt;GTK&lt;/a&gt;-based codebases from both "parent" systems which have already been deployed on production devices, but it's actually a very smart choice, as I was reminded just today.&lt;/p&gt;
&lt;p&gt;This morning, I was working on a laptop running Windows XP. I built a couple of forms with Qt Designer, then fired up my trusty &lt;abbr title="Integrated Development Environment"&gt;IDE&lt;/abbr&gt; and wrote the main code, about 150 lines of &lt;a href="http://www.python.org"&gt;Python&lt;/a&gt; that will download some files, manage a few controls and then display a web page.&lt;/p&gt;&lt;p&gt;After completing a full set of tests on the local machine, I copied it to my (Maemo) phone, and again it was working perfectly -- without any change, recompilation, deployment, anything. Then I went home and copied it back to a different laptop running Kubuntu Linux, and again it was running just fine. Had I had a Mac (or iPad?) laying around, I'm confident it would have run there as well without any change. Consider that the version of QT and &lt;a href="http://riverbankcomputing.com/software/pyqt/"&gt;PyQt&lt;/a&gt; was slightly different on all machines, just to give it a further twist.&lt;/p&gt;
 &lt;p&gt;Obviously this level of portability has a price. I had to write my code using constructs like &lt;a href="http://qt.nokia.com/doc/4.6/qsettings.html"&gt;QSettings&lt;/a&gt; and &lt;a href="http://qt.nokia.com/doc/4.6/qnetworkaccessmanager.html"&gt;QNetworkAccessManager&lt;/a&gt; rather than messing directly with the Windows Registry or HTTP_PROXY variables. I have yet another (leaky) abstraction layer on top of the &lt;abbr title="Operating System"&gt;OS&lt;/abbr&gt;, which may or may not be to everyone's taste, and the program runs in a sandboxed runtime, which might be slower than natively-compiled code (although this is debatable, these days); but I didn't have to write three different codepaths for each and every interoperation with the &lt;abbr title="Operating System"&gt;OS&lt;/abbr&gt;. I didn't have to worry about having a $HOME or a %HOME%. If I have to worry about packaging is just because I have to write about the ins and outs of a particular platform; in other circumstances I could have simply relied on python tools to do the right thing.&lt;/p&gt;&lt;p&gt;Python and QT could finally deliver the dream of portability that Java promised, if only we give them a sporting chance.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3676448-4836210923099235287?l=blog.pythonaro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/4836210923099235287/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3676448&amp;postID=4836210923099235287' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/4836210923099235287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/4836210923099235287'/><link rel='alternate' type='text/html' href='http://blog.pythonaro.com/2010/03/joys-of-python-and-qt.html' title='The joys of Python and Qt'/><author><name>Giacomo Lacava</name><uri>https://profiles.google.com/112001311733983789595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WWGLdc8H1Uk/AAAAAAAAAAI/AAAAAAAAAYE/tA6iBrZYdng/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3676448.post-1725620328728127004</id><published>2010-03-03T15:25:00.004Z</published><updated>2010-03-03T15:53:21.233Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='PyQt'/><category scheme='http://www.blogger.com/atom/ns#' term='GeekDiary'/><category scheme='http://www.blogger.com/atom/ns#' term='pytthon'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><category scheme='http://www.blogger.com/atom/ns#' term='callblocker'/><title type='text'>CallBlocker for Maemo</title><content type='html'>&lt;p&gt;Last week, Vinu Thomas came up with &lt;a href="http://www.mynokiaworld.com/2010/02/block-unwanted-calls-on-your-n900/"&gt;an ingenious script&lt;/a&gt; that will silently drop calls on your N900 if they come from a list of "blocked" callers. I never thought you could do that, but apparently there have been quite a few apps for this sort of things on more established platforms like Symbian and iPhone.&lt;/p&gt;
&lt;p&gt;At first I suggested a few minor improvements to the script, then I thought I might as well repackage it in a proper application with a proper GUI. I asked permission to Vinu (something the author of "pycallblocker" didn't bother to do), and then I went ahead and put it on Garage.&lt;/p&gt;
&lt;p&gt;So there you have it: &lt;a href="http://garage.maemo.org/projects/callblocker"&gt;CallBlocker 1.0 for Maemo 5&lt;/a&gt;. Note that it relies on the python2.5-qt4-gui package, currently available only in the &lt;a href="http://wiki.maemo.org/Extras-testing"&gt;extras-testing&lt;/a&gt; repository.&lt;/p&gt;
&lt;p&gt;The current feature-set is quite limited: you basically enter a list of phone numbers, and callers (exactly) matching them will be sent a busy signal or redirected to voicemail.&lt;/p&gt;
&lt;p&gt;It did get quite a warm reception on &lt;a href="http://talk.maemo.org"&gt;talk.maemo.org&lt;/a&gt;, so I'm motivated to keep development ongoing (at the expense of other, still-unreleased stuff I have almost ready). The current plan is to release a 1.1 version with support for suffix wildcards (e.g. entering +441234*, all numbers beginning with +441234 would be matched and dropped) and better daemon management. Then, time permitting, I'd like to have a 2.0 with features like blocking all withheld/private numbers, blocking SMS texts, blocking specific contacts from address book, blocking all numbers not in addressbook, blocking only during some hours, and possibly even a "whitelist" mode.&lt;/p&gt;
&lt;p&gt;Once it reaches a certain maturity, I'll probably consider moving it to the Ovi Store, at which point PyQt licensing issues might arise, but we'll cross that bridge when we get to it.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3676448-1725620328728127004?l=blog.pythonaro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/1725620328728127004/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3676448&amp;postID=1725620328728127004' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/1725620328728127004'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/1725620328728127004'/><link rel='alternate' type='text/html' href='http://blog.pythonaro.com/2010/03/callblocker-for-maemo.html' title='CallBlocker for Maemo'/><author><name>Giacomo Lacava</name><uri>https://profiles.google.com/112001311733983789595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WWGLdc8H1Uk/AAAAAAAAAAI/AAAAAAAAAYE/tA6iBrZYdng/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3676448.post-873638003953441728</id><published>2010-02-21T23:56:00.001Z</published><updated>2010-02-21T23:56:45.769Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='GeekDiary'/><category scheme='http://www.blogger.com/atom/ns#' term='kde'/><category scheme='http://www.blogger.com/atom/ns#' term='kubuntu'/><title type='text'>KDE 4.4.0 on Kubuntu Karmic 9.10 -- a note of warning</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p&gt;I just upgraded my Kubuntu 9.10 "Karmic Koala" from KDE 4.3.4 to 4.4.0 using the &lt;em&gt;backports&lt;/em&gt; repository. A note of warning: take a backup.&lt;/p&gt;&lt;p&gt;It took me something like 4 or 5 runs of &lt;code&gt;apt-get dist-upgrade&lt;/code&gt; / &lt;code&gt;apt-get -f install&lt;/code&gt; to get back a working setup. APT complained about a couple of things (python-qt3-doc conflicting with some newer package which includes the same examples, and Bilbo having been renamed Blogilo) but eventually pulled it through.&lt;/p&gt;&lt;p&gt;I was smart enough to backup the &lt;em&gt;.kde&lt;/em&gt; home directory before launching a 4.4 session, and I'm glad I was. First run: Plasma crashed hard on a segfault, and didn't restart. Ok, this happened with some past upgrade already, let's just move away the old &lt;em&gt;.kde&lt;/em&gt; home... got back a default desktop. Playing around with widgets, I hit another crash. And another. The culprit was always the Plasma Desktop, actual applications were running fine. Eventually, I moved back the old &lt;em&gt;.kde&lt;/em&gt; home except the plasma* files under .kde/share/config/. This gave me back all my old KDE settings, except for Plasma. Win, I thought, and merrily set out to recreate my previous desktop arrangement.&lt;/p&gt;&lt;p&gt;Another crash.&lt;/p&gt;&lt;p&gt;So uhm. I'll try to track down what exactly Plasma doesn't like in my setup (which was, for the record, with two panels on left and right edge; Lancelot and a couple of QuickAccess widgets on the left, task manager and shutdown button on the right; two Plasma "views" and 4 virtual desktops), but if you are planning a similar upgrade, make sure you put aside some time for it, and get a good backup beforehand.&lt;/p&gt;&lt;p&gt;(I guess the question now would be "&lt;em&gt;is it worth it?&lt;/em&gt;". Well, KDE does look more polished, applications are faster to launch and more responsive... it does look like we're finally at the point where one could upgrade from a 3.5.x release to 4.x and feel a bit awestruck.)&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3676448-873638003953441728?l=blog.pythonaro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/873638003953441728/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3676448&amp;postID=873638003953441728' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/873638003953441728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/873638003953441728'/><link rel='alternate' type='text/html' href='http://blog.pythonaro.com/2010/02/kde-440-on-kubuntu-karmic-910-note-of.html' title='KDE 4.4.0 on Kubuntu Karmic 9.10 -- a note of warning'/><author><name>Giacomo Lacava</name><uri>https://profiles.google.com/112001311733983789595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WWGLdc8H1Uk/AAAAAAAAAAI/AAAAAAAAAYE/tA6iBrZYdng/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3676448.post-1176077099993772440</id><published>2010-02-09T08:16:00.005Z</published><updated>2010-02-10T10:23:08.335Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='PyQt'/><category scheme='http://www.blogger.com/atom/ns#' term='Nokia'/><category scheme='http://www.blogger.com/atom/ns#' term='GeekDiary'/><category scheme='http://www.blogger.com/atom/ns#' term='S60'/><category scheme='http://www.blogger.com/atom/ns#' term='Qt'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><title type='text'>Mobile applications for Nokia phones with... javascript ?!?</title><content type='html'>&lt;p&gt;A few days ago the lovely folks at &lt;a href="http://www.nsmanchester.com"&gt;NSManchester&lt;/a&gt;, an Apple user group, gave a chance to "the enemy" (i.e. &lt;a href="http://www.forum.nokia.com"&gt;Nokia&lt;/a&gt;) to present their technology stack and business strategies for attracting developers.&lt;/p&gt;
&lt;p&gt;The two presenter were a bit underwhelming (understandable after they went through the usual, hellish experience with British railway services), and there was little talk of my beloved &lt;a href="http://www.maemo.org"&gt;Maemo&lt;/a&gt;, but it's hard to dismiss the technology stack they have chosen to go forward. Key element seems to be the &lt;a href="http://qt.nokia.com"&gt;QT&lt;/a&gt; library they acquired last year, which I know and love through the &lt;a href="http://www.riverbankcomputing.co.uk/software/pyqt"&gt;original Python bindings&lt;/a&gt;. It's powerful and as cross-platform as it can be, with a lot of mindshare in the Linux and Windows communities; this said, it's still C++, and it's hard to get excited about C++ these days. Also, the runtime will gradually appear on new and recent phones but probably won't make it to older ones.&lt;/p&gt;
&lt;p&gt;The second development platform they are pushing, however, was more of a surprise to me. Apparently, you can use &lt;a href="http://en.wikipedia.org/wiki/JavaScript"&gt;JavaScript&lt;/a&gt; to write applications for recent smartphones (S60 5th ed. -- N97 and 5800 -- and S60 3rd ed. &lt;abbr title="Feature Pack"&gt;FP&lt;/abbr&gt;2 -- e.g. E72, N85, N96 etc). You can access &lt;abbr title="Global Positioning System"&gt;GPS&lt;/abbr&gt; coordinates, contacts and calendar items, as well as having complete freedom to design the &lt;abbr title="User Interface"&gt;UI&lt;/abbr&gt; with standard &lt;abbr title="HyperText Markup Language"&gt;HTML&lt;/abbr&gt; and &lt;abbr title="Cascading Sytle Sheets"&gt;CSS&lt;/abbr&gt;. You don't need to sign the resulting packages, the barrier to entry is lowered dramatically. This is potentially a game-changer, and I don't know why Nokia are not shouting it from the rooftops. Early adopters include &lt;a href="http://netflix.com"&gt;Netflix&lt;/a&gt;, which uses a basic JavaScript interface to stream their Flash content (!) -- so yes, you can use flash as well. My head simply went "boom"; I must look into this stuff.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;One other thing I noticed was the presenters' style, typically European: self-deprecation and brutal honesty about things that work and ones that don't. It was refreshing, after weeks of Yanks propaganda from Google and Apple pushing their new gadgets as "fantastic", "amazing", "revolutionary" etc etc etc...&lt;/small&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3676448-1176077099993772440?l=blog.pythonaro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/1176077099993772440/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3676448&amp;postID=1176077099993772440' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/1176077099993772440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/1176077099993772440'/><link rel='alternate' type='text/html' href='http://blog.pythonaro.com/2010/02/mobile-applications-for-nokia-phones.html' title='Mobile applications for Nokia phones with... javascript ?!?'/><author><name>Giacomo Lacava</name><uri>https://profiles.google.com/112001311733983789595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WWGLdc8H1Uk/AAAAAAAAAAI/AAAAAAAAAYE/tA6iBrZYdng/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3676448.post-5722872486983710341</id><published>2010-01-29T23:17:00.001Z</published><updated>2010-01-29T23:17:33.798Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='GeekDiary'/><category scheme='http://www.blogger.com/atom/ns#' term='backup'/><category scheme='http://www.blogger.com/atom/ns#' term='backupify'/><title type='text'>Backupify</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p&gt;Thanks to the lovely &lt;a title='gPodder' href='http://www.gpodder.org'&gt;gPodder&lt;/a&gt; on my &lt;a title='N900' href='http://maemo.nokia.com/n900/'&gt;Nokia N900&lt;/a&gt;, I've recently discovered the &lt;a title='net@night' href='http://twit.tv/natn'&gt;net@night&lt;/a&gt; podcast by Leo Laporte. Like many regular podcasts, it's mostly full of random chatting and showmanship. In this respect, "new media" tend to be exactly like "old media": forced by their own schedule to blabber for the sake of it. But I digress.&lt;/p&gt;&lt;p&gt;The best segment of Laporte's show is usually an interview with someone from a startup, which is a good way of finding out about new services. Yesterday, it made me sign up for &lt;a title='Backupify' href='http://www.backupify.com'&gt;Backupify&lt;/a&gt;, a "social media backup tool" which will scrape your &lt;a title='GoogleMail' href='http://mail.google.com'&gt;GMail&lt;/a&gt; / &lt;a title='Delicious' href='http://www.delicious.com'&gt;Delicious&lt;/a&gt; / &lt;a title='Facebook' href='htp://www.facebook.com'&gt;Facebook&lt;/a&gt; / &lt;a title='Flickr' href='http://www.flickr.com'&gt;Flickr&lt;/a&gt; / &lt;a title='Twitter' href='http://www.twitter.com'&gt;Twitter&lt;/a&gt; / &lt;a title='Blogger' href='http://www.blogger.com'&gt;Blogger&lt;/a&gt; / &lt;a title='Wordpress.com' href='http://www.wordpress.com'&gt;Wordpress&lt;/a&gt; etc etc and store all the resulting data in a safe place on Amazon's cloud. Not a bad idea: the first 20 years of the Age of the Internet should have taught us, if anything, that data is ephemeral and can disappear at the flick of a switch. &lt;a href='http://en.wikipedia.org/wiki/Geocities#Closure'&gt;What happened to Geocities&lt;/a&gt; is proof that today's giants won't necessarily be with us tomorrow. Conscious of this state of things, Backupify gives you the option to drop your data on your own Amazon server, so that it will still be available if they go belly-up; quite a honest approach for a startup. It used to be a pay-only service, then went free to accelerate growth and get some venture capital; they will move to a freemium model after January 31, so you better try it out now if you can.&lt;/p&gt;&lt;p&gt;Good "Web 2.0" services usually expose APIs that make backups relatively easy for a programmer, but who's got time to write dedicated scripts AND the foresight to run them regularly? Myself, I've probably written half a dozen GMail scrapers, but I hardly ever ran them more than once. I've exported this Blogger-powered site once, and it was a nightmare. Backupify makes it very easy to "set up and forget", and that's good. The data will only be as good as what the various sites will allow; for example you will never be able to "restore" a Twitter account, so Backupify will only give you a PDF of your (and your friends') twits, which is the best you can expect. For Google Spreadsheets you get XLS files, for Blogger you get a big XML containing all your posts, etc etc.&lt;/p&gt;&lt;p&gt;The only problem with the site is the password anti-pattern: in order to get at your data, they often have to ask for your login details, and will store them on their servers. They do use OAuth if the service supports it (like Facebook or Google), but otherwise you'll have to trust them with your credentials. This makes them a very good target for black-hat hackers, among other things. I do hope they know what they are doing.&lt;/p&gt;&lt;p/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3676448-5722872486983710341?l=blog.pythonaro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/5722872486983710341/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3676448&amp;postID=5722872486983710341' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/5722872486983710341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/5722872486983710341'/><link rel='alternate' type='text/html' href='http://blog.pythonaro.com/2010/01/backupify.html' title='Backupify'/><author><name>Giacomo Lacava</name><uri>https://profiles.google.com/112001311733983789595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WWGLdc8H1Uk/AAAAAAAAAAI/AAAAAAAAAYE/tA6iBrZYdng/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3676448.post-4557340005526783126</id><published>2010-01-25T11:18:00.003Z</published><updated>2010-01-25T11:42:22.720Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='Nokia'/><category scheme='http://www.blogger.com/atom/ns#' term='N900'/><category scheme='http://www.blogger.com/atom/ns#' term='GeekDiary'/><category scheme='http://www.blogger.com/atom/ns#' term='stickyouriphonewherethesundontshine'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><title type='text'>How the Nokia N900 is improving my life</title><content type='html'>&lt;p&gt;&lt;small&gt;(Small things, but...)&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;Today I had to took my car to the garage, so had to tell my manager I'd likely be late (public transport is not terrible in our area, but it still takes me about twice the time to get to the office than it would with the car). I'm also down with a laryngitis and I can barely whisper.&lt;/p&gt;
&lt;p&gt;I could have booted my home laptop to send an email or IM, but meanwhile the bus would have come and gone. So I hit the road anyway, and thought I would somehow email from the phone.&lt;/p&gt;
&lt;p&gt;But then, the Nokia N900 is no Blackberry; it's a full-fledged linux desktop in your pockets. When I enabled the 3G data connection, the button nearby was the one to set your IM status(es) to Online; so I fired that up, looked up my manager in the wonderfully integrated address book, and she was online, so while I sit on the bus, we had a friendly chat about things to do, without having to share them with other commuters or strain my poor throat.&lt;/p&gt;
&lt;p&gt;All the while, I was listening to &lt;a href="http://www.awaretek.com/python/"&gt;the latest Python 411 podcast&lt;/a&gt; about the (apparently terrific and currently-slashdotted) &lt;a href="http://sikuli.org"&gt;Sikuli project&lt;/a&gt;, updating expenses on the little program I've developed (which I'll upload to the Ovi Store in a few weeks, I promise), and browsing Google Reader. The 30-mins commute was over in what seemed like seconds, and the experience was basically the same I could have had while sitting at my desk with a regular laptop.&lt;/p&gt;
&lt;p&gt;This little thing is simply outstanding. Apple's new "iWhatever" better have a SIM slot, or they can kiss goodbye to their iPhone marketshare.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3676448-4557340005526783126?l=blog.pythonaro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/4557340005526783126/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3676448&amp;postID=4557340005526783126' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/4557340005526783126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/4557340005526783126'/><link rel='alternate' type='text/html' href='http://blog.pythonaro.com/2010/01/how-nokia-n900-is-improving-my-life.html' title='How the Nokia N900 is improving my life'/><author><name>Giacomo Lacava</name><uri>https://profiles.google.com/112001311733983789595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WWGLdc8H1Uk/AAAAAAAAAAI/AAAAAAAAAYE/tA6iBrZYdng/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3676448.post-7278480938355450311</id><published>2010-01-21T22:12:00.000Z</published><updated>2010-01-21T22:12:44.524Z</updated><title type='text'>The personal-GPS market has just died</title><content type='html'>&lt;p&gt;Nokia just &lt;a href="http://maemo-freak.com/index.php/miscellaneous/1365-nokia-to-offer-free-navigation-service-to-customers-of-its-smartphones"&gt;announced&lt;/a&gt; that the turn-by-turn navigation addons to their (underwhelming) gps software, Ovi Maps, will now be offered free of charge, completely undercutting TomTom and friends. They can do this thanks to the recent acquisition of Navteq, the top map-making company in the world (which is still selling map data to competitors at a hefty price, by the way, including Google); and they have to do it, because Google is doing it as well on Android and iPhone.&lt;/p&gt;
&lt;p&gt;If Nokia can really deliver (i.e. actually &lt;i&gt;improve&lt;/i&gt; Ovi Maps, which is quite frankly not as good as commercial competitors yet), 2010 will be remembered as the year that GPS devices became obsolete, like it happened to PDAs about three years ago. TomTom shareholders better run for the hills.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3676448-7278480938355450311?l=blog.pythonaro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://maemo-freak.com/index.php/miscellaneous/1365-nokia-to-offer-free-navigation-service-to-customers-of-its-smartphones' title='The personal-GPS market has just died'/><link rel='replies' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/7278480938355450311/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3676448&amp;postID=7278480938355450311' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/7278480938355450311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/7278480938355450311'/><link rel='alternate' type='text/html' href='http://blog.pythonaro.com/2010/01/personal-gps-market-has-just-died.html' title='The personal-GPS market has just died'/><author><name>Giacomo Lacava</name><uri>https://profiles.google.com/112001311733983789595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WWGLdc8H1Uk/AAAAAAAAAAI/AAAAAAAAAYE/tA6iBrZYdng/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3676448.post-5301784128121172852</id><published>2010-01-19T10:54:00.001Z</published><updated>2010-01-19T10:54:35.121Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='GeekDiary'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Remote shutdown on Windows</title><content type='html'>&lt;p&gt;This might sound useless or obvious to many, but i didn't know it and it made my life easier today...&lt;/p&gt;
&lt;p&gt;If you ever need to shutdown a remote Windows machine, and you can't access it with Remote Desktop or similar tools, you can use Shutdown.exe from another Windows machine, like this: &lt;code&gt;shutdown /m \\my-remote-host&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Additional parameters can be seen with /? but the most useful ones are:&lt;dl&gt;&lt;dt&gt;/r&lt;/dt&gt;&lt;dd&gt;reboot after shutdown&lt;/dd&gt;&lt;dt&gt;/f&lt;/dt&gt;&lt;dd&gt;force shutdown -- useful when the machine looks stuck, which is what happened to me today...&lt;/dd&gt;&lt;dt&gt;/d xx:yy&lt;/dt&gt;&lt;dd&gt;give a reason for reboot. See /? for the available codes.&lt;/dd&gt;&lt;/dl&gt;&lt;/p&gt;
&lt;p&gt;I hope this means I can say goodbye to dangerous hard-reboots...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3676448-5301784128121172852?l=blog.pythonaro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/5301784128121172852/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3676448&amp;postID=5301784128121172852' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/5301784128121172852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/5301784128121172852'/><link rel='alternate' type='text/html' href='http://blog.pythonaro.com/2010/01/remote-shutdown-on-windows.html' title='Remote shutdown on Windows'/><author><name>Giacomo Lacava</name><uri>https://profiles.google.com/112001311733983789595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WWGLdc8H1Uk/AAAAAAAAAAI/AAAAAAAAAYE/tA6iBrZYdng/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3676448.post-3159256159182819263</id><published>2010-01-18T14:51:00.005Z</published><updated>2010-01-18T15:40:36.348Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Nokia'/><category scheme='http://www.blogger.com/atom/ns#' term='GeekDiary'/><category scheme='http://www.blogger.com/atom/ns#' term='fail'/><category scheme='http://www.blogger.com/atom/ns#' term='saas'/><category scheme='http://www.blogger.com/atom/ns#' term='ovi'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>Nokia Ovi Store Policies on SaaS / subscriptions: fail</title><content type='html'>&lt;p&gt;&lt;small&gt;(Chances are that nobody will answer this question, like it happened to &lt;a href="http://discussion.forum.nokia.com/forum/showthread.php?t=190706"&gt;this developer on forum.nokia.com&lt;/a&gt;, but what the hell)&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;I have an interesting business idea. I'll develop a mobile application with some interesting functionality, and I'll give it away for free. The application will contain an option to upload some data to a remote server, which you will then access from any computer as a regular site. The website will have some advanced features to analyze the data etc etc. The site will operate as &lt;abbr title="Software as a Service"&gt;SaaS&lt;/abbr&gt;, with a free 30-day trial. Basically, the site will make the real money, in a way similar to what FeedDemon and NewsGator tried a few years ago in a different market.&lt;/p&gt;
&lt;p&gt;Now, if I wanted to do that on Nokia platforms, I would try and put my mobile app on the &lt;a href="http://store.ovi.com"&gt;Ovi Store&lt;/a&gt; as a free download, right? After all, it will be a useful program in its own right, with the online services being 100% optional. Nokia / Ovi get a free, useful app enriching its (crappy) customer experience, the developer gets a big distribution channel, it's a win-win!&lt;/p&gt;
&lt;p&gt;Except that landlords don't like uppity sharecroppers. From the &lt;a href="http://wiki.forum.nokia.com/index.php/Ovi_Publish_-_Developer_Terms_and_Conditions"&gt;Ovi Terms &amp;amp Conditions&lt;/a&gt;:
&lt;blockquote&gt;4.7. Free Content Restriction&lt;br /&gt;&lt;br /&gt;
You are prohibited from collecting future charges from end users for Content that those end users were initially allowed to obtain for free. This is not intended to prevent distribution of free trial versions of Your Content with a later upsell option to obtain the full version of the Content. Such free trials for Content are permitted. However, if You want to collect fees after the free trial expires, &lt;b&gt;You must collect all fees for the full version of Your Content through the Program&lt;/b&gt;. In this Agreement, "free" means there are no charges or fees of any kind for use of the Content. &lt;b&gt;All fees received by You for Content distributed via the Program must be processed by Nokia.&lt;/b&gt;&lt;/blockquote&gt;
&lt;p&gt;Now, I can see the motive behind such a "racket clause". Nokia doesn't want Ovi to end up a cesspool of trialware, or to be associated with "click once and pay forever" scams. But the rule is too broad, and it reads like any SaaS scenario is simply out of the question (especially when you consider that Ovi does not support "subscriptions" at the moment, only one-off payments). SaaS is probably the best revenue model in the software world at the moment, and Nokia is telling developers they can't use it.&lt;/p&gt;
&lt;p&gt;I honestly do not know if Apple put similar restrictions in place on their store. They probably did (and then some), control-freak as they are, and this is why I wouldn't want to touch the iPhone ecosystem with a barge pole. But Nokia was supposed to be trying hard to regain developer mindshare...&lt;/p&gt;
&lt;p&gt;So the question I'd like to ask, before I shell out for the Ovi "publisher" license, is: dear Nokia, my application does something useful on your mobiles. It will then, optionally, send some data to my server, and I will personally collect money to have people access that data on the web, aggregated in various ways. Can I put the app on Ovi?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3676448-3159256159182819263?l=blog.pythonaro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/3159256159182819263/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3676448&amp;postID=3159256159182819263' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/3159256159182819263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/3159256159182819263'/><link rel='alternate' type='text/html' href='http://blog.pythonaro.com/2010/01/nokia-ovi-store-policies-on-saas.html' title='Nokia Ovi Store Policies on SaaS / subscriptions: fail'/><author><name>Giacomo Lacava</name><uri>https://profiles.google.com/112001311733983789595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WWGLdc8H1Uk/AAAAAAAAAAI/AAAAAAAAAYE/tA6iBrZYdng/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3676448.post-2706050276262489322</id><published>2010-01-12T00:41:00.002Z</published><updated>2010-01-12T08:35:18.929Z</updated><title type='text'>More notes on N900</title><content type='html'>&lt;p&gt;The N900 is lovely, but the more I use it, the more I get the feeling that releasing it as a mass-market phone might have been a bit premature.&lt;/p&gt;
&lt;p&gt;Take the "grid" icons. Technically, you can sort them: each icon can be given a "priority" number, and the lower it is, the higher it will appear. Technically, you can create additional subfolders and even auto-sort icons depending on the application classification (office, media etc). Unfortunately, all of this must be done *by manually editing an XML file* (/etc/xdg/menus/hildon.menu) plus several other text files (the .desktop and .application files in /usr/share/applications/hildon). For a consumer-grade device, this is shocking. It's even worse: if you mess up said files, the system goes in a "reboot loop" from which is very hard to escape (hint: get the flasher tool and use it with only parameter --enable-rd-mode, then fix the file, then use flasher again with --disable-rd-mode; if that doesn't work, you'll have to do a full reflash).&lt;/p&gt;&lt;p&gt;Also, it does not work with the SIM cards from network Three in UK and Denmark; considering that Three is a favourite of data-heavy users, who should be the main target for this device, this was a big mistake.&lt;/p&gt;&lt;p&gt;Some applications are clearly half-baked (Maps), and the Ovi Store is still closed. You make a big launch taking over the entire ad-space on Gizmodo for a day, and your supposedly flagship applcation store is not working ?&lt;/p&gt;&lt;p&gt;Nokia are slowly addressing these issues by releasing over-the-air updates, which is good, but the overall feeling remains: as released (late), the N900 is for hackers and hobbyists. Which, considering the platform potential and role, is a crying shame.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3676448-2706050276262489322?l=blog.pythonaro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/2706050276262489322/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3676448&amp;postID=2706050276262489322' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/2706050276262489322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/2706050276262489322'/><link rel='alternate' type='text/html' href='http://blog.pythonaro.com/2010/01/more-notes-on-n900.html' title='More notes on N900'/><author><name>Giacomo Lacava</name><uri>https://profiles.google.com/112001311733983789595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WWGLdc8H1Uk/AAAAAAAAAAI/AAAAAAAAAYE/tA6iBrZYdng/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3676448.post-8403992679427732217</id><published>2010-01-07T23:21:00.001Z</published><updated>2010-01-07T23:21:47.798Z</updated><title type='text'>N900 first impression</title><content type='html'>Cool. Feels sturdier than iPhone. Opening the battery compartment is shockingly hard, which is surprising if you think that Nokia always paid a lot of attention to battery slots etc. The hardware keyboard is undoubtedly better than virtual ones, and key size is about right for my clumsy fingers. Desktop navigation is da bomb, incredibly better and more customizable than anything seen before. Default browser is lovely if a bit idiosyncratic, mostly due to the erratic touchscreen. Ah, the touchscreen: worse than iPhone, sorry. The stylus is still quite handy.
Apps: quite a bit of them, after enabling the extras repository, and decent quality. Will try the ovi store later. The feeling is that, finally, Nokia built a device &lt;i&gt;for the internet&lt;/i&gt;: the network is taken for granted and integrated everywhere. The web experience is so good that custom clients (e.g. for twitter or facebook) are hardly needed. I'm writing this post from MaStory, but I could have used blogger.com and the experience would not have been much worse.

And of course, this phone runs linux. Which means that you can hack it to death, and that the market is fully open. 

S60 developers can officially retire, Maemo is simply on another planet. Now let's hope Nokia won't blow this massive chance...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3676448-8403992679427732217?l=blog.pythonaro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/8403992679427732217/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3676448&amp;postID=8403992679427732217' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/8403992679427732217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/8403992679427732217'/><link rel='alternate' type='text/html' href='http://blog.pythonaro.com/2010/01/n900-first-impression.html' title='N900 first impression'/><author><name>Giacomo Lacava</name><uri>https://profiles.google.com/112001311733983789595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WWGLdc8H1Uk/AAAAAAAAAAI/AAAAAAAAAYE/tA6iBrZYdng/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3676448.post-5116384161440356537</id><published>2009-12-05T23:52:00.001Z</published><updated>2009-12-05T23:52:23.175Z</updated><title type='text'>Plasma + Python + QThread = bad</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p&gt;DOM manipulation performed in a QThread launched from a KDE Plasma applet written in Python is officially a &lt;em&gt;very bad idea&lt;/em&gt;. Minidom: crash. QDomDocument: crash. !Fun.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3676448-5116384161440356537?l=blog.pythonaro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/5116384161440356537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3676448&amp;postID=5116384161440356537' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/5116384161440356537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/5116384161440356537'/><link rel='alternate' type='text/html' href='http://blog.pythonaro.com/2009/12/plasma-python-qthread-bad.html' title='Plasma + Python + QThread = bad'/><author><name>Giacomo Lacava</name><uri>https://profiles.google.com/112001311733983789595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WWGLdc8H1Uk/AAAAAAAAAAI/AAAAAAAAAYE/tA6iBrZYdng/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3676448.post-4298684286727908826</id><published>2009-11-30T08:17:00.004Z</published><updated>2009-11-30T10:12:37.881Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='GeekDiary'/><category scheme='http://www.blogger.com/atom/ns#' term='marketing'/><category scheme='http://www.blogger.com/atom/ns#' term='kde4'/><title type='text'>If you can't fix it, rebrand it</title><content type='html'>&lt;p&gt;The reputation of the KDE ecosystem was tarnished by a crappy release process for KDE4. Essential desktop components simply weren't ready for release in 4.0 and 4.1 (some of them still are mostly vaporware) after a huge barrage of hype had massively raised expectations, and this generated a lot of (well deserved) bad publicity. The answer?&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dot.kde.org/2009/11/24/repositioning-kde-brand"&gt;Go and rebrand it&lt;/a&gt;, so that the development process can be broken up more easily and people will be persuaded to blame the right developers for each component. And while we are at it, let's throw out KDE's well-earned reputation for deep integration, the idea of the DE as a complete platform for users and developers. Let's give users the idea that KDE is just a "compilation" of bits and bobs thrown together for no particular reason, on the way overlapping as much as possible with the concept of "distribution", making it fun for companies to explain the difference and for developers to understand what they can and cannot rely on for their apps. Now KDE is supposed to be just a "community", a "club" of like-minded (C++) people hanging out in Gran Canaria and the like.&lt;/p&gt;
&lt;p&gt;Yeah, that will be fun.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;Honestly, I've been a big KDE fan for ages, but the development process for KDE4 was clearly wrong on so many levels. Developers' reactions to user feedback in the last two years have been astonishingly patronizing, and this is just another instance of it. Just admit that errors were made and get to work, please, instead of wasting time jet-setting from one "conference" to another (preferably in remote islands with good nightclubs), talking about marketing b*llocks.&lt;/small&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3676448-4298684286727908826?l=blog.pythonaro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/4298684286727908826/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3676448&amp;postID=4298684286727908826' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/4298684286727908826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/4298684286727908826'/><link rel='alternate' type='text/html' href='http://blog.pythonaro.com/2009/11/if-you-cant-fix-it-rebrand-it.html' title='If you can&apos;t fix it, rebrand it'/><author><name>Giacomo Lacava</name><uri>https://profiles.google.com/112001311733983789595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WWGLdc8H1Uk/AAAAAAAAAAI/AAAAAAAAAYE/tA6iBrZYdng/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3676448.post-5720475338485452655</id><published>2009-11-29T15:20:00.001Z</published><updated>2009-11-29T15:20:37.691Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='GeekDiary'/><category scheme='http://www.blogger.com/atom/ns#' term='kde4'/><category scheme='http://www.blogger.com/atom/ns#' term='akonadi'/><category scheme='http://www.blogger.com/atom/ns#' term='plasma'/><title type='text'>Akonadi vs Plasma: a tale of disorganized, randomic development</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p&gt;The Akonadi::ItemView class, which should provide a default, out-of-the-box view of data stored by Akonadi (KDE 4 technology), depending on the type of resource it represents, cannot be included in a Plasma.Applet (KDE 4 technology) but only in a KXmlGuiClient or KXmlGuiWindow (KDE 3 technology). &lt;/p&gt;&lt;p&gt;Clearly dogfood isn't as tasty as apple pie.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3676448-5720475338485452655?l=blog.pythonaro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/5720475338485452655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3676448&amp;postID=5720475338485452655' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/5720475338485452655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/5720475338485452655'/><link rel='alternate' type='text/html' href='http://blog.pythonaro.com/2009/11/akonadi-vs-plasma-tale-of-disorganized.html' title='Akonadi vs Plasma: a tale of disorganized, randomic development'/><author><name>Giacomo Lacava</name><uri>https://profiles.google.com/112001311733983789595</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-WWGLdc8H1Uk/AAAAAAAAAAI/AAAAAAAAAYE/tA6iBrZYdng/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry></feed>
