<?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-01-10T00:34:09.150Z</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://blog.pythonaro.com/feeds/posts/default/-/GeekDiary'/><link rel='alternate' type='text/html' href='http://blog.pythonaro.com/search/label/GeekDiary'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/posts/default/-/GeekDiary/-/GeekDiary?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>161</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://blog.pythonaro.com/feeds/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://blog.pythonaro.com/feeds/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://blog.pythonaro.com/feeds/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-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://blog.pythonaro.com/feeds/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-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://blog.pythonaro.com/feeds/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://blog.pythonaro.com/feeds/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-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://blog.pythonaro.com/feeds/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://blog.pythonaro.com/feeds/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://blog.pythonaro.com/feeds/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://blog.pythonaro.com/feeds/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://blog.pythonaro.com/feeds/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://blog.pythonaro.com/feeds/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-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://blog.pythonaro.com/feeds/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://blog.pythonaro.com/feeds/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-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://blog.pythonaro.com/feeds/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://blog.pythonaro.com/feeds/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><entry><id>tag:blogger.com,1999:blog-3676448.post-2411802230341408372</id><published>2009-11-24T19:50:00.002Z</published><updated>2009-11-24T19:53:02.727Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='vnc'/><category scheme='http://www.blogger.com/atom/ns#' term='GeekDiary'/><category scheme='http://www.blogger.com/atom/ns#' term='vmware'/><title type='text'>How to Replace VmWare Server 2.0 Console with VNC</title><content type='html'>&lt;p&gt;VmWare Server 2.0 ships with a web-based user-interface that is, to put it bluntly, an abomination. Supposedly, it is that way in order to simplify requirements: gone is the command-line API-based interface of 1.0 (which is now only available in the pricier products, what a coincidence), now the only thing you need is a web browser and a plugin that will display the consoles of virtualized instances.&lt;/p&gt;
&lt;p&gt;This is all well and good &lt;em&gt;when the plugin works&lt;/em&gt;. Which is, considering the constant flow of browser updates, not quite often. In particular, it seems that after upgrading to Firefox 3.5, the plugin stopped recognizing my arrow keys (of all things). I tried running it as a standalone client, which is surprisingly simple (just locate vmware-vmrc in your Firefox profile folder and use it to connect to the main server on port 8333), with no success. I've even followed some blog advice to add something to /etc/vmware/config, but that didn't do it for me.&lt;/p&gt;
&lt;p&gt;Then I remembered what everyone in the VmWare world knows: these virtual consoles are VNC-based. So there must be a way of using a "proper" VNC client, bypassing the godawful plugin. And indeed there is, just drop the following lines in the .vmx file of the virtual machine you want to VNC-enable:&lt;/p&gt;
&lt;pre&gt;RemoteDisplay.vnc.port = "5900"
RemoteDisplay.vnc.enabled = "TRUE"
RemoteDisplay.vnc.password = "password"&lt;/pre&gt;
&lt;p&gt;Reboot the instance and &lt;em&gt;voil&amp;agrave;&lt;/em&gt;, you will be able to connect with a better client, like xTightVnc, where arrow keys do work properly. You can obviously change the port and password to suit your needs.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3676448-2411802230341408372?l=blog.pythonaro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/2411802230341408372/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3676448&amp;postID=2411802230341408372' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/2411802230341408372'/><link rel='self' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/posts/default/2411802230341408372'/><link rel='alternate' type='text/html' href='http://blog.pythonaro.com/2009/11/how-to-replace-vmware-server-20-console.html' title='How to Replace VmWare Server 2.0 Console with VNC'/><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-8612420230957363001</id><published>2009-11-23T20:01:00.001Z</published><updated>2009-11-23T20:01:45.117Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='GeekDiary'/><category scheme='http://www.blogger.com/atom/ns#' term='Amarok'/><category scheme='http://www.blogger.com/atom/ns#' term='kde4'/><title type='text'>Amarok 2 revisited</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p&gt;Considering the sort of negative person I am (I'm sure scientologists would classify me as "suppressive personality" in zero time), it doesn't come as a surprise that one of the most popular items on this blog is &lt;a href='http://blog.pythonaro.com/2008/12/on-amarok-2-or-how-you-can-always-find.html'&gt;a rant about Amarok 2&lt;/a&gt;. Having recently upgraded my Linux laptop, however, I found that Amarok was also upgraded to release 2.2.1, and I decided to give it a go. The experience was, overall, a positive one, so I thought I owed to the developers a follow-up to my previous rap.&lt;/p&gt;&lt;p&gt;&lt;a href='http://amarok.kde.org/'&gt;Amarok&lt;/a&gt; 2.2.1 finally addresses 99% of the problems and regressions that plagued 2.0. The terrible default layout is now highly customizable (click on View -&amp;gt; Lock Layout to unlock the widgets, then drag&amp;amp;drop them where you want), so you can recreate the much-saner 1.x disposition. You can also customize the top toolbar (which by default is wasting so much screen real-estate, you could probably display three different applications in the same amount of space) to be more compact, by selecting &lt;em&gt;View -&amp;gt; Slim Toolbar&lt;/em&gt;. Support for radio and podcasting is now first-rate (I don't know about external disks/mediaplayers), and plugins for various Internet services are quite good. MySQL is back to being an &lt;em&gt;optional&lt;/em&gt; back-end for the internal music catalog. In short, if you still are on 1.x and can upgrade to &lt;acronym title='K Desktop Environment'&gt;KDE&lt;/acronym&gt;4/Qt4, you should probably give it a go.&lt;/p&gt;&lt;p&gt;So, 18 months down the line, Amarok is basically back to where it was in release 1.4, plus some eyecandy and (we are told) a better, more modular infrastructure. In order to achieve this, developers endured a year of bad publicity and hate-mail from their own users, lost market share, and basically looked hapless at prioritizing features and designing interfaces.&lt;/p&gt;&lt;p&gt;Was it worth it? To me, it still looks like another proof that benefits of "big rewrites" are dubious at best, &lt;a href='http://www.joelonsoftware.com/articles/fog0000000069.html'&gt;like Joel Spolsky said so many years ago&lt;/a&gt;. I suspect we will eventually come to say the same about the whole &lt;acronym title='K Desktop Environment'&gt;KDE&lt;/acronym&gt;4 process, but I guess the jury is still out on that one.&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-8612420230957363001?l=blog.pythonaro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/8612420230957363001/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3676448&amp;postID=8612420230957363001' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/8612420230957363001'/><link rel='self' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/posts/default/8612420230957363001'/><link rel='alternate' type='text/html' href='http://blog.pythonaro.com/2009/11/amarok-2-revisited.html' title='Amarok 2 revisited'/><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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3676448.post-8790889995927052978</id><published>2009-11-22T17:23:00.001Z</published><updated>2009-11-22T17:23:13.150Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='education'/><category scheme='http://www.blogger.com/atom/ns#' term='GeekDiary'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='children'/><title type='text'>Programming children</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p&gt;Children are to parents what Big Rewrites are to programmers: the occasion to start from scratch after taking into account all the hacks and bad decisions from previous versions, resulting in a superior implementation of a well-known solution. Or so parents (and programmers) like to think. &lt;/p&gt;&lt;p&gt;Except that children and programs tend to have a life of their own, and the most successful strategy is often to just get along doing whatever the little monsters are successful at, which may or may not be what the previous release intended to do. &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-8790889995927052978?l=blog.pythonaro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/8790889995927052978/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3676448&amp;postID=8790889995927052978' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/8790889995927052978'/><link rel='self' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/posts/default/8790889995927052978'/><link rel='alternate' type='text/html' href='http://blog.pythonaro.com/2009/11/programming-children.html' title='Programming children'/><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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3676448.post-879362670125675834</id><published>2009-11-20T15:26:00.003Z</published><updated>2009-11-20T15:47:37.776Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='imsotemptedtotagthiswiththeemployersname'/><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='GeekDiary'/><title type='text'>How to demotivate your workforce</title><content type='html'>&lt;ul&gt;&lt;li&gt;tell them they are "high cost" compared to Egyptian, Indian or Rumanian counterparts.&lt;/li&gt;&lt;li&gt;tell them that, despite the company being afloat in cash, there's no money for pay increases for the N-th year running.&lt;/li&gt;&lt;li&gt;tell them that the money is "reserved to the mergers&amp;amp;acquisitions strategy". We don't reward our workforce, we reward our competitors; as soon as you can, please go and become one.&lt;/li&gt;&lt;li&gt;tell them that "promotions with no pay increase" are perfectly normal. Same for workload increases. Imply that you should count yourself lucky to still have a job. The beatings will continue until morale improves. &lt;/li&gt;&lt;li&gt;tell them that, if you don't like it, they have a choice (i.e. walking). But at the same time, "we have to get better at sharing knowledge". Sure, I'll get to that right away (not).&lt;/li&gt;&lt;li&gt;give them new internal systems that don't work. When workers complain, dismiss them as whiners. Make sure there is no plan-B after The Big Go-Live. Once TBGL results in complete customer-affecting disaster, panic.
&lt;/li&gt;&lt;/ul&gt;Time to work on personal projects. Big time.

&lt;span style="font-size:78%;"&gt;Dear SUN employees in Europe, you really &lt;span style="font-style: italic;"&gt;really&lt;/span&gt; should cheer for the EU. May you be spared a terrible fate.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3676448-879362670125675834?l=blog.pythonaro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/879362670125675834/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3676448&amp;postID=879362670125675834' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/879362670125675834'/><link rel='self' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/posts/default/879362670125675834'/><link rel='alternate' type='text/html' href='http://blog.pythonaro.com/2009/11/how-to-demotivate-your-workforce.html' title='How to demotivate your workforce'/><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-43377745557628682</id><published>2009-11-17T20:15:00.002Z</published><updated>2009-11-17T20:18:04.962Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='radeon'/><category scheme='http://www.blogger.com/atom/ns#' term='GeekDiary'/><category scheme='http://www.blogger.com/atom/ns#' term='rv350'/><category scheme='http://www.blogger.com/atom/ns#' term='kde4'/><category scheme='http://www.blogger.com/atom/ns#' term='kubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='xorg'/><category scheme='http://www.blogger.com/atom/ns#' term='ATI'/><title type='text'>Kubuntu Karmic Koala and Radeon 9600 Mobility M10 (RV350) xorg.conf magic</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p&gt;The upgrade to &lt;a href='http://www.kubuntu.org/news/9.10-release'&gt;Kubuntu 9.10 "Karmic Koala"&lt;/a&gt; threw me back to the glorious 90s, when installing Linux would invariably require long battles with the infamous XFree config files. Hours and hours wasted trying out magic incantations in order to escape the brutal world of command-line interfaces. !FUN&lt;/p&gt;&lt;p&gt;Anyway, here's a bit background: basically, &lt;a href='http://ati.amd.com'&gt;ATI&lt;/a&gt; stopped releasing proprietary Linux drivers for their old cards. So you can either use the old drivers, or move to the &lt;a href='http://www.x.org/wiki/radeon'&gt;open-source ones&lt;/a&gt; (a complete rewrite, which only recently got good enough for real use). But here's the problem: the version of (&lt;acronym title='K Desktop Environment'&gt;KDE&lt;/acronym&gt; window manager) KWin shipped with Karmic crashes horribly with the old ATI drivers, and recent Xorg releases don't really work well with them anyway. So you haven't much of a choice: move to the free drivers and thank Stallman for inventing the cure to the annoying problem of manufacturers dropping support for products after less than five years.&lt;/p&gt;&lt;p&gt;The problem with the open-source drivers, however, is that running with default parameters will give you shockingly bad perfomance, especially for 2D (weird). I was forced to delve into xorg.conf and turn on all the "turbo-boost" switches I could find. At the moment, I'm getting decent result with the following parameters:&lt;/p&gt;&lt;pre&gt;Section "Device"
Identifier      "Configured Video Device"
Driver  "radeon"
Option  "AccelDFS"              "on"
Option  "AccelMethod"           "XAA"
Option  "MigrationHeuristic"    "smart" # "greedy" works well also
Option  "EnablePageFlip"        "on"
Option  "EnableDepthMoves"      "on"
Option  "ColorTiling"           "on"
Option  "FBTexPercent"          "0"
Option  "AGPMode"               "4" # this is the real kicker
Option  "TripleBuffer"          "true"
EndSection&lt;/pre&gt;&lt;p&gt;Note AccelMethod being set to XAA. In the future that will probably be EXA (which apparently is a newer algorithm), but my experiments with it included too many crashes for my taste.&lt;/p&gt;&lt;p&gt;There are a few other parameters that I scavenged from Google and &lt;i&gt;man radeon&lt;/i&gt;, but they mostly resulted in crashes on my machine (tbh, I'm not sure they were always the guilty party, but better safe than sorry):&lt;/p&gt;&lt;ul&gt;&lt;li&gt;"AGPSize" "128" -- from what I understand, this should just be the amount of video RAM you have.&lt;/li&gt;&lt;li&gt;"EXAOptimizeMigration" "on" -- relevant only if you use EXA&lt;/li&gt;&lt;li&gt;"XAANoOffscreenPixmaps" "on" -- no idea what this is, but my card doesn't like it&lt;/li&gt;&lt;li&gt;"BIOSHotkeys" "on" -- my screen-related Fn-* hotkeys work anyway, even without this parameter&lt;/li&gt;&lt;li&gt;"AGPFastWrite" "on" -- this hangs X on my laptop (Rock Pegasus Ti)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;I put this here so I may remember to search my blog next time instead of wasting time going through random forum threads, but I hope it may be of help to fellow Radeon linuxers. All in all, KDE 4.3 is lovely, but it kinda reminded me that five years is quite a long lifespan for a laptop.&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-43377745557628682?l=blog.pythonaro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/43377745557628682/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3676448&amp;postID=43377745557628682' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/43377745557628682'/><link rel='self' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/posts/default/43377745557628682'/><link rel='alternate' type='text/html' href='http://blog.pythonaro.com/2009/11/kubuntu-karmic-koala-and-radeon-9600.html' title='Kubuntu Karmic Koala and Radeon 9600 Mobility M10 (RV350) xorg.conf magic'/><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>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3676448.post-823926064956325862</id><published>2009-11-15T20:26:00.003Z</published><updated>2009-11-15T20:26:56.448Z</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='kubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Kubuntu 9.10 / KDE 4.3.3 first impressions</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;ul&gt;&lt;li&gt;Upgrade installer choked on finding out that python2.6 was already installed. Had to fall back on hardcore dpkg commands to fix it. I understand most "upgraders" had similar issues. -1&lt;/li&gt;&lt;li&gt;Keeps complaining that it can't find my uid-identified partitions straight away (slow HAL?). Considering it eventually manages to mount them just fine (and that the uid scheme was forced upon me by a previous Kubuntu), it just seems stupid. Any idea how I could stop the nagging? Meanwhile, -1&lt;/li&gt;&lt;li&gt;Sluggish. Maybe because KWin would crash on ATI drivers and I had to switch back to the free ones. -5&lt;/li&gt;&lt;li&gt;Eyecandy is fabulous, and very consistent. Much better than Vista.+1&lt;/li&gt;&lt;li&gt;Managed to recreate my old desktop setup almost flawlessly. Most 4.0 regressions due to Plasma have finally been addressed. +1&lt;/li&gt;&lt;li&gt;Many (most?) widgets are useless. Only few of them "get" what Plasma is about. I guess this will be fixed in time. +0&lt;/li&gt;&lt;li&gt;The Widget Dashboard, once you "get it", is fantastic. Makes things like Quick Launcher absolutely redundant. +1&lt;/li&gt;&lt;li&gt;Configuration utilities have been somewhat cleaned up, in a long-overdue effort. +1, but for the love of God stop with the Gnome-like zealotry.&lt;/li&gt;&lt;li&gt;Looks like KNetworkManager won't properly manage my wifi. Somewhat balanced by forcing people (me) to rediscover the joys of full-speed cabled access. Still, -1 (and I'm being generous)&lt;/li&gt;&lt;li&gt;KPackageKit finally gives us a Qt-based alternative to Synaptic. +1&lt;/li&gt;&lt;li&gt;the gmail-plasmoid. Never found a decent counterpart for 3.5. +1&lt;/li&gt;&lt;li&gt;UI to Power Management features is finally as good as anything in the Windows world. Maybe better. +1&lt;/li&gt;&lt;li&gt;Shortcuts every-flipping-where. One day, I might even use them. +1&lt;/li&gt;&lt;li&gt;Lots of good repositories for fresh software, without having to jump through hoops. And the ppa/apt-add-repository combo is a winner. +1&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Total: +1. So I guess it was all worth. &lt;/p&gt;&lt;p&gt;(posted with this newfangled &lt;a href='http://blogilo.gnufolks.org'&gt;Bilbo / Blogilo&lt;/a&gt; thing. Could this be the day I get a decent blog-writing application?)&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-823926064956325862?l=blog.pythonaro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/823926064956325862/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3676448&amp;postID=823926064956325862' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/823926064956325862'/><link rel='self' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/posts/default/823926064956325862'/><link rel='alternate' type='text/html' href='http://blog.pythonaro.com/2009/11/kubuntu-910-kde-433-first-impressions.html' title='Kubuntu 9.10 / KDE 4.3.3 first impressions'/><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-4910833295516490746</id><published>2009-11-12T12:22:00.004Z</published><updated>2009-11-12T13:17:29.891Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='GeekDiary'/><category scheme='http://www.blogger.com/atom/ns#' term='SiliconValley'/><category scheme='http://www.blogger.com/atom/ns#' term='itsadaylikethat'/><title type='text'>Berkeley hills</title><content type='html'>(on music from  Weezer's "&lt;a href="http://www.youtube.com/watch?v=KrBx8fdEZPk"&gt;Beverley Hills&lt;/a&gt;")&lt;br /&gt;&lt;br/&gt;

Where I come from isn't all that great&lt;br /&gt;
My mailserver is a piece of crap&lt;br /&gt;
My admin scripts are a little whack&lt;br /&gt;
And my friends are just as screwy as me&lt;br /&gt;&lt;br /&gt;

I didn't go to any cool schools&lt;br /&gt;
tech startups never looked at me&lt;br /&gt;
Why should they?&lt;br /&gt;
I ain't nobody and got nothing in my webblog&lt;br /&gt;&lt;br /&gt;

Berkeley hills&lt;br /&gt;
That's where I want to be&lt;br /&gt;
Livin' round Berkeley hills&lt;br /&gt;
Berkeley hills&lt;br /&gt;
Coding like a celebrity&lt;br /&gt;
Livin' round Berkeley hills&lt;br /&gt;&lt;br /&gt;

Look at all those geeky stars&lt;br /&gt;
They're all so intelligent and smart&lt;br /&gt;
When their companies get floated&lt;br /&gt;
they get more buyers than Wal-Mart...&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3676448-4910833295516490746?l=blog.pythonaro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/4910833295516490746/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3676448&amp;postID=4910833295516490746' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/4910833295516490746'/><link rel='self' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/posts/default/4910833295516490746'/><link rel='alternate' type='text/html' href='http://blog.pythonaro.com/2009/11/berkeley-hills.html' title='Berkeley hills'/><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-7873412967616154008</id><published>2009-09-20T22:29:00.004+01:00</published><updated>2009-10-01T22:09:46.501+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='startup'/><category scheme='http://www.blogger.com/atom/ns#' term='GeekDiary'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><category scheme='http://www.blogger.com/atom/ns#' term='BobWalsh'/><title type='text'>"The Web Startup Success Guide" review, and how to tie-in better</title><content type='html'>&lt;p&gt;Yesterday, I bought Bob Walsh's latest book, &lt;a href="http://www.amazon.co.uk/gp/product/1430219858?ie=UTF8&amp;tag=subclassed-21&amp;linkCode=as2&amp;camp=1634&amp;creative=6738&amp;creativeASIN=1430219858"&gt;The Web Startup Success Guide&lt;/a&gt;&lt;img src="http://www.assoc-amazon.co.uk/e/ir?t=subclassed-21&amp;l=as2&amp;o=2&amp;a=1430219858" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;. It's the only thing I've found in "mainstream" bookshops that seemed &lt;i&gt;really&lt;/i&gt; relevant to my current project, and indeed it is.&lt;/p&gt;&lt;p&gt;As "self-help-business" books go, this is a good one: the fluff is kept low (could have done with a few less interviews maybe, especially from bloody Guy Kawasaki -- if you're thinking of starting up and don't know him already, you haven't done your homework), and there's something for everybody, with plenty of practical advice and real tools you can use. A few ones are very US-centric (like &lt;a href="http://www.mint.com"&gt;mint.com&lt;/a&gt;, which is a real shame), but that's par for the course in this area.&lt;/p&gt;
&lt;p&gt;You can also see that Walsh practices what he preaches, and that's always a good sign. Minutes after I twitted on the subject, he "@replied"; he really monitors social media for marketing purposes as much as he says you should do.&lt;/p&gt;
&lt;p&gt;Walsh also couldn't miss the chance to pimp &lt;i&gt;his&lt;/i&gt; latest shot at startupping, &lt;a href="http://www.startuptodo.com"&gt;StartupToDo.com&lt;/a&gt;; after all, he's a good friend of Joel Spolsky, a master of self-publicity. Clearly the book and the site are part of a coordinated marketing effort. Nothing wrong with that: the book is NOT simply a brochure for the site, it's all good content, probably coming from the extensive research Walsh did while building the site as well as his personal experience (which was also enshrined in his previous effort, the famous &lt;a href="http://www.amazon.co.uk/gp/product/1590596013?ie=UTF8&amp;tag=subclassed-21&amp;linkCode=as2&amp;camp=1634&amp;creative=6738&amp;creativeASIN=1590596013"&gt;Micro-ISV: from Vision to Reality&lt;/a&gt;&lt;img src="http://www.assoc-amazon.co.uk/e/ir?t=subclassed-21&amp;l=as2&amp;o=2&amp;a=1590596013" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;). What I've found a bit disappointing was that the effort is missing the very last bit. StartupToDo is due to launch next week, but has been in private beta (invite-only) for a while now. The book was published in July. It would have been cool for readers to get some sort of password, a "backdoor" to the beta program, so they could sign up while they're still fired up from the book. For two months, "faithful" followers were just able to leave an email to be reminded when the real launch would actually happen. I'm lucky as I have to wait just a few days, but in the age of Internet-time and instant gratification, that's still a lot. So, Bob (and whoever goes for the next book/website combo): you should try to increase your &lt;i&gt;conversion rate&lt;/i&gt; by making sure that readers can get in straight away.&lt;/p&gt;
&lt;p&gt;&lt;span style="color:red;"&gt;UPDATE:&lt;/span&gt; StartupToDo.com is now live, as Bob correctly points out below. I'm "toyg" on the site, feel free to "friend me"! I've wandered a bit around the site already... lots of good info, recommendations and links which I'm still trying to get my head around. I'll post a better review later.&lt;/p&gt;

&lt;p&gt;And now, back to plotting &lt;i&gt;my&lt;/i&gt; startup...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3676448-7873412967616154008?l=blog.pythonaro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/7873412967616154008/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3676448&amp;postID=7873412967616154008' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/7873412967616154008'/><link rel='self' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/posts/default/7873412967616154008'/><link rel='alternate' type='text/html' href='http://blog.pythonaro.com/2009/09/web-startup-success-guide-review-and.html' title='&quot;The Web Startup Success Guide&quot; review, and how to tie-in better'/><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-7444468204842551296</id><published>2009-09-19T00:51:00.003+01:00</published><updated>2009-09-19T01:00:42.296+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GeekDiary'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='diemicrosoftdie'/><title type='text'>oops I did it again</title><content type='html'>&lt;p&gt;Designed a very simple website. Looks wonderful in Firefox 3, Opera 9, Chrome 4, Safari 3, Konqueror 3. Yay, ready to upload then! Wait, I think I forgot something... oh yes, Internet Explorer! I'm working on Linux after all. Let's see... IE6: looks shit but who cares, nobody uses it anymore. IE7: looks marginally less shit, but still shit. Damn. Back to the css... this is why I left webplumbing.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3676448-7444468204842551296?l=blog.pythonaro.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/7444468204842551296/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3676448&amp;postID=7444468204842551296' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3676448/posts/default/7444468204842551296'/><link rel='self' type='application/atom+xml' href='http://blog.pythonaro.com/feeds/posts/default/7444468204842551296'/><link rel='alternate' type='text/html' href='http://blog.pythonaro.com/2009/09/oops-i-did-it-again.html' title='oops I did it again'/><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>2</thr:total></entry></feed>
