<?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-23453123</id><updated>2011-09-08T18:08:38.046+10:00</updated><category term='linux'/><category term='scanner'/><category term='sysadmin'/><category term='printer'/><category term='kde'/><category term='kde4'/><title type='text'>Clarence Dang's Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>52</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-23453123.post-4433557011688593029</id><published>2007-08-26T18:43:00.000+10:00</published><updated>2007-08-26T18:58:42.059+10:00</updated><title type='text'>Laptop dead?</title><content type='html'>I was doing KDE programming on a 3 year old Celeron 2.2GHz laptop late Thursday night.  I finished and turned it off -- nothing out of the ordinary.&lt;br /&gt;&lt;br /&gt;The next evening I tried turning it on.  The "on" light lit up and the fan started spinning.  All was good until 5 seconds later: it just shut off - the light went off and the fan stopped.  A few seconds later it turned on again.  It kept looping in this cycle.&lt;br /&gt;&lt;br /&gt;If anyone has an idea of what this is or whether this can be fixed, I'd be very grateful.  I have lots of uncommitted code sitting there so if the laptop's dead, I'll have to move the hard disk to another (less powerful) laptop, at least to get my code off.&lt;br /&gt;&lt;br /&gt;Nothing is displayed on the screen so it's not even getting to the POST tests.  There's no beeping whatsoever.  And there's no smoke :)&lt;br /&gt;&lt;br /&gt;I opened up the laptop today hoping to find something loose or abnormal but I can't see anything wrong with it.&lt;br /&gt;&lt;br /&gt;This laptop has had a habit of getting up to 90-91 (ninety to ninety-one) degrees celcius during compiles (before Linux shut it down), if I didn't prop it up to give it more ventilation, so maybe it finally fried?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-4433557011688593029?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/4433557011688593029/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=4433557011688593029' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/4433557011688593029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/4433557011688593029'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2007/08/laptop-dead.html' title='Laptop dead?'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-871547017855522174</id><published>2007-05-31T21:45:00.000+10:00</published><updated>2007-05-31T21:53:56.674+10:00</updated><title type='text'>Offline GMail?</title><content type='html'>With today's announcement of &lt;a href="http://code.google.com/apis/gears/index.html"&gt;Google Gears&lt;/a&gt; - "an open source browser extension that lets developers create web applications that can run offline" - I'd like to make a somewhat obvious prediction that GMail will feature a disconnected mode within, say, 2 years.&lt;br /&gt;&lt;br /&gt;It looks like Google is seriously entering the desktop space.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-871547017855522174?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/871547017855522174/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=871547017855522174' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/871547017855522174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/871547017855522174'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2007/05/offline-gmail.html' title='Offline GMail?'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-8378007958169176662</id><published>2007-05-01T11:37:00.000+10:00</published><updated>2007-05-01T11:47:38.570+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Linux pids wrapping</title><content type='html'>I have this old "ps waux" textdump:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Thu Jun 2 22:55:56 EDT 2005 i686 i686 i386 GNU/Linux&lt;br /&gt; 23:29:59 up  9:35, 22 users,  load average: 3.47, 1.13, 0.44&lt;br /&gt;USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND&lt;br /&gt;[...]&lt;br /&gt;clarence 32522  0.0  0.7   4516  1616 pts/18   Ss   22:33   0:00 /bin/bash&lt;br /&gt;clarence 32544  0.0  1.3   9100  2992 pts/18   T    22:34   0:01 vim test2.cc&lt;br /&gt;clarence   729  0.9  6.0  36360 13516 ?        S    23:27   0:01 konsole [kdeinit]&lt;br /&gt;clarence   730  0.0  0.6   4516  1508 pts/19   Ss   23:27   0:00 /bin/bash&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;I still cannot figure out how I managed to do that.  As far as I can see, I was only using OpenOffice.org Writer, viewing webpages and had compiled KDE4 earlier in the day.  The machine had not even been up for 10hrs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-8378007958169176662?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/8378007958169176662/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=8378007958169176662' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/8378007958169176662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/8378007958169176662'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2007/05/linux-pids-wrapping.html' title='Linux pids wrapping'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-6600106362320406010</id><published>2007-05-01T11:28:00.000+10:00</published><updated>2007-05-01T11:33:52.602+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='kde4'/><category scheme='http://www.blogger.com/atom/ns#' term='kde'/><title type='text'>Mimetypes not working for you in KDE4?</title><content type='html'>If KDE4 mimetypes aren't working, type "kbuildsycoca4" instead of "kbuildsycoca".  I believe this change allows for KDE3 and KDE4 apps to coexist.  I thought I'd share this since it took me an embarrassingly long amount of time to figure it out :)&lt;br /&gt;&lt;br /&gt;I also recall someone saying that the "shared-mime-info" package had to be a certain version.  So I found a Fedora RPM for 0.17 and upgraded to that (I know that RPM is old but it was the only one I could find quickly).  Not sure if it was required though.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-6600106362320406010?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/6600106362320406010/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=6600106362320406010' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/6600106362320406010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/6600106362320406010'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2007/05/mimetypes-not-working-for-you-in-kde4.html' title='Mimetypes not working for you in KDE4?'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-6748262046190586939</id><published>2007-04-23T23:23:00.000+10:00</published><updated>2007-04-24T16:22:06.365+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scanner'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='printer'/><category scheme='http://www.blogger.com/atom/ns#' term='sysadmin'/><title type='text'>Using a HP PSC 1315 as a scanner under Fedora Core 4</title><content type='html'>&lt;b&gt;Update (2007-04-24):&lt;/b&gt; &lt;font color="green"&gt;I've been told (see the comments) that the Linux support works out-of-the-box these days with newer distros.  Also, I've got nothing against hplip - it's just that hpoj was the first one I got working with such an old distro.  I ran into numerous difficulties setting up this scanner because of conflicting information on the internet and also instructions that just didn't seem to work for my setup.&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;The HP PSC 1315 stands for "Hewlett-Packard (all-in-one) Printer-Scanner-(photo)Copier".  It's a  USB colour inkjet and was dirt cheap considering all the functionality - less than $100, years ago.  I do not recommend this hardware (see bottom of post).&lt;br /&gt;&lt;br /&gt;Now I was interested in getting scanning to work under my old Fedora Core 4 system.  The scanner supports 600 DPI and this is more than I need.   After much googling and conflicting information, a search string of &lt;a href="http://www.google.com/search?q=hp+psc+fedora&amp;ie=UTF-8&amp;oe=UTF-8"&gt;hp psc fedora&lt;/a&gt; got me to &lt;a href="http://www.linuxquestions.org/questions/showthread.php?t=275259"&gt;these working instructions&lt;/a&gt;.  This uses the obsolete "hpoj" driver, instead of &lt;a href="http://hpinkjet.sourceforge.net/hplip_readme.html"&gt;hplip&lt;/a&gt;'s "hpaio" driver, but I don't mind since kooka and xsane both work now.  Thanks very much to "zparihar" on linuxquestions.org for that useful post.&lt;br /&gt;&lt;br /&gt;I can think of only 2 things that I have found harder to install under Linux: support for the Aetheros WPA wireless and an analog joystick.  I won't even attempt to set up the printing for the time being since I don't need that capability.&lt;br /&gt;&lt;br /&gt;By the way, I initially found this &lt;a href="http://gentoo-wiki.com/HOWTO_Installing_USB_Scanner"&gt;HOWTO Install a USB Scanner&lt;/a&gt; guide on the Gentoo wiki, which looks like it could be useful for other scanner models.  I gave up on it since it looked too complicated by the time it asked me to add a 03f0:3f11 line (printer USB ID given by &lt;code&gt;lsusb&lt;/code&gt;) to &lt;code&gt;/etc/hotplug/usb/libsane.usermap&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;I strongly recommend against buying this printer given that Linux support was not out-of-the-box and also given that HP's driver for Windows is horrendous.  Regarding the latter, sometimes print jobs go nowhere and deleting them from the print queue does nothing, blocking all future print jobs.  Unplugging the USB cable is another sure way of preventing one from deleting print jobs even after reattaching the cable.  Some combination of rebooting, reinstalling the printer under a different USB port etc. (I still haven't found a reliable way) is required to delete the stuck print jobs.  To make things worse, the "HP Director" application would quit silently after the IE7 upgrade and after applying a patch from HP, it now starts but the buttons don't work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-6748262046190586939?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/6748262046190586939/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=6748262046190586939' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/6748262046190586939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/6748262046190586939'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2007/04/using-hp-psc-1315-as-scanner-under.html' title='Using a HP PSC 1315 as a scanner under Fedora Core 4'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-117625236339034533</id><published>2007-04-11T09:28:00.000+10:00</published><updated>2007-04-11T10:46:03.403+10:00</updated><title type='text'>Sydney meeting</title><content type='html'>As &lt;a href="http://www.sebruiz.net/242"&gt;Seb Ruiz writes&lt;/a&gt;, we met up with &lt;a href="http://www.kdedevelopers.org/blog/102"&gt;Brad Hards&lt;/a&gt; last night in the city.  See Seb's blog for photos.&lt;br /&gt;&lt;br /&gt;Some interesting KDE trivia that was shared around was that:&lt;br /&gt;&lt;br /&gt;* &lt;a href="http://kopete.kde.org/"&gt;Kopete&lt;/a&gt; is apparently pronounced &lt;i&gt;cop-it-tay&lt;/i&gt;, not &lt;i&gt;co-pete&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;* &lt;a href="http://www.koffice.org/krita/"&gt;Krita&lt;/a&gt; can be read as &lt;i&gt;kri-ta&lt;/i&gt; instead of &lt;i&gt;krit-a&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-117625236339034533?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/117625236339034533/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=117625236339034533' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/117625236339034533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/117625236339034533'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2007/04/sydney-meeting.html' title='Sydney meeting'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-117330511578022147</id><published>2007-03-08T08:47:00.000+11:00</published><updated>2007-04-09T22:28:45.443+10:00</updated><title type='text'>Going to the ACM programming contest in Tokyo</title><content type='html'>&lt;font color="red"&gt;Update:&lt;/font&gt; &lt;font color="green"&gt;We came &lt;a href="http://icpc.baylor.edu/icpc/Finals/Results-2007/standings-2007.htm"&gt;equal 44th&lt;/a&gt; out of 88.   While it's generally invalid to draw certain comparisons in such competitions (since you can jump a large of number of rankings by debugging just an extra problem), I'll draw one anyway: we equalled CMU and beat Harvard :)  However, pretty much all of the other unis I listed below beat us easily.  The University of Auckland is a deserving South Pacific Champion with a Bronze Medal.  &lt;br /&gt;&lt;br /&gt;Overall, I'm happy that we made it this far and I'm happy with this year's performance against an elite set of world class competitors.  On the non-technical side of things, we had a great time in Tokyo and at the Disney Sea theme park, paid for by IBM.  It is on this high note and after nearly 10 years of contests, that I'm retiring from programming competitions.&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I've been a bit quiet these last few months as I've been practising for &lt;a href="http://icpc.baylor.edu/icpc/finals/default.htm"&gt;this contest&lt;/a&gt;.  Two &lt;a href="http://icpc.baylor.edu/icpc/finals/Roster.asp"&gt;teams&lt;/a&gt; are representing Australia this year - one from the &lt;a href="http://www.adelaide.edu.au/"&gt;University of Adelaide&lt;/a&gt; (the defending South Pacific Champion) and the other, the &lt;a href="http://www.cse.unsw.edu.au/"&gt;University of New South Wales&lt;/a&gt; (one of the members being yours truly).&lt;br /&gt;&lt;br /&gt;It will be interesting to see how we'll fare against the Chinese, Russians and MIT, CMU, Harvard, Waterloo etc. considering that their teams were presumably picked from a multi-tiered qualification process (and reportedly, the Chinese education system also has &lt;i&gt;high schools&lt;/i&gt; - not just universities - dedicated to programming!), while the qualification process for the South Pacific consists of a &lt;a href="http://www.sppcontest.org/"&gt;single competition&lt;/a&gt; :)  In any case, we hope to improve on the performance of recent South Pacific teams.&lt;br /&gt;&lt;br /&gt;Anyway, after all this craziness / intense competition is over, I hope to finally, finally, &lt;b&gt;finally&lt;/b&gt; get back to opensource programming (although, consistently, every year, I seem to find a different distraction).  So in a sense, I wish the competition was over more quickly :)&lt;br /&gt;&lt;br /&gt;Sayoonara!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-117330511578022147?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/117330511578022147/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=117330511578022147' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/117330511578022147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/117330511578022147'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2007/03/going-to-acm-programming-contest-in.html' title='Going to the ACM programming contest in Tokyo'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-116701140529775829</id><published>2006-12-25T12:12:00.000+11:00</published><updated>2008-02-09T21:20:46.709+11:00</updated><title type='text'>Another script: revision controlled OpenOffice.org documents</title><content type='html'>I mentioned that I &lt;a href="http://clarencedang.blogspot.com/2006/10/openofficeorg-for-documents.html"&gt;used OpenOffice.org for my thesis&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;However, a problem is that binary files, like .ODT, don't work well with revision control systems.&lt;br /&gt;&lt;br /&gt;Firstly, they aren't diff-able so you have to also keep a .TXT file, in the repository, in sync with the .ODT.  This is error-prone and the .TXT diffs don't reflect formatting changes. &lt;br /&gt;&lt;br /&gt;Secondly, because OpenOffice.org files are compressed (.ZIP format), the binary deltas that revision control systems (e.g. SVN) use to save space fall apart for even the tiniest of changes to documents, due to the characteristics of compression.&lt;br /&gt;&lt;br /&gt;But thanks to the second anonymous commenter on that blog post, I came up with a new way of revision-controlling OpenOffice.org documents:&lt;br /&gt;&lt;br /&gt;What I now do is keep the unzipped OpenOffice.org document in revision control, not the binary .ODT file.  This means that I can diff the &lt;code&gt;content.xml&lt;/code&gt; between revisions, not bother keeping a .TXT file in sync and avoid SVN's space-inefficient binary deltas since I'm really only keeping text files in the repository (more on this later).&lt;br /&gt;&lt;br /&gt;If you checkout such an unzipped OpenOffice.org document from SVN, you can use my &lt;a href="http://websvn.kde.org/kde/*checkout*/branches/kolourpaint/control/devel_doc/Makefile?revision=723884&amp;amp;pathrev=723884"&gt;magic Makefile&lt;/a&gt; to reconstruct the .ODT from these unzipped contents by typing &lt;code&gt;make&lt;/code&gt;.  It's just like adding water to milk powder.&lt;br /&gt;&lt;br /&gt;And every time you make a change to the .ODT file, the &lt;em&gt;same&lt;/em&gt; &lt;code&gt;make&lt;/code&gt; command works the other way and updates the unzipped contents to match the changed .ODT.  Then you can &lt;code&gt;svn commit&lt;/code&gt; a new revision.&lt;br /&gt;&lt;br /&gt;Caveats:&lt;br /&gt;&lt;br /&gt;* &lt;font color="red"&gt;Warning:&lt;/font&gt; &lt;code&gt;svn status&lt;/code&gt; will not report changes to the .ODT, until you type &lt;code&gt;make&lt;/code&gt;.  Be careful or you might think that your checkout has no local changes and you decide to delete the checkout to "save space"!  A "foolproof" way to get around this problem is to skip the &lt;code&gt;svn propedit svn:ignore .  [and type kolourpaint-developer-guide.odt]&lt;/code&gt; step.&lt;br /&gt;&lt;br /&gt;* It actually does store a binary file in revision control, namely &lt;code&gt;Thumbnails/thumbnail.png&lt;/code&gt;.  I haven't dared try to work around this though, for fear that OpenOffice.org won't like me playing with it.&lt;br /&gt;&lt;br /&gt;* Some files such as &lt;code&gt;layout-cache&lt;/code&gt; and &lt;code&gt;settings.xml&lt;/code&gt;, while not binary unlike &lt;code&gt;Thumbnails/thumbnail.png&lt;/code&gt;, change on every save and probably shouldn't be revision controlled either.&lt;br /&gt;&lt;br /&gt;* You can't have 2 people working on the same document as merging two &lt;code&gt;content.xml&lt;/code&gt; files is asking for trouble.  But at least you can diff between revisions.&lt;br /&gt;&lt;br /&gt;* A lot of lines in &lt;code&gt;content.xml&lt;/code&gt; may change in response to even a small layout change due to lots of tags changing control numbers.&lt;br /&gt;&lt;br /&gt;If you try this scheme, please let me know how it goes.&lt;br /&gt;&lt;br /&gt;BTW, in the end, &lt;a href="http://www.disy.cse.unsw.edu.au/theses_public/06/clarenced.pdf"&gt;my thesis&lt;/a&gt; turned out to be 192 pages (probably, about 100 pages too long :)).  It was on porting the &lt;a href="http://www.ertos.nicta.com.au/research/l4/"&gt;L4 microkernel&lt;/a&gt; to processors without virtual memory, specifically the Blackfin processor.  It was written in a rush so apologies for the awful number of spelling and grammatical errors!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-116701140529775829?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/116701140529775829/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=116701140529775829' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/116701140529775829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/116701140529775829'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/12/another-script-revision-controlled.html' title='Another script: revision controlled OpenOffice.org documents'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-116700870308076385</id><published>2006-12-25T11:55:00.000+11:00</published><updated>2006-12-25T12:05:03.106+11:00</updated><title type='text'>A few scripts that could be useful</title><content type='html'>I just uploaded some &lt;a href="http://websvn.kde.org/branches/work/~dang/scripts/"&gt;scripts&lt;/a&gt; I've had lying around for months.  Hope they're useful:&lt;br /&gt;&lt;br /&gt;1. &lt;a href="http://websvn.kde.org/*checkout*/branches/work/~dang/scripts/kbus"&gt;kbus&lt;/a&gt;: starts the DBUS server since it's not done automatically.  Sure beats typing &lt;code&gt;eval `dbus-launch --auto-syntax`&lt;/code&gt; and copying environment variables all the time.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update&lt;/b&gt;: It looks like &lt;a href="http://wiki.kde.org/tiki-index.php?page=Porting+KDELibs+to+D-Bus"&gt;DBUS&lt;/a&gt; has an auto-starting feature now, via &lt;code&gt;--ensure&lt;/code&gt;, so this script is no longer needed).&lt;br /&gt;&lt;br /&gt;2. &lt;a href="http://websvn.kde.org/*checkout*/branches/work/~dang/scripts/svnupfast"&gt;svnupfast&lt;/a&gt;: an "svn up" that takes half the bandwidth.&lt;br /&gt;&lt;br /&gt;3. &lt;a href="http://websvn.kde.org/*checkout*/branches/work/~dang/scripts/svn-import-changes"&gt;svn-import-changes&lt;/a&gt;: a poor person's distributed revision control system.&lt;br /&gt;&lt;br /&gt;Full details and "sort of" docs &lt;a href="http://lists.kde.org/?l=kde-commits&amp;m=116700647000201&amp;w=2"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-116700870308076385?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/116700870308076385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=116700870308076385' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/116700870308076385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/116700870308076385'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/12/few-scripts-that-could-be-useful.html' title='A few scripts that could be useful'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-116700813848618774</id><published>2006-12-25T11:36:00.000+11:00</published><updated>2006-12-25T11:55:38.506+11:00</updated><title type='text'>Re: We’ve got a couple of feet in our sights</title><content type='html'>Regarding a few things Boudewijn Rempt wrote about the &lt;a href="http://www.valdyas.org/fading/index.cgi/software/foot.html"&gt;look of KDE&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;1. I actually thought Keramik was stunning during the early builds of KDE 3.1 - it was the perfect balance between good eye candy and not being so noticeable that it got in the way.  Unfortunately, I believe it changed in the final KDE 3.1 (please correct me if I'm wrong) and the gradients became too striking.&lt;br /&gt;&lt;br /&gt;I liked it in combination with KDE 3.1's bluish icon set, which was sadly replaced in KDE 3.2.&lt;br /&gt;&lt;br /&gt;I still use Keramik with the KDE 2 colour scheme and I like it better than Plastik (which is still a very good theme).   &lt;br /&gt;&lt;br /&gt;2. The window colour changing on focus switches in KDE 4 is a feature of the style, I believe.  It is really slow indeed on my old graphics cards as well and for a while I thought it was a palette bug, until I realised that it was supposed to be highlighting the focused window.&lt;br /&gt;&lt;br /&gt;I'm sure this will be fixed eventually but I'd still expect KDE 4 to be a tad slower than KDE 3 because of Qt4's automatic double buffering.  But I think this is a reasonable price to pay for less flicker.&lt;br /&gt;&lt;br /&gt;On a side note, for those of you who are wondering, that automatic double buffering is actually done per top-level window, rather than per widget (I looked inside the Qt code for this and it's actually quite clever).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-116700813848618774?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/116700813848618774/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=116700813848618774' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/116700813848618774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/116700813848618774'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/12/re-weve-got-couple-of-feet-in-our.html' title='Re: We’ve got a couple of feet in our sights'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-116605773880768867</id><published>2006-12-14T11:45:00.000+11:00</published><updated>2006-12-14T12:04:25.193+11:00</updated><title type='text'>Why UI messages must be carefully worded</title><content type='html'>I got this email from the university today:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Your overall [average mark]: 87.0&lt;br /&gt;&lt;br /&gt;There were no outstanding results at the time of this calculation.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Apparently, none of my results are any good ("outstanding").  I feel insulted...&lt;br /&gt;&lt;br /&gt;... but obviously, that's not what they meant.  They should have used "unfinalised" instead of "outstanding" to be unambiguous.&lt;br /&gt;&lt;br /&gt;And no, 87.0 is not my real mark.  I'm not going to post the real mark here because there are some fellow students running around uni trying to find out my marks, for god knows what reason, so no need to make it easy for them :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-116605773880768867?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/116605773880768867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=116605773880768867' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/116605773880768867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/116605773880768867'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/12/why-ui-messages-must-be-carefully.html' title='Why UI messages must be carefully worded'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-116505959487461218</id><published>2006-12-02T22:18:00.000+11:00</published><updated>2006-12-02T22:39:54.896+11:00</updated><title type='text'>A fix for Radeon Xpress lockups under X.org</title><content type='html'>I'm writing this article so that people googling can find the fix.&lt;br /&gt;&lt;br /&gt;I just helped some fellow UNSW students fix Linux hanging when performing a graphical login (no, even the magic sysrq keys I enabled did not help).  They were running X.org 6.8.2 (Fedora Core 4) with an ATI X600 graphics card (Dell Optiplex GX620).&lt;br /&gt;&lt;br /&gt;I solved this by switching from the buggy opensource &lt;code&gt;radeon&lt;/code&gt; driver to the generic VESA driver i.e. in &lt;code&gt;/etc/X11/xorg.conf&lt;/code&gt; under &lt;code&gt;Section "Device"&lt;/code&gt;, I changed:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;code&gt;Driver      "radeon"&lt;/code&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;to&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;code&gt;Driver      "vesa"&lt;/code&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;There are also 2 other solutions that apparently work:&lt;br /&gt;&lt;br /&gt;1. Richard Zach suggests &lt;a href="http://www.ucalgary.ca/~rzach/logblog/2005/10/geek-news-suse-linux-100-on-dell.html"&gt;using the binary ATI driver&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;2. Those students found that the opensource &lt;code&gt;radeon&lt;/code&gt; driver worked if they updated to X.org X11R7 (Fedora Core 5) [*].  Unfortunately, they need to run some closed-source software that only supports Fedora Core 4.  Furthermore, this upgrade does not seem to help with an ATI X200, which experiences similar lockups.&lt;br /&gt;&lt;br /&gt;[*] Does anyone know the exact version X.org number?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-116505959487461218?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/116505959487461218/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=116505959487461218' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/116505959487461218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/116505959487461218'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/12/fix-for-radeon-xpress-lockups-under.html' title='A fix for Radeon Xpress lockups under X.org'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-116228611460740777</id><published>2006-10-31T20:05:00.000+11:00</published><updated>2006-10-31T20:15:15.316+11:00</updated><title type='text'>JoJo - Too Little Too Late</title><content type='html'>I want to avoid sounding like a derganed teenage &lt;a href="http://en.wikipedia.org/wiki/JoJo"&gt;JoJo&lt;/a&gt; fan but I have to admit that JoJo's new single &lt;a href="http://en.wikipedia.org/wiki/Too_little_too_late"&gt;Too Little Too Late&lt;/a&gt; is pretty catchy pop and sounds remarkably similar to her original single, &lt;a href="http://en.wikipedia.org/wiki/Leave_(Get_Out)"&gt;Leave (Get Out)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;You can &lt;a href="http://boss.streamos.com/wmedia/labels/universalmotown/blackground/jojo/video/jojo_toolittletoolate.asx"&gt;watch the video&lt;/a&gt; as linked off &lt;a href="http://www.jojoonline.com/"&gt;her website&lt;/a&gt;.  Will buy the track once it comes out here.&lt;br /&gt;&lt;br /&gt;On the other hand, I dislike all her other songs as they have too much of an R&amp;B feel to them.  So no, I'm not one of those diehard fans :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-116228611460740777?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/116228611460740777/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=116228611460740777' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/116228611460740777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/116228611460740777'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/10/jojo-too-little-too-late.html' title='JoJo - Too Little Too Late'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-116228443321334208</id><published>2006-10-31T19:37:00.000+11:00</published><updated>2006-10-31T19:47:13.336+11:00</updated><title type='text'>Rent movies, don't buy them</title><content type='html'>In Sydney, a movie DVD costs about $US15 to $US22.  A rental for a week costs about $US3 to $US5.&lt;br /&gt;&lt;br /&gt;Therefore, unless you intend to watch the same movie on, at least, 3 separate occasions - each spaced at least 1 week apart - it makes no sense to buy that movie.  But who actually watches a movie that many times?&lt;br /&gt;&lt;br /&gt;Therefore, it makes no sense to buy movies instead of renting them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-116228443321334208?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/116228443321334208/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=116228443321334208' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/116228443321334208'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/116228443321334208'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/10/rent-movies-dont-buy-them.html' title='Rent movies, don&apos;t buy them'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-116114167865224397</id><published>2006-10-18T13:11:00.000+10:00</published><updated>2006-10-18T13:21:21.620+10:00</updated><title type='text'>A way to reduce stress</title><content type='html'>Assumptions:&lt;br /&gt;1. You carry a mobile phone in your pocket.&lt;br /&gt;2. You spend too much time checking your watch to see if you have to be at your next appointment, and this causes anxiety.&lt;br /&gt;&lt;br /&gt;Method:&lt;br /&gt;1. Do not wear a watch.&lt;br /&gt;2. Set alarms on your mobile phone to warn you of appointments.&lt;br /&gt;&lt;br /&gt;Justification:&lt;br /&gt;1. As reaching into your pocket to check the time on your phone is highly inconvenient, you will check the time less often, compared to wearing a watch.&lt;br /&gt;2. You no longer poll for appointments - your mobile phone alarm generates interrupts instead.  This is far more efficient and no polling (i.e. no checking of the time) reduces stress.&lt;br /&gt;&lt;br /&gt;Auxiliary Benefits:&lt;br /&gt;* You do not have to buy a watch!&lt;br /&gt;&lt;br /&gt;Notes:&lt;br /&gt;If there is something else in the room that displays the current time (e.g. wall clock or computer's taskbar applet), the effectiveness of this method is reduced.  However, you still get the benefit of being more relaxed as you have the knowledge that the phone alarm will always warn you about your next appointment, in time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-116114167865224397?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/116114167865224397/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=116114167865224397' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/116114167865224397'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/116114167865224397'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/10/way-to-reduce-stress.html' title='A way to reduce stress'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-116090480344455166</id><published>2006-10-15T18:40:00.000+10:00</published><updated>2006-10-15T19:33:23.460+10:00</updated><title type='text'>KDE's 10th birthday</title><content type='html'>The &lt;a href="http://dot.kde.org/1160834616/"&gt;Dot story&lt;/a&gt; tells all.&lt;br /&gt;&lt;br /&gt;KDE's certainly changed my life in more ways than one:&lt;br /&gt;&lt;br /&gt;A. I get a highly-configurable desktop that - apart from hardware integration and software installation issues - absolutely kicks Windows or Mac OS X in the face:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Konqueror is an incredible web-browser that loads, responds and renders &lt;i&gt;far&lt;/i&gt; faster than Firefox/Linux and actually &lt;i&gt;integrates&lt;/i&gt; with the desktop.  In fairness, I do still use Firefox/IE for those more stubborn websites.&lt;br /&gt;&lt;br /&gt;KMail is my email client of choice - friendly and does threading correctly, which I cannot say about Outlook.&lt;br /&gt;&lt;br /&gt;KWrite is the model of how UNIX text editors should be - easy-to-use, while still having power features like syntax highlighting.  None of the ESC, beep, colon, w, oops I left caps lock on, behaviour of ViM.  And none of the Emacs operating system's crazy shortcuts, nor games (yes, literally; I used to spend far too much time talking to psychiatrist app they had in there :)).  My favourite productivity boosting feature has got to be "View / New Window".&lt;br /&gt;&lt;br /&gt;Konsole and its tabs and convenient Shift + {Left, Right} for switching tabs and Shift + {Up, Down} for scrolling by one line go well with the UNIX terminal's Shift + {PgUp, PgDn} for scrolling.  The power of the UNIX command line is the perfect complement to the ease-of-use of the KDE GUI.&lt;br /&gt;&lt;br /&gt;But my favourite app would have to be KTimeMon, the only clear and concise system-monitoring taskbar applet in existence.&lt;br /&gt;&lt;br /&gt;And, Amarok, a media player that actually cares about playlists and gives context about the current song or artist.  Having said that, it is a bit unstable at times and I wished it played video (else it's not a "_multi_media" player).&lt;br /&gt;&lt;br /&gt;And of course, KMix.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Most importantly, it's all opensource and free (in terms of speech &lt;i&gt;and&lt;/i&gt; beer) so it will always be around.&lt;br /&gt;&lt;br /&gt;B. On the developer side of things, hacking on KDE over the last 5 years has taught me more about developing software - heavier C++ than I was used to, revision control, listening to users, UI design bug management, organisation, release processes, highly collaborative and distributed development, support, effective email communication, team management, the list goes on - than I have learnt &lt;i&gt;anywhere else, even university&lt;/i&gt;.  I still see closed-source companies that do not understand &lt;i&gt;any&lt;/i&gt; of the above.&lt;br /&gt;&lt;br /&gt;KDE is wonderful because it brings together the best software development practices and the most passionate people to create a kick-arse, opensource desktop environment that users love and a community where people meet, learn from each other and develop all kinds of skills.&lt;br /&gt;&lt;br /&gt;It's a bit scary that I've been hanging around for half of KDE's existence.  I started with KOffice filters and remember how friendly people like David Faure and Nicolas Goutte were in helping to get me up to speed.  I moved on to write KolourPaint, touched other bits and pieces in KDE but became relatively inactive due to university commitments.  But every minute I've been there, KDE's been one of the most rewarding things I've ever been involved in.  As bonus, next year I'll be graduating and only working part-time after that, so I should have plenty of time to work on KDE.&lt;br /&gt;&lt;br /&gt;Finally, congrats to everyone who has contributed to KDE's success and I'm sure KDE will only get bigger and better.  Cheers!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-116090480344455166?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/116090480344455166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=116090480344455166' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/116090480344455166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/116090480344455166'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/10/kdes-10th-birthday.html' title='KDE&apos;s 10th birthday'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-116090154870146442</id><published>2006-10-15T18:08:00.000+10:00</published><updated>2006-10-15T18:39:08.736+10:00</updated><title type='text'>OpenOffice.org for documents</title><content type='html'>I'm writing my thesis in OpenOffice.org.  I vowed a few years ago never to learn LaTeX because the whole idea of spending time writing formatting commands, rather than document content, is so last decade (or maybe the one before that?).  Yes \{to_you_too.&lt;br /&gt;&lt;br /&gt;For a while, I had used &lt;a href="http://www.lyx.org/"&gt;LyX&lt;/a&gt; which, apart from having been started by KDE founder, Matthias Ettrich, is a WYSIWYM ('M' means "mean" i.e. document structure not formatting) document editor, that importantly &lt;i&gt;generates&lt;/i&gt; LaTeX.  The great thing is you can have your cake and eat it too - have the benefits of interactive WYSIWYG editing but also produce nice-looking LaTeX.&lt;br /&gt;&lt;br /&gt;I found the interface to be a bit clumsy (e.g. "Edit / Paste External Selection" and the overly fast scrollbar) so resorted to writing all the text in KWrite before dumping it into LyX for formatting.  But after a while, things just got too irritating - like the lack of a key shortcut for the "type of text" (e.g. "Standard" or "Section" or "Subsection") or when it generates uncompilable LaTeX (when I tried to force blank lines or add images).  And if I changed the text in LyX, I'd have to synchronise the .TXT too.&lt;br /&gt;&lt;br /&gt;So I retreated back to OpenOffice.org Writer.  LaTeX people scoff at such WYSIWYG editors but with paragraph, character and page styles (Format / Styles and Formatting (F11)) available with just a double click (or none at all, if you've setup "Next Style" correctly), I don't see why.  You also get the benefits of WYSIWYM, a reasonable user interface and importantly, an easy way to override the formatting if necessary (use RMB / Default Formatting to revert an override).  It doesn't generate LaTeX but the output is good enough for me.&lt;br /&gt;&lt;br /&gt;Another really handy feature, if you use headings, is the document outline viewer (Edit / Navigator (F5)).&lt;br /&gt;&lt;br /&gt;Of course, the binary .ODT is no good for meaningful SVN or CVS diffs.  Unzipping it won't help since the XML for the whole document is on, like, 2 lines.  So what I do before I commit is I always save a .TXT version for diff'ing purposes.  Works great except that the diff won't show formatting changes.  Also, it's important after saving to .TXT to immediately resave back to .ODT before you forget and lose your next set of changes.&lt;br /&gt;&lt;br /&gt;Yes, it's slow.  Yes, it crashes at the most importune times.  But it's opensource, its feature set is sufficient for all of my document editing and the .DOC filters are pretty good.  And I just submitted my 106 page thesis draft on Friday.  Saves me from learning LaTeX, thanks :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-116090154870146442?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/116090154870146442/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=116090154870146442' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/116090154870146442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/116090154870146442'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/10/openofficeorg-for-documents.html' title='OpenOffice.org for documents'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-116089965818768571</id><published>2006-10-15T18:00:00.000+10:00</published><updated>2006-10-15T18:07:38.200+10:00</updated><title type='text'>The fastest way to quit acroread under Linux is...</title><content type='html'>... killall -9 acroread OR Ctrl+Alt+Esc.  It's instant.&lt;br /&gt;&lt;br /&gt;On the other hand, File / Exit, when a large document is open, takes forever and drives the disk light nuts for maybe a minute - like most laptops, this one has a really slow hard disk.  I don't know the exact amount of time but given that Linux performs extremely badly when the disk is being accessed, it's too slow for me to want to try to reproduce it again.&lt;br /&gt;&lt;br /&gt;As far as I can tell, no data is lost this way (maybe config settings but I don't mind) so it brings into question the purpose of writing teardown code if it performs so badly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-116089965818768571?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/116089965818768571/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=116089965818768571' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/116089965818768571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/116089965818768571'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/10/fastest-way-to-quit-acroread-under.html' title='The fastest way to quit acroread under Linux is...'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-116010641813404156</id><published>2006-10-06T13:41:00.000+10:00</published><updated>2006-10-06T13:46:58.150+10:00</updated><title type='text'>Page Styles in OpenOffice.org Writer</title><content type='html'>I'm writing this while waiting for my document to print...&lt;br /&gt;&lt;br /&gt;Changing the current page's Page Style by double clicking the style name in the "Styles and Formatting" window (F11) does not work.  It stubbornly insists on using the previous page's style's "Next Style" (RMB / Modify... in the F11 Window).&lt;br /&gt;&lt;br /&gt;A solution is to force a page break (you think they'd call it a "Page Style Break") i.e. the "Insert / Manual Break..." menu item.  Set the "Type" to "Page break" and the "Style" to the one you want.  Then manually delete the blank page it creates (after all, it is a page break).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-116010641813404156?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/116010641813404156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=116010641813404156' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/116010641813404156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/116010641813404156'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/10/page-styles-in-openofficeorg-writer.html' title='Page Styles in OpenOffice.org Writer'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-115900923475846967</id><published>2006-09-23T20:24:00.000+10:00</published><updated>2006-09-23T21:00:34.773+10:00</updated><title type='text'>Review of Kate Alexa - Broken &amp; Beautiful</title><content type='html'>Australian pop singer, &lt;a href="http://en.wikipedia.org/wiki/Kate_Alexa"&gt;Kate Alexa&lt;/a&gt;'s debut album, &lt;a href="http://www.mushroommusic.com.au/songwriters/songwriter.asp?id=416"&gt;Broken &amp; Beautiful&lt;/a&gt;, was released today in Australia.&lt;br /&gt;&lt;br /&gt;Hooked by her radio hits "All I Hear" and "Somebody Out There" (which sound like &lt;a href="http://www.avrillavigne.com/"&gt;Avril Lavigne&lt;/a&gt; "Under My Skin" tracks but more feminine) and misleadingly good iTunes clips of the other tracks, I bought the 14 track CD from a (physical) music store.&lt;br /&gt;&lt;br /&gt;The video for "Somebody Out There" can be found &lt;a href="http://www.myspace.com/katealexa1"&gt;here&lt;/a&gt; or on YouTube.  The "All I Hear" video is available at &lt;a href="http://launch.yahoo.com/"&gt;Yahoo Launch&lt;/a&gt; if you have IE and Windows.&lt;br /&gt;&lt;br /&gt;I felt the album was like listening to a Britney album (minus the porn): A few strong tracks that are singles or later become singles but the rest, disappointing fillers.  It's similar to Ashlee Simpson's and Delta Goodrem's second albums.&lt;br /&gt;&lt;br /&gt;To her credit, apart from her radio hits, "Under the Influence of You" (what a name) is absolutely infectious.  Her fame-making single "Always There" is also not bad.&lt;br /&gt;&lt;br /&gt;Ironically, the track named after the album (or maybe it was the other way round) "Broken &amp; Beautiful" was the most painful of all to listen to due to the unnecessary screaming of the melody-less chorus.&lt;br /&gt;&lt;br /&gt;So in summary: Buy her singles, which are very good teeny bopper/pop/rock, but don't bother with the $A20 ($US15) album.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-115900923475846967?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/115900923475846967/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=115900923475846967' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115900923475846967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115900923475846967'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/09/review-of-kate-alexa-broken-beautiful.html' title='Review of Kate Alexa - Broken &amp; Beautiful'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-115884378772148341</id><published>2006-09-21T21:48:00.000+10:00</published><updated>2006-09-21T23:03:07.846+10:00</updated><title type='text'>Fine resignation speeches</title><content type='html'>I just got elected &lt;b&gt;&lt;big&gt;unopposed&lt;/big&gt;&lt;/b&gt; &lt;small&gt;[*]&lt;/small&gt; as both the Chair of the IEEE UNSW Student Chapter and 2007 Board Member of the UNSW Engineering Faculty.  Unlike typical student representatives and executives, I pledge to &lt;i&gt;actually do something&lt;/i&gt; rather than use it for resume points.&lt;br /&gt;&lt;br /&gt;But anyway, for a bit of fun, I've been studying the 2003 resignation speeches of two prominent politicans.  Guess my next degree will be Arts, majoring in Politics.  Politics is a great sport if only it were productive.  Now, on with the goods:&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;1. &lt;a href="http://news.bbc.co.uk/2/hi/uk_news/politics/2859431.stm"&gt;Robin Cook&lt;/a&gt;&lt;/h4&gt;&lt;br /&gt;The British Leader of the House resigns over the government's handling of the 2nd Iraqi War.  Great speech overall with the piece-by-piece deconstruction of the "Weapons of Mass Destruction" argument but this bit is truly exceptional:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;I intend to join those tomorrow night who will vote against military action now. It is for that reason, and for that reason alone, and with a heavy heart, that &lt;i&gt;I resign from the government.&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;If you watch the above link's video, albeit lo-res, it's how he says the last bit so simply and unemotionally, that his betrayal is even more shocking.  If I were reading the speech, I would have said it far more forcefully.&lt;br /&gt;&lt;br /&gt;He got a standing ovation BTW.  A politician willing to stand up for what s/he really believes in deserves one.  As a rule of thumb (but doesn't apply in this case), such politicians with the brains and big ideas are generally the ones that don't survive in politics for long due to the party machine men.  Think &lt;a href="http://en.wikipedia.org/wiki/Mark_Latham"&gt;Mark Latham&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Too bad the Prime Minister wasn't in the chamber at the time.  I'm surprised the government didn't try to gag this rather damaging speech (as such motions, at least in Australian Federal Parliament, are voted on immediately according to the Standing Orders).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;2. &lt;a href="http://www.australianpolitics.com/news/2003/11/03-11-28.shtml"&gt;Simon Crean&lt;/a&gt;&lt;/h4&gt;&lt;br /&gt;The Australian Leader of the Opposition takes a number of subtle and funny stabs at the people who destabilised his leadership:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Don't let your personal ambition cripple the Labor Party as it puts its case for a fairer and better Australia.&lt;br /&gt;&lt;br /&gt;[...]&lt;br /&gt;&lt;br /&gt;This ballot next Tuesday, is not only about leadership, it's about Labor standards, Labor values and how we conduct ourselves as a party.&lt;br /&gt;&lt;br /&gt;[...]&lt;br /&gt;&lt;br /&gt;I especially want to thank my senior front bench colleagues who have served the Parliamentary Party well and have remained loyal to me&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;In hindsight, the most ironic comment of all would have to be this:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Don't put a revolving door on the entrance of the Opposition Leader's office. That door only leads to permanent opposition.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;The Opposition Leaders have been Kim Beazley, Simon Crean (the one in question), Mark Latham and guess what, Kim Beazley again.  Full circle, huh?&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Time will heal, in my view any personal hurt, thus hurt that comes from events like today.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;No video this time but from memory, Crean gets real emotional here.  I love his choice of words in true political style.  He could have said the more straightforward:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;You bastards for stealing my prime ministership!&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;but being a politician, he didn't.  Pity.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[*] In case you missed it (and I wouldn't blame you if you did), the font is satirising the old biography pages for a particular political party.  In reality, if you are elected unopposed, this simply reflects the sad state of democracy: it doesn't mean no one wanted to vote against you - it just means there were no other candidates.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-115884378772148341?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/115884378772148341/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=115884378772148341' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115884378772148341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115884378772148341'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/09/fine-resignation-speeches.html' title='Fine resignation speeches'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-115787353681019939</id><published>2006-09-10T17:08:00.000+10:00</published><updated>2006-09-10T17:32:16.843+10:00</updated><title type='text'>I'll Always Know What You Did Last Summer!</title><content type='html'>It follows, and is imaginatively named after, the 90s teen horror movies, &lt;a href="http://www.imdb.com/title/tt0119345/"&gt;I Know What You Did Last Summer&lt;/a&gt; (1997) and &lt;a href="http://www.imdb.com/title/tt0130018/"&gt;I Still Know What You Did Last Summer"&lt;/a&gt; (1998).&lt;br /&gt;&lt;br /&gt;Movie info and trailer at &lt;a href="http://www.imdb.com/title/tt0469111/"&gt;IMDB&lt;/a&gt;.  The DVD hasn't been released yet in Australia but from the trailer, it looks like it spoofs the 1997 original.  Completely different cast and production company.  Even stars &lt;a href="http://www.imdb.com/name/nm0627492/"&gt;Rachel&lt;/a&gt; from Animorphs.&lt;br /&gt;&lt;br /&gt;I'm absolutely stunned that this movie was made.  Nevertheless, I expect that it should be more of the same.  Next thing you know they'll come out with "Even in the Afterlife, I Know What You Did Last Summer" and they can make it a vampire/ghost movie.&lt;br /&gt;&lt;br /&gt;Will probably watch all 3 once this one comes out (as I can barely remember now what happened in the first 2).&lt;br /&gt;&lt;br /&gt;Speaking of sequels, I thought the &lt;a href="http://en.wikipedia.org/wiki/Tomorrow_series"&gt;Tomorrow, When The War Began&lt;/a&gt; (aka "When The War Began") series of novels was finished by the 7th one.  But now, 2 more followups have been written.  I guess I should have known: if you've ever gotten your hands on the 3rd novel, it mentions on the front cover that it's the last in the "trilogy".&lt;br /&gt;&lt;br /&gt;I guess all &lt;a href="http://imdb.com/title/tt0306047/taglines"&gt;great trilogies come in threes&lt;/a&gt;.  Actually, scrub that.  &lt;a href="http://imdb.com/title/tt0175142/"&gt;Scary Movie&lt;/a&gt; and &lt;a href="http://imdb.com/title/tt0117571/"&gt;Scream&lt;/a&gt; are probably respectively, the most tasteless and boring film series ever.  Having watched them in the wrong order, Scream actually appears to be a parody of Scary Movie :)  And yes, Scary Movie 1 sends up "I Know What You Did Last Summer" as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-115787353681019939?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/115787353681019939/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=115787353681019939' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115787353681019939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115787353681019939'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/09/ill-always-know-what-you-did-last.html' title='I&apos;ll Always Know What You Did Last Summer!'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-115656882454676841</id><published>2006-08-26T14:33:00.000+10:00</published><updated>2006-08-26T15:13:19.253+10:00</updated><title type='text'>Movie Reviews</title><content type='html'>While claiming I have had no time over the last couple of months, I've watched a whole bunch of DVDs.  Here's my take on them:&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;1. &lt;a href="http://imdb.com/title/tt0295178/"&gt;Austin Powers in Goldmember&lt;/a&gt; (2002)&lt;/h3&gt;&lt;br /&gt;Austin Powers goes to battle Dr. Evil's latest plan involving an evil villain (name a villain that isn't evil BTW) Goldmember and save the world as usual.&lt;br /&gt;&lt;br /&gt;A plotless movie with hopeless jokes.  Similar in content and style to Scary Movie 1/2/3.&lt;br /&gt;&lt;br /&gt;I haven't seen the previous Austin Powers so I'm probably missing some in-jokes.  According to the credits, Mike Myers plays several of the main characters - must be one incredibly good actor with one incredibly good makeup artist.&lt;br /&gt;&lt;br /&gt;The only funny parts worth mentioning are the incomprehensible "English English" (English that only makes sense to people from England, not even Australia or New Zealand) and Powers' reading of some subtitles (for some evil dude who chooses to speak Japanese, even though he knows English).&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;2. &lt;a href="http://imdb.com/title/tt0319262/"&gt;The Day After Tomorrow&lt;/a&gt; (2004)&lt;/h3&gt;&lt;br /&gt;The next ice age has arrived.  People are frozen solid.  Some people are trapped in a library.  Overrated.  I could continue with more short sentences.  Action story with plenty of special effects.  Overacted vice-president.  Nice watch but not exactly the greatest movie.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;3. &lt;a href="http://imdb.com/title/tt0391198/"&gt;The Grudge&lt;/a&gt; (2004)&lt;/h3&gt;&lt;br /&gt;Remake of a Japanese movie - even parts of the DVD extras are in Japanese with no English subtitles.  &lt;a href="http://imdb.com/name/nm0001264/"&gt;Buffy&lt;/a&gt; (not her real name), a health care worker, goes to a haunted house but does not feature as prominently in the movie as the trailers might have suggested.  Spooky, inconclusive plot - little is actually explained.  A refreshingly different approach to horror movies.  Think &lt;a href="http://imdb.com/name/nm0000233/"&gt;Tarantino&lt;/a&gt; style but not boring.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;4. &lt;a href="http://imdb.com/title/tt0110148/"&gt;Interview with The Vampire&lt;/a&gt; (1994)&lt;/h3&gt;&lt;br /&gt;One of those deep, artistic movies tend to win awards.  Tom Cruise, Brad Pitt, Christian Slater and a young, Kirsten Dunsk (Bring It On, Spiderman).  Unnecessarily excessive use of horror in some places and fairly lacklustre.  Something you might watch for a literature course (to appreciate otherwise unappreciated movies) but not for fun.  If you liked &lt;a href="http://imdb.com/title/tt0116282/"&gt;Fargo&lt;/a&gt; (1996), &lt;a href="http://imdb.com/title/tt0095709/"&gt;The Navigator: A Medieval Odyssey&lt;/a&gt; (1988), &lt;a href="http://imdb.com/title/tt0107822/"&gt;The Piano&lt;/a&gt; (1993) or other such boring movies, you'll like this one.  But I'd rather have gone to sleep (why did I stay up late to watch this one?).&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;5. &lt;a href="http://imdb.com/title/tt0399201/"&gt;The Island&lt;/a&gt; (2005)&lt;/h3&gt;&lt;br /&gt;A bunch of human clones (oops, spoiled the plot, sorry :)) live in a world where they are constantly watched and are not supposed to have the intelligence to question their purpose.&lt;br /&gt;&lt;br /&gt;A disturbing movie about human behaviour and survival incorporating elements from &lt;a href="http://imdb.com/title/tt0083658/"&gt;Blade Runner&lt;/a&gt; and 1984/Brave New World.  Plenty of nice action sequences (the DVD extras said that they really did blow up a helicopter!) but fairly drawn out.&lt;br /&gt;&lt;br /&gt;Probably only sold because of the trailer and &lt;a href="http://imdb.com/name/nm0424060/"&gt;Scarlett Johansson&lt;/a&gt; who I did not recognise from &lt;a href="http://imdb.com/title/tt0119314/"&gt;The Horse Whisperer&lt;/a&gt; (1998).&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;6. &lt;a href="http://imdb.com/title/tt0385307/"&gt;Miss Congeniality 2&lt;/a&gt; (2005)&lt;/h3&gt;&lt;br /&gt;Sandra Bullock needs to save the kidnapped Miss United States (from the previous &lt;a href="http://imdb.com/title/tt0212346/"&gt;Miss Congeniality&lt;/a&gt; (2000)).  Some funny bits esp. when her attempts to foil a bank robbery are foiled by her own fame but not as good as the original.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;7. &lt;a href="http://imdb.com/title/tt0256415/"&gt;Sweet Home Alabama&lt;/a&gt; (2002)&lt;/h3&gt;&lt;br /&gt;Reese Witherspoon has moved to New York and has just released a fashion line.  She is about to marry a high profile politician but has an unfortunate problem: her previous husband in - you guessed it - Alabama hasn't divorced her yet.  So she heads south in order to tie up this loose end.&lt;br /&gt;&lt;br /&gt;An unexpected twist at the end with plenty of clues that one would have forgotten by the end and don't make sense unless one watches the movie again.&lt;br /&gt;&lt;br /&gt;One hour into the movie, there's a song "Falling Down" by, the then not famous, &lt;a href="http://www.avrillavigne.com/"&gt;Avril Lavigne&lt;/a&gt; (who does not update her website and I can tell you first hand: she cannot sing live; nevertheless, you can't actually buy that track on iTunes).&lt;br /&gt;&lt;br /&gt;A couple of laughs here and there but a fairly average movie.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;8. &lt;a href="http://imdb.com/title/tt0293662/"&gt;The Transporter&lt;/a&gt; (2002)&lt;/h3&gt;&lt;br /&gt;&lt;a href="http://imdb.com/name/nm0005458/"&gt;Jason Statham&lt;/a&gt; goes around transporting packages for criminals.  After discovering that one such package contains a kidnapped girl, an assassination attempt is made against him.&lt;br /&gt;&lt;br /&gt;A excellent mix of action and wise remarks, between Statham and the detective, that will keep you surprised and laughing (unfortunately, IMDB doesn't list the good quotes).  &lt;a href="http://imdb.com/title/tt0095016/"&gt;Die Hard&lt;/a&gt; without the brainless, monotonous action.  Lethal Weapon but not as intense.  One of the best action movies I've ever seen.  Absolutely recommended.&lt;br /&gt;&lt;br /&gt;I normally don't comment on movie goofs but this one was just too obvious:&lt;br /&gt;&lt;br /&gt;One hour into the movie, an evil security guard puts down a bottle of beer he was not holding.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-115656882454676841?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/115656882454676841/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=115656882454676841' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115656882454676841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115656882454676841'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/08/movie-reviews.html' title='Movie Reviews'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-115633586877342445</id><published>2006-08-23T21:48:00.000+10:00</published><updated>2006-08-23T22:24:29.253+10:00</updated><title type='text'>Fedora Core 5 pirut bug/feature</title><content type='html'>I've been using Fedora since mid 2004.  I quite like it - bleeding edge and with minimal patches on top of the upstream source so there isn't much bloat nor extra bugs (which is why I switched from Mandrake/Mandriva - that story some other day).  The distro's not perfect but like democracy, I've found that it's the least worst.&lt;br /&gt;&lt;br /&gt;Now, I've been using Fedora Core 4 for a while now.  I decided it would be interesting to try out Fedora 5 for the new development machine&lt;br /&gt;&lt;a href="http://clarencedang.blogspot.com/2006/07/brad-hards-thanks.html"&gt;kindly donated by Brad Hards&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Other than updated software, it seems the same as Fedora Core 4 but with an extra "feature":&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;i&gt;For the first time in Fedora, we have a tightly integrated package-management system, Pirut.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-- &lt;a href="http://www.redhat.com/magazine/018apr06/features/fc5_overview/"&gt;Inside Fedora Core 5&lt;/a&gt;, Red Hat Magazine&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Only, it &lt;a href="https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=188750"&gt;cannot install packages from CD&lt;/a&gt; &lt;i&gt;by default&lt;/i&gt;!  It reminds me of that &lt;a href="http://www.azlyrics.com/lyrics/michellebranch/goodbyetoyou.html"&gt;Michelle Branch song&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;&lt;br /&gt;Goodbye to user friendliness.&lt;br /&gt;Goodbye to the sanity that I knew.&lt;br /&gt;You were the one thing I tried to install.&lt;br /&gt;&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;[ok, that was terrible, I admit :)]&lt;br /&gt;&lt;br /&gt;This is a shocking regression and I'm stunned that this made it past quality control, into the release.&lt;br /&gt;&lt;br /&gt;Luckily, it's not that bleak as there are solutions:&lt;br /&gt;&lt;br /&gt;The first is to &lt;a href="http://www.city-fan.org/tips/YumRepoFromImages"&gt;create a repository on your hard disk&lt;/a&gt; containing all 5 CDs' RPMs.  Of course, this takes a lot of disk space...  When following those instructions, if you have the CDs, copy the RPMS and the comps.xml directly - don't bother creating an ISO and dealing with the loopback filesystem business (&lt;code&gt;-o loop&lt;/code&gt;).  The confusing line for me was:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;rpm -Uvh RPMS/createrepo* &lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;That was just a tricky way of saying make sure you install the version of "createrepo" RPM stored on the CDs.&lt;br /&gt;&lt;br /&gt;The second method I haven't tried but only found a few minutes ago.  You can apparently just point &lt;a href="http://fedoranews.org/cms/node/1055"&gt;yum to the CD ROM drive&lt;/a&gt;.  This appears to work just like Fedora 4 - requires no extra disk space as it reads straight from the CDs.  I'm wondering: if I'm searching for packages, will it search the current CD in the drive or all of them?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-115633586877342445?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/115633586877342445/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=115633586877342445' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115633586877342445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115633586877342445'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/08/fedora-core-5-pirut-bugfeature.html' title='Fedora Core 5 pirut bug/feature'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-115573448667657571</id><published>2006-08-16T22:31:00.000+10:00</published><updated>2006-08-16T23:21:26.786+10:00</updated><title type='text'>Order of the zoom actions - vote for your favourite toolbar layout here</title><content type='html'>In a previous post I talked about taking the number of KolourPaint &lt;a href="http://clarencedang.blogspot.com/2006/07/in-reply-to-aseigo-on-toolbars.html"&gt;toolbar buttons&lt;/a&gt; down to a minimum, partly in response to the new KDE 4 default of "Text Under Icons" and partly, to fix the dumping ground the toolbar has become.&lt;br /&gt;&lt;br /&gt;Thanks very much to everyone who commented on the proposal.  &lt;br /&gt;&lt;br /&gt;Recall that KolourPaint in KDE 3 looked like this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/5203/2406/1600/toolbar_old.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/5203/2406/400/toolbar_old.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;New Proposal for KolourPaint / KDE 4&lt;/h3&gt;&lt;br /&gt;And now, based on your feedback, my latest proposal for KolourPaint in KDE 4 is:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/5203/2406/1600/toolbar_new.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/5203/2406/400/toolbar_new.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;Due to popular demand, I've added back the "Open" and "Save" buttons.  I feel that just having a "Save" button as suggested is not sufficient for a paint app where one may open pictures often - this is different to a database app, like Kexi, where one usually manipulates just one DB.&lt;br /&gt;&lt;br /&gt;As for concerns regarding removing buttons effectively hiding functionality from users less comfortable with computers, it is difficult to cater for a broad audience but I think overall, the new toolbar layout is more useful for more people since it's less cluttered and has bigger, easier to click buttons.  It is of course configurable - this discussion is merely about the most popular defaults.&lt;br /&gt;&lt;br /&gt;As you can see from above, I've also made fixed those Undo / Redo buttons so that they don't keep changing their labels (e.g. from "Undo: Text" to "Undo: Connected Lines") so that their sizes remain small (otherwise, think about the German translationa) and constant.&lt;br /&gt;&lt;br /&gt;Also, thanks for some of the more creative ideas that were posed but unfortunately, I won't have time to implement them for now.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Dumping Text from the Zoom Actions&lt;/h3&gt;&lt;br /&gt;It was suggested that I dump the text from the zoom buttons (like KDE 3) to save space.  I played with this but unfortunately, the smaller buttons are much harder to click:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/5203/2406/1600/zoom_icons_only.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/5203/2406/400/zoom_icons_only.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;So, large buttons with text it is.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Order of the Zoom Actions&lt;/h3&gt;&lt;br /&gt;But a remaining issue is the order of the zoom actions:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/5203/2406/1600/zoom_choices.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/5203/2406/400/zoom_choices.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;Which one is the best?  Answer: I don't know.&lt;br /&gt;&lt;br /&gt;B1 is used by KolourPaint in KDE 4 and Acrobat Reader.  The ordering of the zoom actions is certainly more conventional but for some reason, seems clunkier.&lt;br /&gt;&lt;br /&gt;B2 is used by okular.  But the zoom actions look reversed.  Yet, for some reason, the order &lt;i&gt;feels&lt;/i&gt; more natural (I guess I zoom in "[+]" more often and as a left-to-right reader, it should come first?).  &lt;br /&gt;&lt;br /&gt;C2 is used by KolourPaint in KDE 3.  The advantage of this scheme is that I frequently press [+] a few times until it's zoomed in enough and then I can just move the mouse a short distance to [-] to adjust.  In contrast, this adjusting is made more difficult by the [+] and [-] buttons being far apart as in the cases of B1 and B2.  So C2 is my favourite.&lt;br /&gt;&lt;br /&gt;But I haven't really decided and in any case, this should be standardised across KDE apps so it would be great if you could vote for the one you prefer by adding a comment to this blog entry.  &lt;br /&gt;&lt;br /&gt;The final design will be chosen based on your votes so vote now!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-115573448667657571?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/115573448667657571/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=115573448667657571' title='68 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115573448667657571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115573448667657571'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/08/order-of-zoom-actions-vote-for-your.html' title='Order of the zoom actions - vote for your favourite toolbar layout here'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>68</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-115563370439612885</id><published>2006-08-15T19:19:00.000+10:00</published><updated>2006-08-15T19:21:44.406+10:00</updated><title type='text'>No one checks credit card signatures</title><content type='html'>Everyone, I think, knows this.  Was just pointed to this article at zug.com:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.zug.com/pranks/credit/"&gt;The Credit Card Prank&lt;/a&gt;.  Absolutely hilarious, starting with the second page.&lt;br /&gt;&lt;br /&gt;Have not had time to read &lt;a href="http://www.zug.com/pranks/credit_card/"&gt;Part 2&lt;/a&gt; because I've spent too much time blogging :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-115563370439612885?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/115563370439612885/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=115563370439612885' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115563370439612885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115563370439612885'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/08/no-one-checks-credit-card-signatures.html' title='No one checks credit card signatures'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-115563257100028621</id><published>2006-08-15T19:01:00.000+10:00</published><updated>2006-08-15T19:02:51.000+10:00</updated><title type='text'>Log system events to VC 12 (CTRL+ALT+F12)</title><content type='html'>... as inspired by Mandrake 7.2 (2000):&lt;br /&gt;&lt;br /&gt;The service &lt;code&gt;syslog&lt;/code&gt; starts the system logger &lt;code&gt;syslogd&lt;/code&gt;,&lt;br /&gt;which reads &lt;code&gt;/etc/syslog.conf&lt;/code&gt;.  Add &lt;code&gt;*.* /dev/tty12&lt;/code&gt;&lt;br /&gt;to this config file and voila!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-115563257100028621?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/115563257100028621/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=115563257100028621' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115563257100028621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115563257100028621'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/08/log-system-events-to-vc-12-ctrlaltf12.html' title='Log system events to VC 12 (CTRL+ALT+F12)'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-115563205846075780</id><published>2006-08-15T18:06:00.000+10:00</published><updated>2006-08-15T18:54:19.323+10:00</updated><title type='text'>ssh tunnelling, tunneling or port forwarding</title><content type='html'>This is the most straightforward explanation of &lt;a href="http://www.rzg.mpg.de/networking/tunnelling.html"&gt;SSH tunnelling&lt;/a&gt; I have ever found. Unfortunately, this page doesn't show up as the first hit in google if you spell "tunnelling" with one 'l'.&lt;br /&gt;&lt;br /&gt;This command is equivalent to the example given on that page:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;ssh myuserid@gate -L 7777:work:22  cat -&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Now for some clarification of this weird but effective syntax:&lt;br /&gt;&lt;br /&gt;1. Traffic on port 7777 on your local machine goes to "gate" via the ordinary ssh port. "gate" forwards this traffic on to port 22 on "work".&lt;br /&gt;&lt;br /&gt;As port 7777 is a local port, you can choose this to be pretty much anything from 1024 onwards and don't have to reconfigure your firewall.&lt;br /&gt;&lt;br /&gt;You can change port 22 (ssh) to e.g. http to access the web server on "work" as if you were sitting at "gate". Now access http://localhost:7777/!&lt;br /&gt;&lt;br /&gt;2. The name lookup for "work" occurs on "gate", not your local machine.  This is very useful.&lt;br /&gt;&lt;br /&gt;3. The "cat -" is a hack to keep the tunnel open.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I'm no network guru and have been wanting to learn this for ages but only found explanations that go on for pages about how great ssh forwarding is without actually giving a straightforward example. Others were obsessed with the intricacies of command line options.&lt;br /&gt;&lt;br /&gt;For these reasons and because I don't have time to read a &lt;a href="http://iptables-tutorial.frozentux.net/iptables-tutorial.html"&gt;tutorial longer than documents I give to lawyers&lt;/a&gt;, I still have no idea how to write iptables rules by hand. If all documentation was like that we would all be spending most of our lives reading instead using computers. Hardly, a "simple primer" as claimed. So when I find a simple tutorial about iptables, I'll blog it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-115563205846075780?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/115563205846075780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=115563205846075780' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115563205846075780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115563205846075780'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/08/ssh-tunnelling-tunneling-or-port.html' title='ssh tunnelling, tunneling or port forwarding'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-115520907697638659</id><published>2006-08-10T20:45:00.000+10:00</published><updated>2006-08-10T21:24:37.066+10:00</updated><title type='text'>The fun of politics 2: Tuckey vs Beazley</title><content type='html'>If you think the &lt;a href="http://clarencedang.blogspot.com/2006/06/fun-of-politics.html"&gt;antics inside Australian parliament&lt;/a&gt; are funny, wait till you see our favourite politicians outside of parliament.  &lt;a href="http://en.wikipedia.org/wiki/Wilson_Tuckey"&gt;Wilson Tuckey&lt;/a&gt;, a hard right-wing government member takes on I'm-trying-be-prime-minister-for-the-3rd-time, Opposition Leader, &lt;a href="http://en.wikipedia.org/wiki/Kim_Beazley"&gt;Kim Beazley&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Beazley: Take your tablets mate.&lt;br /&gt;[...]&lt;br /&gt;Tuckey: Don't you insult me with tablets ... I am as entitled to stand here as you are.&lt;br /&gt;[...]&lt;br /&gt;Beazley: Why don't you take your weak worthless self in there with the weak worthless legislation?&lt;br /&gt;[...]&lt;br /&gt;Tuckey: Don't you call me weak and worthless you [mouths "stupid"] fat so and so.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;But there's nothing like the actual video.  Use one of the following links from most direct to least (sometimes, embedded video in Linux can be painful):&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;a href="http://win-media.f2.com.au/media/2006/08/10/21025_2.wmv"&gt;Direct WMV Stream&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://media.smh.com.au/?rid=21025&amp;"&gt;Page with embedded stream&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://radar.smh.com.au/archives/2006/08/call_that_a_sto.html"&gt;Commentary&lt;/a&gt; (click on "clip")&lt;br /&gt;&lt;br /&gt;&lt;a href="http://news.google.com.au/news?hl=en&amp;ned=au&amp;q=beazley+tuckey+fat"&gt;Google News search&lt;/a&gt; (it's hard to get to the original story as it seems to have been censored off most news sites' main pages)&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;This whole confrontation was about the government's proposed, tough, new immigration laws that will have boat people being imprisoned at sea!  In fact, so tough that several government members later crossed the floor and one resigned.  Notice that Beazley was caught off guard in that video and accused the legislation of being "weak", as Tuckey picked up on.&lt;br /&gt;&lt;br /&gt;Other interesting happenings include an opposition member bringing in a &lt;br /&gt;&lt;a href="http://www.news.com.au/dailytelegraph/story/0,22049,20074162-5006002,00.html"&gt;stuffed chicken&lt;/a&gt; (check out the pic!), getting ejected from parliament along with a fellow member who exclaimed "such a poultry offence" (pun intended).&lt;br /&gt;&lt;br /&gt;Lastly, sorry, I haven't checked my email for a few days.  I'm very busy but just couldn't help but put up this gag that made my day.  I'll deal with email and LCA preparations on Sunday (I promise this time).  If something's urgent, please email me through &lt;a href="mailto:clarencedang AT yahoo.com"&gt;my yahoo account&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-115520907697638659?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/115520907697638659/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=115520907697638659' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115520907697638659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115520907697638659'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/08/fun-of-politics-2-tuckey-vs-beazley.html' title='The fun of politics 2: Tuckey vs Beazley'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-115424543958474509</id><published>2006-07-30T17:10:00.000+10:00</published><updated>2006-07-30T17:43:59.596+10:00</updated><title type='text'>Brad Hards: thanks!</title><content type='html'>I met up with &lt;a href="http://www.kdedevelopers.org/blog/102"&gt;Brad Hards&lt;/a&gt; who was in Sydney yesterday.  It's really great to meet someone in person that until now, I had only known on the internet (the only other person I've met in this way was Bart Oldeman from DOSEMU).&lt;br /&gt;&lt;br /&gt;We had a very short meeting but he gave me some of his "old" hardware: a P4 3GHz HT machine and a P3 1GHz laptop, both with loads of disk space and importantly, RAM (1GB and 512MB respectively).  This is truly impressive stuff that will dramatically improve my productivity:&lt;br /&gt;&lt;br /&gt;With the hardware I was using before (and will still be using for a few days until I get the new stuff setup), a 2 line change to kdelibs/kdeui meant that I had to wait several minutes for cmake/make to rediscover libkdeui's dependencies, compile and install (and yes, I am compiling in the kdeui/ directory only), while the computer was thrashing due to the lack of RAM (224MB), worsened by a slow hard disk (10MB/s maximum sequential read).  Not to mention the lack of disk space (7.6MB remaining).&lt;br /&gt;&lt;br /&gt;So this new hardware is really, really nice stuff and super appreciated - less time waiting, more time coding.  Thanks Brad!&lt;br /&gt;&lt;br /&gt;I hope Scott Wheeler's &lt;a href="http://developer.kde.org/~wheeler/adopt-a-geek/"&gt;Adopt-a-Geek&lt;/a&gt; program will restart at some point so that other KDE developers can benefit from such generous donations as well.&lt;br /&gt;&lt;br /&gt;An interesting suggestion that Brad made was that perhaps some of us KDE devels in Australia (e.g. also &lt;a href="http://www.sebruiz.net/"&gt;Seb Ruiz&lt;/a&gt;, &lt;a href="http://www.kdedevelopers.org/blog/56"&gt;Hamish Rodda&lt;/a&gt;) could get together to do a state-of-KDE-4 talk at &lt;a href="http://conf.linux.org.au/"&gt;linux.conf.au&lt;/a&gt; in Sydney 2007.  I think that would be a great idea so stay tuned :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-115424543958474509?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/115424543958474509/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=115424543958474509' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115424543958474509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115424543958474509'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/07/brad-hards-thanks.html' title='Brad Hards: thanks!'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-115270856685860798</id><published>2006-07-12T22:35:00.000+10:00</published><updated>2006-07-12T22:49:26.926+10:00</updated><title type='text'>Why are languages so hard to learn?</title><content type='html'>I don't mean programming languages which seem trivial to pick up once one has seen a few.  After all, one of my lecturers once said "anyone can program - even I can program".&lt;br /&gt;&lt;br /&gt;So I mean natural languages.  I've primarily used English since an early age.  Since then, I've seriously tried to learn French, Mandarin, Japanese and now Mandarin again i.e. I spent a couple of years on each.&lt;br /&gt;&lt;br /&gt;However, I usually only get as far as the basics like "My name is ...", "I live at ..." and "My grandmother is ... years old".  After that, I get swamped in too much vocab and cannot remember anything.  Did I start at too old an age?  I hear that people in Europe learn a lot of languages at an early age (e.g. German, French, Italian and English) and they're very good at it.&lt;br /&gt;&lt;br /&gt;What is it that makes natural languages so hard to learn compared to programming languages?  Most programming languages are Turing complete after all!  Even C++ templates at compiletime but that's another story...&lt;br /&gt;&lt;br /&gt;So the only things I can remember now are:&lt;br /&gt;&lt;br /&gt;je ne parle francais pas [I'm missing the circumflex under the 'c', sorry]&lt;br /&gt;wakarimasen&lt;br /&gt;我不知道&lt;br /&gt;&lt;br /&gt;Any tips on how to pick up a language in the shortest possible time?  I only need to be able to participate in conversations and read.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-115270856685860798?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/115270856685860798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=115270856685860798' title='20 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115270856685860798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115270856685860798'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/07/why-are-languages-so-hard-to-learn.html' title='Why are languages so hard to learn?'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>20</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-115269464289413461</id><published>2006-07-12T18:49:00.000+10:00</published><updated>2006-07-12T18:57:22.896+10:00</updated><title type='text'>On dodging questions again</title><content type='html'>About my blog entry on &lt;a href="http://clarencedang.blogspot.com/2006/06/how-to-dodge-questions.html"&gt;How to dodge questions&lt;/a&gt;,&lt;br /&gt;&lt;a href="http://www.mtannoyances.com/?p=407"&gt;Timothy Warner&lt;/a&gt; writes:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;'Clarence recommends a three-step approach for dodging a 'stumper' question&lt;br /&gt;...&lt;br /&gt;Clarence Dang's recommendation to "stall for time"'&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Nono, you got me wrong there.  I definitely do not endorse the three-step "Change, Stall, Intimidate" approach I describe.  I simply wrote about it because I hate watching people use it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-115269464289413461?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/115269464289413461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=115269464289413461' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115269464289413461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115269464289413461'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/07/on-dodging-questions-again.html' title='On dodging questions again'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-115269051905849374</id><published>2006-07-12T17:48:00.000+10:00</published><updated>2006-07-12T18:21:26.803+10:00</updated><title type='text'>In reply to aseigo on toolbars</title><content type='html'>Regarding my &lt;a href="http://clarencedang.blogspot.com/2006/07/kolourpaint-paint-engine-experiment.html"&gt;blog entry&lt;/a&gt; that the new KToolBar default of "Text Under Icons" takes too much space, &lt;a href="http://aseigo.blogspot.com/2006/07/on-toolbars.html"&gt;Aaron Seigo writes&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;"the problem is not bigger toolbar buttons, which are good for usability in many ways ... the real problem is that we cram so many (often stupid) things into our toolbars ...&lt;br /&gt;&lt;br /&gt;"so when 'mail' appears in a painting program's toolbar (kolourpaint) one really ought to say themselves, 'wait a minute! this isn't an email program!"&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;I agree it could be solved by a more careful selection of toolbar actions.  But the problem is that I didn't decide on the existing ones like "mail" - &lt;a href="http://websvn.kde.org/trunk/KDE/kdelibs/kdeui/ui_standards.rc?rev=466368&amp;view=markup"&gt;kdelibs did&lt;/a&gt;.  The only ones I added were the &lt;a href="http://websvn.kde.org/trunk/KDE/kdegraphics/kolourpaint/kolourpaintui.rc?rev=515585&amp;view=markup"&gt;zoom actions&lt;/a&gt;.  Sure I could override the KDE defaults with &lt;i&gt;noMerge="1"&lt;/i&gt; like I did with the "View" menu but this something that should really be solved on the kdelibs level.&lt;br /&gt;&lt;br /&gt;Back to the question of which ones should go.  Here's my personal preference:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/5203/2406/1600/kolourpaint-toolbars.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/5203/2406/400/kolourpaint-toolbars.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;6 actions - measuring that up with "Text Under Icons", it's actually smaller than the KDE 3 KolourPaint with "Icons Only".  This is great but how do I know that the majority of people agree with my personal opinion?  I would fight tooth and nail to keep the undo/redo and zoom actions, at least, but maybe everyone else in the world really does email their doodles all the time?&lt;br /&gt;&lt;br /&gt;I agree in principle with bigger icons but the text just adds to the visual clutter after one  learns what the buttons are.  If we have fewer buttons, won't tooltips be sufficient?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-115269051905849374?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/115269051905849374/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=115269051905849374' title='27 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115269051905849374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115269051905849374'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/07/in-reply-to-aseigo-on-toolbars.html' title='In reply to aseigo on toolbars'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>27</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-115262534218571064</id><published>2006-07-11T22:29:00.000+10:00</published><updated>2006-07-11T23:42:24.643+10:00</updated><title type='text'>KolourPaint paint engine experiment works</title><content type='html'>Today was one of those days where I started out thinking "I should &lt;i&gt;really&lt;/i&gt; do some &lt;i&gt;real&lt;/i&gt; [thesis] work today ... but half an hour of KDE hacking first can't hurt ..."  Naturally, it is now almost midnight and the only thing I have done is KDE hacking.  Maybe KDE programming has a secret ingredient that makes it addictive - NiKotine?&lt;br /&gt;&lt;br /&gt;Anyway, given the sweeping Qt4 changes in the painting classes, I was extremely worried that it would not be possible to port the KolourPaint backend such that it would a) still perform OK b) support both XRENDER and non-XRENDER.  In the meantime, I was fighting a battle to simply get KolourPaint compiling given the pace of kdelibs changes (see my &lt;a href="http://clarencedang.blogspot.com/2006/07/got-kdelibs-compiling.html"&gt;previous blog entry's&lt;/a&gt; comments for an example).  But today, I finally managed to hack around the last few important QPixmap/QPainter bugs and can demonstrate some 100% working tools: the Rectangle, Rounded Rectangle, Ellipse, Line, Connected Lines, Curve and Polygon:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/5203/2406/1600/kolourpaint4-2006-07-11.1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/5203/2406/400/kolourpaint4-2006-07-11.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;[Note: if you appreciate abstract art and can see some deep meaning in the picture that I did not intend, feel free to contact me for licensing terms :)]&lt;br /&gt;&lt;br /&gt;From this screenie, it should be obvious that KDE's new toolbar default of "Text Under Icons" does not work unless one has a screen with 5,000 x 5,000 resolution.  As for why the Tool Box is in such a weird place and orientation, the short version is: breakages due to KToolBar changes.  I will fix this and the longstanding problem of unconfigurable icon size by creating a new KToolPalette class &lt;i&gt;after&lt;/i&gt; &lt;a href="http://kde.ground.cz/tiki-index.php?page=KDE%204%20GUI%20framework"&gt;LiveUi&lt;/a&gt; (aka. XMLGUI2) is merged into trunk as I expect the merge will break all underlying assumptions all over again.  Hopefully, blackarrow / Hamish Rodda will implement the class before I do so that I won't have to do any work :)&lt;br /&gt;&lt;br /&gt;Previously, I got KolourPaint to not suck 100% of CPU doing QPixmap -&gt; QImage -&gt; QPixmap translations for opaque drawing operations but transparency was still unreliable and really slow.  Now, I have opaque &lt;i&gt;and&lt;/i&gt; transparent operations working with and without XRENDER.&lt;br /&gt;&lt;br /&gt;So now that I have the underlying infrastructure working, porting the rest of the tools should be fairly straightforward and more importantly, now appears possible.  Expect a set of fully working tools real soon now.&lt;br /&gt;&lt;br /&gt;But don't use it for anything serious yet: shortcuts don't work (must have checked out kdelibs at a bad time), attempting to save causes a crash in kdelibs (yes, my previous piece of abstract painting was much better):&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;ASSERT: "d" in file /home/kde4/dist/include/ksharedptr.h, line 108&lt;br /&gt;Aborted&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;I doubt the clipboard works due to the Qt4 changes and more importantly, I have rigged up assertions such that almost any tool not in the above list will cause KolourPaint to crash as the way they play with the paint engine violates some invariants.  Sorry.&lt;br /&gt;&lt;br /&gt;Finally, given the amount of time I've wasted hacking around QPainter bugs (read my commit messages and see), I'm going to try to charge Trolltech for bug reports (hey, they charge for the toolkit).  Wish me luck :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-115262534218571064?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/115262534218571064/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=115262534218571064' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115262534218571064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115262534218571064'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/07/kolourpaint-paint-engine-experiment.html' title='KolourPaint paint engine experiment works'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-115208742969027750</id><published>2006-07-05T18:03:00.000+10:00</published><updated>2006-07-05T18:37:17.073+10:00</updated><title type='text'>Got kdelibs compiling</title><content type='html'>This is with:&lt;br /&gt;&lt;br /&gt;trunk/qt-copy -r558252&lt;br /&gt;trunk/KDE/kdelibs -r558279&lt;br /&gt;&lt;br /&gt;Make sure you run the ./apply_patches script in qt-copy.&lt;br /&gt;Manually apply 0119-qaction-widgetfactory.diff - K3WidgetAction from kdelibs needs the QActionWidgetFactory class.  Two Hunks will fail.  Replace them with this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;--- src/gui/widgets/qtoolbar.cpp        (revision 558285)&lt;br /&gt;+++ src/gui/widgets/qtoolbar.cpp        (working copy)&lt;br /&gt;@@ -271,7 +271,16 @@ QToolBarItem QToolBarPrivate::createItem&lt;br /&gt;             item.hasCustomWidget = true;&lt;br /&gt;             return item;&lt;br /&gt;         }&lt;br /&gt;+    }&lt;br /&gt;+&lt;br /&gt;+    if (action-&amp;gt;toolBarWidgetFactory()) {&lt;br /&gt;+         item.widget = action-&amp;gt;toolBarWidgetFactory()-&amp;gt;createToolBarWidget(q);&lt;br /&gt;+         if (item.widget) {&lt;br /&gt;+            item.hasCustomWidget = true;&lt;br /&gt;+            return item;&lt;br /&gt;+         }&lt;br /&gt;     }&lt;br /&gt;+&lt;br /&gt;     if (action-&amp;gt;isSeparator()) {&lt;br /&gt;         item.widget = new QToolBarSeparator(q);&lt;br /&gt;         QObject::connect(q, SIGNAL(orientationChanged(Qt::Orientation)),&lt;br /&gt;--- src/gui/kernel/qaction.cpp  (revision 558285)&lt;br /&gt;+++ src/gui/kernel/qaction.cpp  (working copy)&lt;br /&gt;@@ -54,7 +54,7 @@ static QString qt_strippedText(QString s&lt;br /&gt;&lt;br /&gt; QActionPrivate::QActionPrivate() : group(0), enabled(1), forceDisabled(0),&lt;br /&gt;                                    visible(1), forceInvisible(0), checkable(0), checked(0), separator(0), fontSet(false),&lt;br /&gt;-                                   menuRole(QAction::TextHeuristicRole)&lt;br /&gt;+                                   menuRole(QAction::TextHeuristicRole), factory (0)&lt;br /&gt; {&lt;br /&gt; #ifdef QT3_SUPPORT&lt;br /&gt;     static int qt_static_action_id = -1;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I have no idea if this is correct but KolourPaint -r558316 runs.&lt;br /&gt;&lt;br /&gt;If you get this message even after invoking the dbus daemon:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;FATAL: Session bus not found&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;$DBUS_SESSION_BUS_ADDRESS and $DBUS_SESSION_BUS_PID are not set because you ran dbus using:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;dbus-launch --auto-syntax&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;instead of:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;eval `dbus-launch --auto-syntax`&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;as dbus-launch actually prints out the shell commands used to set those environment variables.&lt;br /&gt;&lt;br /&gt;Lastly, changing button order and making it not configurable is a worrying trend:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/5203/2406/1600/kde-button-order.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/5203/2406/400/kde-button-order.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I hope this is a birthday prank or something...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-115208742969027750?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/115208742969027750/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=115208742969027750' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115208742969027750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115208742969027750'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/07/got-kdelibs-compiling.html' title='Got kdelibs compiling'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-115207502436838285</id><published>2006-07-05T14:42:00.000+10:00</published><updated>2006-07-05T14:50:24.380+10:00</updated><title type='text'>Xine out of memory error message</title><content type='html'>If you see this when starting xine (1.1.1):&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;This is xine (X11 gui) - a free video player v0.99.4.&lt;br /&gt;(c) 2000-2004 The xine Team.&lt;br /&gt;video_decoder: can't create new thread (Cannot allocate memory)&lt;br /&gt;abort: video_decoder.c:510: _x_video_decoder_init: Aborting.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;check your "ulimit -v".  Xine seems to hog at least 256MB of virtual address space, even if it's not actually backing that with physical memory.&lt;br /&gt;&lt;br /&gt;Ordinarily, I use the ulimit mechanism to automatically kill runaway processes that are sucking too much vmem (on the assumption that it is all backed with pmem).  Without ulimit, Linux would be swapping so badly that I wouldn't be able to run "top" to kill the offending process.&lt;br /&gt;&lt;br /&gt;But now, I have to up this figure just for xine...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-115207502436838285?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/115207502436838285/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=115207502436838285' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115207502436838285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115207502436838285'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/07/xine-out-of-memory-error-message.html' title='Xine out of memory error message'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-115140620602380159</id><published>2006-06-27T20:43:00.000+10:00</published><updated>2006-07-12T18:49:05.013+10:00</updated><title type='text'>How to dodge questions</title><content type='html'>&lt;font color="red"&gt;Update (2006-07-12):&lt;/font&gt; I &lt;b&gt;do not&lt;/b&gt; endorse this technique.  I hate it (see the "It simply drives me nuts" bit).    I am merely documenting it to expose those people who use it.&lt;br /&gt;&lt;br /&gt;This is what I call the "CSI" (not the TV show) technique - Change, Stall, Intimidate:&lt;br /&gt;&lt;br /&gt;First, &lt;i&gt;change the topic&lt;/i&gt;: "I think that's a very good question.  It certainly raises some interesting issues related to what I said before."&lt;br /&gt;&lt;br /&gt;Second, &lt;i&gt;stall&lt;/i&gt; by talking about what you said before, for about 2 minutes.&lt;br /&gt;&lt;br /&gt;Third, &lt;i&gt;intimidate&lt;/i&gt; the person who posed the question by asking "Does that answer your question?"  By this time, the audience is so bored that that person will not have the guts to pursure further questioning, in order to save the audience from listening to junk for another 2 minutes.  However, if that person is somehow not discouraged and persists, say "Now as I said before" and repeat the "stall" step.  Alternatively, s/he would have forgotten his/her original question by now.&lt;br /&gt;&lt;br /&gt;It simply drives me nuts when I'm in a meeting and the speaker uses this technique when they clearly have no clue (I'll blog on other techniques used to say nothing, some other day).  But from what I can see, this works like a charm.  And now you know how to do it and sound intelligent too - great for those "strategic" business meetings that we all inevitably find ourselves in.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-115140620602380159?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/115140620602380159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=115140620602380159' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115140620602380159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115140620602380159'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/06/how-to-dodge-questions.html' title='How to dodge questions'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-115140226009123773</id><published>2006-06-27T19:55:00.000+10:00</published><updated>2006-06-27T19:58:39.123+10:00</updated><title type='text'>Exams over</title><content type='html'>Yay!  The highlight was an invigilator saying:&lt;br /&gt;&lt;br /&gt;"For those whose don't know the date, today is the 26th of June &lt;b&gt;&lt;i&gt;2002&lt;/i&gt;&lt;/b&gt;".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-115140226009123773?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/115140226009123773/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=115140226009123773' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115140226009123773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115140226009123773'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/06/exams-over.html' title='Exams over'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-115089528765391990</id><published>2006-06-21T22:46:00.000+10:00</published><updated>2006-06-21T23:08:07.690+10:00</updated><title type='text'>NULL in SQL</title><content type='html'>Should a null QString be identical to an empty QString?  Is there sanity in having undefined vs empty strings in PERL?  What about null vs empty strings in Java?&lt;br /&gt;&lt;br /&gt;It's those annoying cases in programming that always require extra checks.  In SQL, it's NULL.  Comparisons with it almost always return "unknown" (which is usually interpreted as false).  Worse still, "NOT unknown" is still "unknown".  So when one writes:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;CHECK (attribute = 0 OR attribute = 1)&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;SQL will happily allow the insertion of a row with a NULL "attribute".  So this must be rewritten as:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;CHECK (attribute IS NOT NULL AND (attribute = 0 OR attribute = 1))&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;See, I just dropped a few marks for this tiny mistake...&lt;br /&gt;&lt;br /&gt;Oh, and BTW, Oracle morphs empty strings into NULLs, which is the pinnacle of insane behaviour.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-115089528765391990?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/115089528765391990/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=115089528765391990' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115089528765391990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115089528765391990'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/06/null-in-sql.html' title='NULL in SQL'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-115089290358993496</id><published>2006-06-21T22:07:00.000+10:00</published><updated>2006-06-21T22:28:23.600+10:00</updated><title type='text'>Poseidon - Movie Review</title><content type='html'>Watched &lt;a href="http://imdb.com/title/tt0409182/maindetails"&gt;Poseidon&lt;/a&gt; on Monday with a friend from high school.  I normally watch movies in the evenings on weekends so it was rather surprising how few people there are on a Monday night (could be counted on 2 hands) even though this cinema is in Sydney city.&lt;br /&gt;&lt;br /&gt;It's essentially Titanic except they're trapped in an upside-down ship and it isn't boring (it probably won't win any film awards as a result :)).&lt;br /&gt;&lt;br /&gt;Quite a thriller as a bunch of the characters break away from the main group to save themselves, as the water rises inside the ship and fiery debris is abound.  They drop one by one.  I say "a bunch of characters" because character development is fairly poor, there are too many main characters (think "Copland" but not as bad), some of the actors look the same and could have gotten away with playing another character for a bit without anyone noticing.&lt;br /&gt;&lt;br /&gt;For black humour, the kid resembles the one from "The Sixth Sense" so just after the ship has tipped over, and with encouragement from a former fireman, he jumps down from where he's hanging, I could just imagine him making the observation "I see dead people".&lt;br /&gt;&lt;br /&gt;Nevertheless, the acting of all the characters is exceptional and the life-death decisions they make are rather gripping.  The camera work is excellent in building up and maintaining the tension.  The pan around the ship at the start is stunning (and could probably only have been done via computer graphics).&lt;br /&gt;&lt;br /&gt;Now for plot problems:&lt;br /&gt;1. The elderly man mentions something to his business partners (?) about someone regrettably leaving and that they know the consequences of this.  He seems to try to get in contact with this mystery man (but later throws his mobile phone into the ocean).  It is implied that this person leaving is going to result in some disaster but this seems to have no bearing on the plot (unless it was disaster).  Anyone know what's going on?&lt;br /&gt;&lt;br /&gt;2. The captain orders the ship to do a starboard flank.  However, the "rogue wave" is shown to be approaching from the right of the ship.  So the captain actually turned the ship into the wave!&lt;br /&gt;&lt;br /&gt;3. The area with the main dance floor of the ship is claimed to be airtight and the air bubble will keep the ship afloat.  But air must be pulled from the outside otherwise, even in normal situations, air would run out quickly and everyone would die of carbon dioxide poisoning (exhaled breath).  Therefore, it can't be airtight.&lt;br /&gt;&lt;br /&gt;Summing up, an exceptional thriller for people who appreciate simple entertainment.  On my Prime - Spiderman 1/2 - Batman Begins scale, where Prime = hopelessly boring, Spiderman = ok-good and Batman Begins = exceptional, it scores somewhere between Spiderman and Batman.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-115089290358993496?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/115089290358993496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=115089290358993496' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115089290358993496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115089290358993496'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/06/poseidon-movie-review.html' title='Poseidon - Movie Review'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-115068207140552895</id><published>2006-06-19T11:31:00.000+10:00</published><updated>2006-06-19T11:54:31.420+10:00</updated><title type='text'>Oral exam on software engineering ethics, fun</title><content type='html'>There were 3 questions:&lt;br /&gt;&lt;br /&gt;1. Free choice&lt;br /&gt;&lt;br /&gt;2. One out of nine possible questions based on seminars.  At the examination, three are chosen randomly and the student gets to pick one out of those three.&lt;br /&gt;&lt;br /&gt;3. One out of eight possible questions based on lectures.  Chosen similarly to 2.&lt;br /&gt;&lt;br /&gt;Pigeonhole principle comes in handy here: If one wants to prepare for question 2 fully, they only need to prepare 9 - 3 + 1 possible answers.  Similarly for 3.  Now, pigeonhole principle seemed to me like a stupidly obvious theorem when it was taught but since it's saved me some work, at least now I can appreciate it.&lt;br /&gt;&lt;br /&gt;So what questions did I end up picking?  Well for the free choice, I chose a rather controversial topic on copylefting software.  I won't start another flamewar except to say that I BSD license everything these days so you know my position.  It was rather rushed and unfortunately, I don't think the markers were convinced.&lt;br /&gt;&lt;br /&gt;The second was the technical problems with the &lt;a href="http://en.wikipedia.org/wiki/Therac_25"&gt;Therac 25&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The third was about how patents might stifle innovation and aren't suitable for software.  A key example I used was &lt;a href="http://en.wikipedia.org/wiki/Eolas"&gt;Eolas' patent&lt;/a&gt; claim against Microsoft: "Distributed hypermedia method for automatically invoking external application providing interaction and display of embedded objects within a hypermedia document", where Microsoft lost $US521 million, for implementing something fundamental to web browsers.  Imagine if people went around patenting "1+1" and suing school children for practising maths.  You certainly can't get away with that but with software, somehow people have.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-115068207140552895?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/115068207140552895/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=115068207140552895' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115068207140552895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/115068207140552895'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/06/oral-exam-on-software-engineering.html' title='Oral exam on software engineering ethics, fun'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-114985976919756513</id><published>2006-06-09T22:53:00.000+10:00</published><updated>2006-06-09T23:29:31.053+10:00</updated><title type='text'>QWidget::contextMenuEvent()</title><content type='html'>&lt;a href="http://kolourpaint.sourceforge.net/"&gt;KolourPaint&lt;/a&gt; places widgets on top of a KToolBar for its "Colour Box" (a great abuse of KToolBar, I know - I'll be looking at fixing this).  Unfortunately, in Qt4, right clicking on a colour patch (e.g. the transparent or green, circled in red below):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/5203/2406/1600/colorbox.0.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/5203/2406/400/colorbox.0.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;no longer selects the background colour - it brings up the toolbar popup menu instead:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/5203/2406/1600/toolbar_popup.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/5203/2406/400/toolbar_popup.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;(neat "Lock Toolbars" option BTW)&lt;br /&gt;&lt;br /&gt;It turns out that implementing &lt;a href="http://doc.trolltech.com/4.1/qwidget.html#mousePressEvent"&gt;QWidget::mousePressEvent()&lt;/a&gt; no longer stops your parent from receiving the right mouse press that would invoke &lt;a href="http://doc.trolltech.com/4.1/qwidget.html#contextMenuEvent"&gt;contextMenuEvent()&lt;/a&gt;.  Spotting the new &lt;a href="http://doc.trolltech.com/4.1/qwidget.html#contextMenuPolicy-prop"&gt;contextMenuPolicy&lt;/a&gt;, I figured that I would just set my children widgets to &lt;a href="http://doc.trolltech.com/4.1/qt.html#ContextMenuPolicy-enum"&gt;Qt::NoContextMenu&lt;/a&gt; ("the widget does not feature a context menu").  Doesn't work.&lt;br /&gt;&lt;br /&gt;They way I got around it was to get the children to eat/accept() the contextMenuEvent().  Another undocumented, subtle change between Qt3 and 4...&lt;br /&gt;&lt;br /&gt;In the meantime, I have started porting KolourPaint4 to a new "kpPainter" that abstracts away QPainter (not committed to SVN yet).  Rectangles now work and are no longer &lt;a href="http://doc.trolltech.com/4.1/porting4.html#qpainter"&gt;1 pixel higher and wider&lt;/a&gt; than they should be.  Eventually, this abstraction will allow me to dump the Qt graphics routines for a better graphics library.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-114985976919756513?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/114985976919756513/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=114985976919756513' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/114985976919756513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/114985976919756513'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/06/qwidgetcontextmenuevent.html' title='QWidget::contextMenuEvent()'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-114985157258503335</id><published>2006-06-09T21:07:00.000+10:00</published><updated>2006-06-09T21:12:52.596+10:00</updated><title type='text'>C++ class member function pointers</title><content type='html'>This prints -7:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;&lt;br /&gt;struct Moo&lt;br /&gt;{&lt;br /&gt;    int func () const { return -value; }&lt;br /&gt;    int value;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;int main ()&lt;br /&gt;{&lt;br /&gt;    Moo m; m.value = 7;&lt;br /&gt;&lt;br /&gt;    int (Moo::*funcPtr) () const = &amp;Moo::func;&lt;br /&gt;    printf ("%d\n", (m.*funcPtr) ());&lt;br /&gt;    return 0;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Gotta love the "int (Moo::*) ()" syntax  - pointer to any member function of class "Moo" as long as it returns an "int" an accepts nothing.&lt;br /&gt;&lt;br /&gt;And of course, "(m.*funcPtr) ()", which invokes the pointed-to function with "m" as "this".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-114985157258503335?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/114985157258503335/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=114985157258503335' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/114985157258503335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/114985157258503335'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/06/c-class-member-function-pointers.html' title='C++ class member function pointers'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-114967071200171331</id><published>2006-06-07T18:50:00.000+10:00</published><updated>2006-06-07T18:58:32.033+10:00</updated><title type='text'>The fun of Politics</title><content type='html'>Don't buy joke books - read the Australian House of Representatives Hansard instead:&lt;br /&gt;&lt;br /&gt;http://www.aph.gov.au/hansard/reps/dailys/dr250506.pdf:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;"Mr ABBOTT (Warringah -- Leader of the House)&lt;br /&gt;(12.34 pm) -- I move:&lt;br /&gt;That that snivelling grub over there be not further heard.&lt;br /&gt;&lt;br /&gt;[...]&lt;br /&gt;&lt;br /&gt;Mr Abbott -- If I have offended grubs, I withdraw&lt;br /&gt;unconditionally&lt;br /&gt;&lt;br /&gt;[...]&lt;br /&gt;&lt;br /&gt;Mr Swan interjecting --&lt;br /&gt;&lt;br /&gt;The DEPUTY SPEAKER -- The member for Lilley&lt;br /&gt;walks a fine line by calling the Deputy Speaker an idiot.&lt;br /&gt;&lt;br /&gt;Mr Crean interjecting --&lt;br /&gt;&lt;br /&gt;The DEPUTY SPEAKER -- The member for&lt;br /&gt;Hotham walks a fine line by clapping."&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;I don't understand how politicians can get anything done admist these antics.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-114967071200171331?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/114967071200171331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=114967071200171331' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/114967071200171331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/114967071200171331'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/06/fun-of-politics.html' title='The fun of Politics'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-114863987086803586</id><published>2006-05-26T20:20:00.000+10:00</published><updated>2006-05-26T20:37:50.880+10:00</updated><title type='text'>Survived Thesis A</title><content type='html'>Just spent the week rewriting my Thesis A (proposal) report "Optimising &lt;a href="http://www.ertos.nicta.com.au/research/l4/"&gt;L4&lt;/a&gt; on Blackfin 53x: for a high performance L4 microkernel on a processor without virtual memory".  40 pages.  That's longer than most people's Thesis B (actual work) report!  Maybe I spent too long on it at the expense of other assignments...  Did the talk today and here is my killer mascot ("Blackfin"):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/5203/2406/1600/blackfin.0.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/5203/2406/320/blackfin.0.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;It's amazing what one can do in KolourPaint/MSPaint :)&lt;br /&gt;&lt;br /&gt;At 4am, I was drawing up the slides for the talk and fired up OpenOffice Impress.  I don't normally praise software but having never used a presentation program before, I was really impressed by how intuitive it was, taking only about 10 minutes discover how it worked (even at 4am).  But then after drawing up the 15 slides, I went to save:&lt;br /&gt;&lt;br /&gt;"Write error" [or a similar message]&lt;br /&gt;&lt;br /&gt;After trying to save in different formats and on different disks, I got a message saying "OpenOffice experienced a general failure" and then it disabled most of the menu items...  My fault for using a beta version of Fedora Core 4's fault for shipping one?&lt;br /&gt;&lt;br /&gt;Having said that, performance aside, OpenOffice Writer has worked great so far to allow me to continue on without LaTeX (figured out how to use the styles - press F11 and right mouse click to change a style).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-114863987086803586?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/114863987086803586/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=114863987086803586' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/114863987086803586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/114863987086803586'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/05/survived-thesis.html' title='Survived Thesis A'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-114739834321496865</id><published>2006-05-12T11:42:00.000+10:00</published><updated>2006-05-12T11:45:43.226+10:00</updated><title type='text'>Strange smell from an old computer</title><content type='html'>My main and old computer (Pentium II from 1998) is giving off a bad smell, as if rubber/tyres are burning or I'm in a train/bus with new brake lines.  It's giving me a headache and I have a bad feeling about its health effects.&lt;br /&gt;&lt;br /&gt;No wires are touching the heatsink - I already checked that.&lt;br /&gt;&lt;br /&gt;Any ideas on what this is?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-114739834321496865?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/114739834321496865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=114739834321496865' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/114739834321496865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/114739834321496865'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/05/strange-smell-from-old-computer.html' title='Strange smell from an old computer'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-114734040515579495</id><published>2006-05-11T19:34:00.000+10:00</published><updated>2006-05-11T19:40:05.156+10:00</updated><title type='text'>What does a "Cheese and Bacon Pie" mean to you?</title><content type='html'>Quiche?  Or something with lots of cheese and bacon?&lt;br /&gt;&lt;br /&gt;It was around midnight in Sydney (I wrote that just so that it sounds more mysterious) that I got one of these "Cheese and Bacon Pies" from 7-11.  It tastes mainly like it was made of beef and in fact, a closer look at the ingredients said that the cheese and the bacon forms only 12% of the product (in weight, if I remember correctly).  How's that for misleading advertising?  It was still a good pie though.&lt;br /&gt;&lt;br /&gt;What was that not-so-old adage?  Something like "we live in a world where lemonade contains no lemon but detergent does".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-114734040515579495?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/114734040515579495/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=114734040515579495' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/114734040515579495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/114734040515579495'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/05/what-does-cheese-and-bacon-pie-mean-to.html' title='What does a &quot;Cheese and Bacon Pie&quot; mean to you?'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-114637561411331247</id><published>2006-04-30T15:15:00.000+10:00</published><updated>2006-04-30T15:50:14.250+10:00</updated><title type='text'>Buffy the Vampire Slayer Audio CDs</title><content type='html'>Yes, I am a fan of BtVS given than I watched all 144 episodes over 2 months.  To cut a long story short, the soundtrack (on 3 CDs released at different points when the series was on TV) finally arrived from Amazon after a few months.&lt;br /&gt;&lt;br /&gt;In my opinion, &lt;a href="http://www.amazon.com/gp/product/B00001R3O1/sr=1-2/qid=1146374053/ref=sr_1_2/002-9954180-3546454?%5Fencoding=UTF8&amp;s=music"&gt;Buffy The Vampire Slayer: The Album (1999 Television Series) [SOUNDTRACK]&lt;/a&gt; is really not worth buying except for theme music and &amp;quot;Close Your Eyes&amp;quot;, which is played when Buffy murders her boyfriend Angel at the end of Season 2 in order to save the world (so much for &amp;quot;boyfriend&amp;quot;; and yes, Ashlee Simpson can make a song entitled that if she wishes).&lt;br /&gt;&lt;br /&gt;Ditto, for &lt;a href="http://www.amazon.com/gp/product/B0000CABLJ/sr=1-4/qid=1146374053/ref=sr_1_4/002-9954180-3546454?%5Fencoding=UTF8&amp;s=music"&gt; Buffy The Vampire Slayer: Radio Sunnydale [SOUNDTRACK]&lt;/a&gt; (2003 US Version).  A good track is &amp;quot;The Final Fight&amp;quot; - the music for the last episode, when the slayers are somehow kicking all the Ubervamps' butts (a nice plot inconsistency: even though Buffy the veteran slayer had trouble killing a single Ubervamp throughout all of Season 7, in the last episode, other slayers and Giles/Spike/Xander/Dawn had no problems; won't say the same about Anya though...).&lt;br /&gt;&lt;br /&gt;The last CD, the infamous &lt;a href="http://www.amazon.com/gp/product/B00006J3WH/sr=1-1/qid=1146374053/ref=sr_1_1/002-9954180-3546454?%5Fencoding=UTF8&amp;s=music"&gt;Once More, with Feeling&lt;/a&gt; (2002) musical soundtrack is pretty good esp. Sarah Michelle Gellar's singing in &amp;quot;Going Through the Motions&amp;quot; and &amp;quot;Walk Through the Fire&amp;quot;.  A nice addition was not Joss Whedon's wife singing :) but rather &amp;quot;Sacrifice&amp;quot;, the track for the Season 5 finale, where Buffy selfishly jumps off the tower to &amp;quot;to save the world&amp;quot; when in reality, she knows she's going to go to heaven instead of her sister (yes, my postmodernist interpretation).  Jokes aside, this is probably the best finale in the whole series (it's also the 100th episode by accident).&lt;br /&gt;&lt;br /&gt;On the other hand, Season 4 was hopeless and in its final episode, literally &lt;b&gt;nothing&lt;/b&gt; happened!&lt;br /&gt;&lt;br /&gt;I would really like to see an 8th season, set 10 years after the last, when all the actors are older and can't walk but still have to battle vampires etc. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-114637561411331247?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/114637561411331247/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=114637561411331247' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/114637561411331247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/114637561411331247'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/04/buffy-vampire-slayer-audio-cds.html' title='Buffy the Vampire Slayer Audio CDs'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-114637409277867762</id><published>2006-04-30T14:18:00.000+10:00</published><updated>2006-04-30T15:14:52.800+10:00</updated><title type='text'>So what's up with KolourPaint in KDE4?</title><content type='html'>These last couple of weeks I've been trying to find a 1:1 mapping between the Qt3 graphics functions and the Qt4 ones.  Later, I'll blog in the detail how to &lt;i&gt;really&lt;/i&gt; port QPainter/QPixmap/QImage.  The &lt;a href="http://doc.trolltech.com/4.1/porting4.html#qpainter"&gt;Qt4 porting guide&lt;/a&gt; is too scanty on important semantic changes.&lt;br /&gt;&lt;br /&gt;In the meantime, KolourPaint in trunk/ has regressed a bit because of the KToolBar/KAction changes:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/5203/2406/1600/kolourpaint-2006-04-30-layout.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/5203/2406/320/kolourpaint-2006-04-30-layout.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As you can see, the size hints for the Colour Box and Tool Box are not working and since those 6x6 tool icons are so hard to click, I had to manually add them to the main toolbar.  I'll fix this stuff after I get the paint engine porting under control.&lt;br /&gt;&lt;br /&gt;And apart from not working, KolourPaint is really slow (and blocks the X server) because of unneeded QPixmap &lt;-&gt; QImage transformations in the deprecated copyBlt() (my local changes have dropped copyBlt()) and calls to QPixmap::mask().  The latter has this rather amusing comment in qt-copy/src/gui/image/qpixmap_x11.cpp:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#ifndef QT_NO_XRENDER&lt;br /&gt;    if (data-&amp;gt;picture &amp;&amp; data-&amp;gt;d == 32) {&lt;br /&gt;        // #### slow - there must be a better way&lt;br /&gt;        mask = QBitmap::fromImage(toImage().createAlphaMask());&lt;br /&gt;    } else&lt;br /&gt;#endif&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Well, at least it was amusing at 1am...  See, QPixmap::mask() in Qt3 returned a pointer to a precomputed mask so it was real fast.  In Qt4 however, it does X serverside magic and in the worst case (the above snippet of code for QPixmap's with alpha channels), it does 2 X server roundtrips plus computation.  In fact, it takes 450ms for an 800x600 image on a 2.2Ghz processor.  Simply unbearable.&lt;br /&gt;&lt;br /&gt;But the good news is that most calls to QPixmap::mask() in KolourPaint are either for drawing on the mask (since QPainter3 would happily draw on the QPixmap but not update the mask; for Qt4, I will drop this code shortly) or determining whether the pixmap has a mask.  For the latter, this Qt3 code:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;if (pixmap.mask ())&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;should not be ported to:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;if (!pixmap.mask ().isNull ())&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;contrary to a &lt;a href="http://clarencedang.blogspot.com/2006/03/porting-to-kde-4.html"&gt;previous blog entry&lt;/a&gt; since QPixmap::mask() does expensive computation that we throw away anyway.  Do this instead:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;if (pixmap.hasAlpha ())&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So in a couple of weeks, expect a commit that will make painting work.  Also, the next time Trolltech and KDE make such sweeping changes to their APIs, they should feel free to send me a cheque :)  I am simply spending far too much time porting 50 thousand lines of code (which feels like a &amp;quot;NOP&amp;quot; job) rather than writing new features or doing real work (uni).&lt;br /&gt;&lt;br /&gt;An old joke is that if you don't understand what &amp;quot;deprecated method&amp;quot; means, you should update to Java 1.2 (or maybe it was 1.4?).  Now, they can add Qt to that.  I now have literally 500 &amp;quot;deprecated&amp;quot; warnings to go through.  coolo, mueller and montel have been doing a lot of fixes though - thanks!  But on the flip side, I'm duplicating some work (I don't commit often due to internet time limitations) and it means I have to review a lot of patches:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$ wc -l *.diff&lt;br /&gt;   36 521415.diff&lt;br /&gt;  859 528186.diff&lt;br /&gt;  492 530108-533650.diff&lt;br /&gt; 1000 535185-535614.diff&lt;br /&gt;    0 ALSO_REVIEW_CMAKE.diff&lt;br /&gt; 2387 total&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Speaking of which, cmake works quite well.  In fact, I'm going to remove the remaining Makefile.am's since compat/Makefile.am is already gone.  cmake is faster than unsermake, which was faster than automake.  cmake supports &amp;quot;make -t&amp;quot;.  Also, if you want to hack CXXFLAGS long after running &amp;quot;cmake&amp;quot;, the file you want is kdegraphics-build/kolourpaint/CMakeFiles/kolourpaint.dir/flags.make.&lt;br /&gt;&lt;br /&gt;Now, back to work!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-114637409277867762?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/114637409277867762/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=114637409277867762' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/114637409277867762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/114637409277867762'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/04/so-whats-up-with-kolourpaint-in-kde4.html' title='So what&apos;s up with KolourPaint in KDE4?'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-114475156249010155</id><published>2006-04-11T19:25:00.000+10:00</published><updated>2006-04-13T12:18:55.873+10:00</updated><title type='text'>Determining if a type is a pointer at compile time</title><content type='html'>&lt;a href="http://doc.trolltech.com/4.1/qlist.html"&gt;http://doc.trolltech.com/4.1/qlist.html&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;"QList&lt;t&gt; is represented as an array of pointers to items. (Exceptionally, if T is a pointer type, a basic type of the size of a pointer, or one of Qt's shared classes, QList&lt;t&gt; stores the item directly in the pointer.)"&lt;br /&gt;&lt;br /&gt;So a &lt;code&gt;QList&amp;lt;QRect&amp;gt;&lt;/code&gt; is going to be an array of &lt;code&gt;QRect&amp;nbsp;*&lt;/code&gt; but &lt;code&gt;QList&amp;lt;QWidget&amp;nbsp;*&amp;gt;&lt;/code&gt; will be an array of &lt;code&gt;QWidget&amp;nbsp;*&lt;/code&gt; - not &lt;code&gt;QWidget&amp;nbsp;**&lt;/code&gt;.  But how can we determine whether a type is a pointer at &lt;i&gt;compile time&lt;/i&gt;?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update: This describes the method used in Qt for compilers lacking support for partial template specialisation.  If you have partial specialisation, it can be done in a very straightforward way (see blog comments).&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Well it seems to be done by abusing our favourite language.  &lt;code&gt;QList&lt;/code&gt; uses the &lt;a href="http://websvn.kde.org/trunk/qt-copy/src/corelib/global/qglobal.h?rev=524580&amp;view=markup"&gt;QTypeInfo&lt;/a&gt; class - the interesting bits being:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;template &amp;lt;typename T&amp;gt; char QTypeInfoHelper(T*(*)());&lt;br /&gt;void* QTypeInfoHelper(...);&lt;br /&gt;&lt;br /&gt;template &amp;lt;typename T&amp;gt;&lt;br /&gt;class QTypeInfo&lt;br /&gt;{&lt;br /&gt;public:&lt;br /&gt;    enum {&lt;br /&gt;        isPointer = (1 == sizeof(QTypeInfoHelper((T(*)())0))),&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;int&amp;nbsp;*&lt;/h4&gt;&lt;br /&gt;&lt;br /&gt;Now, consider the case of &lt;code&gt;QTypeInfo&amp;lt;int&amp;nbsp;*&amp;gt;&lt;/code&gt;.  the last line expands to:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;isPointer = (1 == sizeof(QTypeInfoHelper( (int * (*) ()) 0)))&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Now I've added some spaces so that it can actually be read.  It's saying, pass NULL - casted to a pointer to a function that accepts nothing and returns an &lt;code&gt;int&amp;nbsp;*&lt;/code&gt; - to one of the QTypeInfo functions.&lt;br /&gt;&lt;br /&gt;But to which 1 of the 2 overloads?  Well, the C++ rule for resolving overloaded function calls is to select the function with the most specific matching argument types, assuming no ambiguity.  In this case, our function call matches this candidate:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;template &amp;lt;typename T&amp;gt; char QTypeInfoHelper(T * (*) ());&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;because &lt;code&gt;T&lt;/code&gt; is &lt;code&gt;int&lt;/code&gt;.  Now you won't actually find &lt;code&gt;QTypeInfoHelper&lt;/code&gt; defined anywhere because all &lt;code&gt;sizeof&lt;/code&gt; is interested in is the size of the return value of the function - it doesn't actually execute it.  Now, the return type is a &lt;code&gt;char&lt;/code&gt;, which is of size 1, therefore &lt;code&gt;isPointer&lt;/code&gt; is true.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;int&lt;/h4&gt;&lt;br /&gt;&lt;br /&gt;Now we look at a non-pointer type, &lt;code&gt;int&lt;/code&gt;.  The tricky line expands to:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;isPointer = (1 == sizeof(QTypeInfoHelper( (int (*) ()) 0)))&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;That function pointer argument type accepts nothing and returns an &lt;code&gt;int&lt;/code&gt;.  It's not going to match the same overload because it's looking for a pointer (the &lt;code&gt;T&amp;nbsp;*&lt;/code&gt;):&lt;br /&gt;&lt;br /&gt;&lt;code&gt;template &amp;lt;typename T&amp;gt; char QTypeInfoHelper(T * (*) ());&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;And &lt;code&gt;int&lt;/code&gt; is no pointer.  Therefore, it can only match the catch-all overload:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;void* QTypeInfoHelper(...);&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;which returns a &lt;code&gt;void*&lt;/code&gt; and guess what:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;isPointer = (1 == sizeof(void *))&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;is false (unless on an 8-bit machine :)).  Therefore, &lt;code&gt;int&lt;/code&gt; is correctly detected as not a pointer.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Conclusion&lt;/h4&gt;&lt;br /&gt;&lt;br /&gt;QTypeInfo manages to determine whether a type is a pointer without:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;actually invoking a function (by merely checking the size of the return type)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;ever constructing an element of type &lt;code&gt;T&lt;/code&gt; (which might otherwise cause side effects)&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-114475156249010155?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/114475156249010155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=114475156249010155' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/114475156249010155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/114475156249010155'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/04/determining-if-type-is-pointer-at.html' title='Determining if a type is a pointer at compile time'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-114429271161485792</id><published>2006-04-06T12:47:00.000+10:00</published><updated>2006-04-06T13:05:12.536+10:00</updated><title type='text'>Moving messages in PINE</title><content type='html'>I'm stuck with using PINE/Mutt at uni - partially because they don't have KMail (or much of KDE for that matter) and mainly because I want to be able to access it over SSH from anywhere.  Today my inbox finally got too big to manage so I started splitting it up into multiple folders and combined the scheme with filters.&lt;br /&gt;&lt;br /&gt;And guess how you save a message in PINE?  Well it's not by pressing 'S' for "Save" (that moves messages between folders).  It's 'E' for "Export".&lt;br /&gt;&lt;br /&gt;In other news, I had a dream where I swear I saw &lt;a href="http://imdb.com/title/tt0438488/"&gt;Terminator 4&lt;/a&gt;.  Great sequel, plot but as with all good dreams, I forgot by the time I had woken up.  Too bad.  Would have sold the plot to the &lt;a href="http://www.governor.ca.gov/"&gt;Governor of California&lt;/a&gt; otherwise.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-114429271161485792?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/114429271161485792/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=114429271161485792' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/114429271161485792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/114429271161485792'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/04/moving-messages-in-pine.html' title='Moving messages in PINE'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23453123.post-114155520191373588</id><published>2006-03-05T21:25:00.000+11:00</published><updated>2006-03-05T21:40:01.920+11:00</updated><title type='text'>Porting to KDE 4</title><content type='html'>I've just managed to compile KDE 4 so that I can port KolourPaint.  A lot of work (thanks mainly to Laurent Montel) has already been done.&lt;br /&gt;&lt;br /&gt;I spent yesterday combing through the 15,000 line diff (actually, I did some tricks to reduce my reading down to 5,000 lines) and fixed 2 main kinds of errors:&lt;br /&gt;&lt;br /&gt;1. qt3to4 remaining variables like "red" to "Qt::red".&lt;br /&gt;&lt;br /&gt;2. "if (!pixmap.mask ())" should not be "if (!pixmap.mask ().isNull ())".  It should be "if (pixmap.mask ().isNull ())".&lt;br /&gt;&lt;br /&gt;KolourPaint exploited Qt3's painting system to the max.  And given the rewrite of the Qt painting system, there's going to have to be a lot more work before KolourPaint compiles, let alone works.  With the addition of proper alpha channel support, Qt seems to have done away with the Qt::NotAndROP and friends.  Going to be tricky to port.&lt;br /&gt;&lt;br /&gt;And I just don't think that breaking source compatibility every few years and saying "now port KDE's several million lines of code" works well.  Something to think about for future Qt's &amp; KDE's.&lt;br /&gt;&lt;br /&gt;Oh, and this is my first blog post :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23453123-114155520191373588?l=clarencedang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clarencedang.blogspot.com/feeds/114155520191373588/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23453123&amp;postID=114155520191373588' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/114155520191373588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23453123/posts/default/114155520191373588'/><link rel='alternate' type='text/html' href='http://clarencedang.blogspot.com/2006/03/porting-to-kde-4.html' title='Porting to KDE 4'/><author><name>Clarence Dang</name><uri>http://www.blogger.com/profile/08341123510905910538</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
