<?xml version="1.0"?>
<rss version="2.0">

<channel>
	<title>Planet Open Ghana</title>
	<link>http://planet.openghana.org/</link>
	<language>en</language>
	<description>Planet Open Ghana - http://planet.openghana.org/</description>

<item>
	<title>Joachim Breitner: How forky may one maintain a Debian package?</title>
	<guid>https://www.joachim-breitner.de/blog/archives/418-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/418-How-forky-may-one-maintain-a-Debian-package.html</link>
	<description>&lt;p&gt;I maintain most of &lt;a href=&quot;http://qa.debian.org/developer.php?login=nomeata@debian.org&quot;&gt;my Debian packages&lt;/a&gt; because I use them myself. Sometimes, I have some needs that go slightly beyond what is currently offered by the software. This is not a problem: Debian ships Free Software and I can program, therefore I can patch the software to also do what I want it to do. Trying to be a good member of the Free Software community, I then submit the patch to the upstream author. If he accepts the patch (which is usually the case), everything is fine. But what if he does not reply to the report or rejects it because he does not want this feature (although the patch is technically fine)? I see two options:&lt;/p&gt; 
&lt;ol&gt; 
&lt;li&gt;I could continue to use a privately patched and built version of the package, while separately building packages for Debian. This way, Debian ships the software as intended by the upstream maintainer while I can use the features I need. On the other hand, I would not be using the version that I upload to Debian, which is not good, and it causes double work when a a new version is released.&lt;/li&gt; 
&lt;li&gt;I could  upload a package to Debian that contains my patch. The technical infrastructure to add patch in Debian packages has always been there... I would actually use the package as it is in Debian and only manage one line of versions. But would I be abusing my powers as a Debian maintainer? If I were not the maintainer, I could not make this decision by myself (this &lt;a href=&quot;http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=579001#12&quot;&gt;happend&lt;/a&gt; with &lt;a href=&quot;http://www.joachim-breitner.de/blog/archives/402-nagstamon-forklet-necessary.html&quot;&gt;my patch to nagstamon&lt;/a&gt;). Plus it could have a negative effect on the Debian-upstream relationship.&lt;/li&gt; 
&lt;/ol&gt;
&lt;p&gt;How do other Debian Developers handle such issues? The actual case I’m considering is a &lt;a href=&quot;https://bugs.launchpad.net/link-monitor-applet/+bug/591644&quot;&gt;feature enhancement for link-monitor-applet&lt;/a&gt; (but I only just wrote the patch, so it does not yet fall in the category “upstream does not reply”).&lt;/p&gt;</description>
	<pubDate>Sat, 17 Jul 2010 19:59:47 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Joachim Breitner: Free Groups Formalized</title>
	<guid>https://www.joachim-breitner.de/blog/archives/404-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/404-Free-Groups-Formalized.html</link>
	<description>&lt;p&gt;Since a few months, I have been playing around with &lt;a href=&quot;http://isabelle.in.tum.de/&quot;&gt;Isabelle&lt;/a&gt;, a theorem prover system. I find it very intriguing to have proofs of mathematical statements checked by something as pendantic and comprehensive as a machine. Mathematicians always claim that their statements are true in all eternity, but the proofs are just checked by error-prone human beings. Especially with complex, large proofs that are only read by a handful of people, I doubt that these are always fully correct. Note that this does not imply that I doubt that the results are correct. They probably are. But a bit of doubt remains. A computer-checked proof, in contrast, can not accidentially omit corner cases, leave out seemingly “trivial” assumtions of used theorems or be misled by slightly differing definition from different sources.&lt;/p&gt; 
&lt;p&gt;I was hoping to check at least parts of my &lt;a href=&quot;http://www.joachim-breitner.de/blog/archives/376-Diploma-Thesis-Finished.html&quot;&gt;diploma thesis&lt;/a&gt; using Isabelle, but it turns out that the &lt;a href=&quot;http://isabelle.in.tum.de/library/HOL/HOL-Algebra/index.html&quot;&gt;standard algebra library&lt;/a&gt; shipped with Isabelle is not complete enough. Even &lt;a href=&quot;http://en.wikipedia.org/wiki/Free_group&quot;&gt;free groups&lt;/a&gt; were missing. This was motivation enough to try to formalize them and prove the universal property and some isomorphisms (The free group over the empty set is the unit group, the free group over one generator is the additive group of integers and free groups over sets of same cardinality are isomophic). I submitted the resulting theory to the &lt;a href=&quot;http://afp.sourceforge.net/&quot;&gt;Archive of Formal Proofs&lt;/a&gt; and it was &lt;a href=&quot;http://afp.sourceforge.net/entries/Free-Groups.shtml&quot;&gt;accepted&lt;/a&gt;. You can view the &lt;a href=&quot;http://afp.sourceforge.net/browser_info/current/HOL/Free-Groups/document.pdf&quot;&gt;complete document&lt;/a&gt; or the &lt;a href=&quot;http://afp.sourceforge.net/browser_info/current/HOL/Free-Groups/outline.pdf&quot;&gt;document without proofs&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;I did not formalize the fact that isomorphic free groups have bases of same cardinality. As far as I know there is no simple argument that works directly with free groups. The proofs I have seen pass to the abelianization of the free group, i.e. the free module over ℤ and apply the well known proof from the analogous statement about vector spaces. But if someone knows an elementary proof of this fact, I’d like to hear about it.&lt;br /&gt;&lt;/p&gt;</description>
	<pubDate>Sat, 03 Jul 2010 10:44:22 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Kofi Boakye: I love my country</title>
	<guid>http://kdex.wordpress.com/?p=38</guid>
	<link>http://kdex.wordpress.com/2010/06/29/i-love-my-country/</link>
	<description>&lt;p&gt;It had to take the on going world cup to really bring the fact home to me &amp;#8230;but i really love my country, mother land and land of my birth , the black star of Africa&amp;#8230;GHANA&amp;#8230;GHANA (GH)  totally rocks&amp;#8230;Go Black Stars and make the whole Africa proud&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://kdex.files.wordpress.com/2010/06/ghana.png&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-41&quot; title=&quot;Ghana&quot; src=&quot;http://kdex.files.wordpress.com/2010/06/ghana.png?w=120&amp;h=80&quot; alt=&quot;&quot; width=&quot;120&quot; height=&quot;80&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/kdex.wordpress.com/38/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/kdex.wordpress.com/38/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/kdex.wordpress.com/38/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/kdex.wordpress.com/38/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/kdex.wordpress.com/38/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/kdex.wordpress.com/38/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/kdex.wordpress.com/38/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/kdex.wordpress.com/38/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/kdex.wordpress.com/38/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/kdex.wordpress.com/38/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=kdex.wordpress.com&amp;blog=1707633&amp;post=38&amp;subd=kdex&amp;ref=&amp;feed=1&quot; /&gt;</description>
	<pubDate>Tue, 29 Jun 2010 14:21:17 +0000</pubDate>
</item>
<item>
	<title>Joachim Breitner: nagstamon forklet necessary</title>
	<guid>https://www.joachim-breitner.de/blog/archives/402-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/402-nagstamon-forklet-necessary.html</link>
	<description>&lt;p&gt;A while ago, I discovered &lt;a href=&quot;http://nagstamon.sourceforge.net/&quot;&gt;nagstamon&lt;/a&gt;, a very useful piece of software by Henri Wahl. This program sits in the notification area of your desktop and alerts you when your &lt;a href=&quot;http://www.nagios.org/&quot;&gt;nagios&lt;/a&gt;-monitored services have problems. Using nagstamon allows me to keep my servers under close surveillance, and it also adds another channel besides e-mail alerts, which will be helpful in case my mail server has problems.&lt;/p&gt; 
&lt;h3&gt;The wish&lt;/h3&gt; 
&lt;p&gt;I am not a full time sysadmin, I only monitor very few hosts and the services rarely have problems. Therefore, I do not want nagstamon to constantly sit in the notification area but only use it when there is something, well, to notify me about. It turned out that nagstamon did not support this mode of operation, so I created &lt;a href=&quot;http://sourceforge.net/tracker/?func=detail&amp;atid=1101373&amp;aid=2972096&amp;group_id=236865&quot;&gt;a ticket&lt;/a&gt; and asked whether this feature could be added. The author raised two points, one being that then the user would not know when nagios crashed and the other being that you would not be able to configure nagstamon because you do not see it. He also indicated that he does not have the resources to work on it and asked if I could find the time.&lt;/p&gt; 
&lt;h3&gt;The patch&lt;/h3&gt; 
&lt;p&gt;Since I really liked nagstamon, but really want to keep my panel uncluttered, I found the time: I created a series of self-containing patches, adding an option for the feature, adding code to prevent more than one instance of nagstamon running in parallel and adding a &amp;quot;&lt;tt&gt;nagstamon --settings&lt;/tt&gt;&amp;quot; flag that would signal the running instance to show the settings – similar to how &lt;a href=&quot;http://www.nongnu.org/mailnotify/&quot;&gt;mail-notification&lt;/a&gt; is been behaving. The author then raised the valid point that some people run more than one instances in parallel, with different configuration options. I then extended the patch to cater for that.&lt;/p&gt; 
&lt;h3&gt;The rebuff&lt;/h3&gt; 
&lt;p&gt;The author remained reserved, did not answer my last commend on the ticket and then, six weeks later, closed the bug without explanation and turned off the possibility to add comments. I can understand when people are reluctant to add contributed features to their code, I often feel the same way. But completely blocking more comments is not a nice way of communicating with possible contributors.&lt;/p&gt; 
&lt;h3&gt;The fork(let)&lt;/h3&gt; 
&lt;p&gt;So I’m left with no option but patching each released version with my changes and building my own package. As I have to do this work anyways, I’d like to share it. You can find my branch in my &lt;a href=&quot;http://git.nomeata.de/?p=nagstamon.git;a=summary&quot;&gt;git repository&lt;/a&gt;. If you happen to want this feature as well and are using a Debian-based distribution, please let me know: I am building modified Debian packages anyways and can publish them as well. As I don’t &lt;em&gt;want&lt;/em&gt; to maintain this fork of nagstamon I don’t plan to diverge any more from Henri’s code, so if you have other feature requests, please talk to him first.&lt;/p&gt;</description>
	<pubDate>Thu, 24 Jun 2010 17:46:40 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Joachim Breitner: bluetile in Debian</title>
	<guid>https://www.joachim-breitner.de/blog/archives/401-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/401-bluetile-in-Debian.html</link>
	<description>&lt;div align=&quot;center&quot;&gt;&lt;a href=&quot;http://bluetile.org/images/bluetile_screenshot2.png&quot;&gt;&lt;img width=&quot;320&quot; height=&quot;240&quot; border=&quot;0&quot; src=&quot;http://bluetile.org/images/bluetile_screenshot2_thumb.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt; 
&lt;p&gt;I just packaged and uploaded Jan Vornberger’s window manager &lt;a href=&quot;http://bluetile.org/&quot;&gt;bluetile&lt;/a&gt; to Debian. This very nice piece of software brings the benefits of a tiling window manager to users who prefer to use the mouse and who don’t want to learn a new programing language to configure their window manager. Bluetile uses the &lt;a href=&quot;http://xmonad.org&quot;&gt;xmonad&lt;/a&gt; libraries and extends them with an easy to use and discoverable user interface.&lt;/p&gt;</description>
	<pubDate>Sat, 12 Jun 2010 18:44:10 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Odzangba Dake: Amarok1.4: Fix Lot’s Of Stale &amp; Orpahned Tracks On Ipod Shuffle</title>
	<guid>http://odzangba.wordpress.com/?p=364</guid>
	<link>http://odzangba.wordpress.com/2010/05/09/amarok1-4-fix-lots-of-stale-orpahned-tracks-on-ipod-shuffle/</link>
	<description>&lt;p&gt;Three days ago, my ipod shuffle started acting weird. Newly synced files would not show up, scanning for &lt;em&gt;&lt;strong&gt;stale and orphaned tracks&lt;/strong&gt; &lt;/em&gt;turned up lots of hits. Unfortunately, I was in a hurry at the time so I deleted the &lt;strong&gt;&lt;em&gt;iPod_Contro&lt;/em&gt;l&lt;/strong&gt; folder on the shuffle and asked Amarok to re-initialize it. That only made things worse &amp;#8211; nothing would play after that. The shuffle&amp;#8217;s indicator lights showed there were no tracks on the device. I finally got some free time this afternoon and tracked down the problem.&lt;/p&gt;
&lt;p&gt;First, I synced some songs with iTunes in my Windows XP VM and the shuffle worked just fine so I concluded that it was a problem with how Amarok was touching the shuffle&amp;#8217;s database. A little googling and I found out libgpod (the library that teaches Amarok how to talk to ipods) was to blame. I&amp;#8217;d done an update earlier in the week that must have introduced some regressions so I downgraded libgpod from &lt;strong&gt;&lt;em&gt;0.7.93-0ubuntu1&lt;/em&gt;&lt;/strong&gt; to &lt;em&gt;&lt;strong&gt;0.7.2-1ubuntu1&lt;/strong&gt;&lt;/em&gt; and problem solved.&lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/odzangba.wordpress.com/364/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/odzangba.wordpress.com/364/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/odzangba.wordpress.com/364/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/odzangba.wordpress.com/364/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/odzangba.wordpress.com/364/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/odzangba.wordpress.com/364/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/odzangba.wordpress.com/364/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/odzangba.wordpress.com/364/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/odzangba.wordpress.com/364/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/odzangba.wordpress.com/364/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=odzangba.wordpress.com&amp;blog=438445&amp;post=364&amp;subd=odzangba&amp;ref=&amp;feed=1&quot; /&gt;</description>
	<pubDate>Sun, 09 May 2010 16:01:58 +0000</pubDate>
</item>
<item>
	<title>Henry Addo: Google Maps Team Launched Driving Directions For Africa – Awesome</title>
	<guid>http://www.addhen.org/blog/?p=138</guid>
	<link>http://www.addhen.org/blog/2010/04/24/google-maps-team-launched-driving-directions-for-africa-awesome/</link>
	<description>&lt;p&gt;The Google maps team finally launched driving directions for Africa. This is something I have been waiting for, for sometime now. Finally its here. :-)&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://google-africa.blogspot.com/2010/04/google-maps-for-africa-gets-better.html&quot;&gt;http://google-africa.blogspot.com/2010/04/google-maps-for-africa-gets-better.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I like this part of the post about the launch.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;So the next time you are in Ghana driving from Kotoka International Airport to Hotel Novotel in Victoria Borg, Accra or you just want to drive from Nairobi to Kampala, visit Google Maps and allow us to help you get to your destination.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Now no more clumsy directions, like we usually do here in Ghana, which goes like, Yeah, go left( its not far ), turn right, you will see a plantain seller at the corner, then go further down the street, there is a house painted black, by pass it and go further until you see a &amp;#8220;shoe shine&amp;#8221; sitting on the other side of the street. Ask around if anyone knows Mr. Pee Jay. He is popular. Once someone says yeah, I know Mr. Pee Jay, that means you are at the right neighbourhood. Then start looking for a house painted red with yellow gate and green walls. Oh gosh, this kind of directions gives me a migraine. By the time the direction is done, you&amp;#8217;ve even forgotten where to start from.&lt;/p&gt;
&lt;p&gt;To satisfy my curiosity. I tested the map direction. Work so well. I can see the direction form Kotoka Airport to Dansoman where I live. Super cool.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;small&gt;&lt;a href=&quot;http://maps.google.com/maps?f=d&amp;source=embed&amp;saddr=Kotoka+International+Airport,+Ghana&amp;daddr=dansoman&amp;hl=en&amp;geocode=FcyEVQAdqm79_ynRLQlD3prfDzFhOXfPydunnw%3BFcOfVAAd4hL8_ymZshIbcZffDzHxJ_sF3dfU_w&amp;mra=ls&amp;sll=37.0625,-95.677068&amp;sspn=46.226656,93.076172&amp;ie=UTF8&amp;ll=5.576055,-0.20846&amp;spn=0.06027,0.0988&quot;&gt;View Larger Map&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;Kudos to Google Maps team for bringing this to us. It will save some of us tons of time. &lt;/p&gt;</description>
	<pubDate>Sat, 24 Apr 2010 17:16:30 +0000</pubDate>
</item>
<item>
	<title>Joachim Breitner: Making dictionary passing explicit in Haskell</title>
	<guid>https://www.joachim-breitner.de/blog/archives/398-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/398-Making-dictionary-passing-explicit-in-Haskell.html</link>
	<description>&lt;p&gt;Haskell provides type classes to support polymorphism. A type class defines a few methods, which can then be implemented for a concrete type in the type class instance. This is a powerful system, but it also has it drawbacks. Most notably, each type can have at most one implementation of the type class. But sometimes you need to use a different implementation.&lt;/p&gt; 
&lt;p&gt;If, for example, you used the &lt;a href=&quot;http://hackage.haskell.org/package/binary&quot;&gt;Binary&lt;/a&gt; class to store data on disk. Now you changed your data type and the binary instance, and you can not read the old data any more. One solution is to re-name your type using “&lt;a href=&quot;http://www.haskell.org/onlinereport/decls.html#sect4.2.3&quot;&gt;newtype&lt;/a&gt;” and implement another type instance for that. Often, this is enough. But still, instances are not first-class-citizens. You can not pass them around or modify them, as you can pass around and modify data and functions.&lt;/p&gt; 
&lt;p&gt;Under the hood of the compiler, things look different. The ghc puts the methods of the instance in a dictionary and passes that implicitly to any functions having a &lt;tt&gt;(Class a)&lt;/tt&gt; constraint. (Other implementations exist though)&amp;#160; If one could make that behavior explicit, one could easily modify the instance before passing it to the function. But this is unfortunately not possible.&lt;/p&gt; 
&lt;p&gt;But it is possible to pass an explicit dictionary along the data. I use the &lt;a href=&quot;http://www.haskell.org/ghc/docs/6.10.2/html/libraries/base/Data-Monoid.html&quot;&gt;&lt;tt&gt;Monoid&lt;/tt&gt;&lt;/a&gt; class as an example, and define a representation of the dictionary to-be-passed, as well as the dictionary of the default instance:&lt;/p&gt; 
&lt;pre&gt;data MonoidDict a = MonoidDict
&amp;#160; { ed_mempty :: a
&amp;#160; , ed_mappend :: a -&amp;gt; a -&amp;gt; a
&amp;#160; }

monoidDict :: Monoid a =&amp;gt; MonoidDict a
monoidDict = MonoidDict mempty mappend&lt;/pre&gt; 
&lt;p&gt;(For conciseness, I ignore the &lt;tt&gt;mconcat&lt;/tt&gt; method.) My first idea was to pass this instance along with data: &lt;tt&gt;(MonoidDict a, a)&lt;/tt&gt;. But this would not work because there are methods, such as &lt;tt&gt;mempty&lt;/tt&gt;, who need the dictionary without getting passed a value to use. Therefore, I need to put the dictionary both in the covariant and the contravariant position:&lt;/p&gt; 
&lt;pre&gt;newtype WithMonoidDict a = WithMonoidDict (MonoidDict a -&amp;gt; (MonoidDict a, a))&lt;/pre&gt; 
&lt;p&gt;We need functions to clamp a dictionary to a value, and to extract it again:&lt;/p&gt; 
&lt;pre&gt;wrapWithCustomMonoidDict :: MonoidDict a -&amp;gt; a -&amp;gt; WithMonoidDict a
wrapWithCustomMonoidDict dict val = WithMonoidDict $ const (dict, val)

extractFromCustomMonoidDict :: MonoidDict a -&amp;gt; WithMonoidDict a -&amp;gt; a
extractFromCustomMonoidDict dict (WithMonoidDict f) = snd (f dict)&lt;/pre&gt; 
&lt;p&gt;Note that both expect the dictionary, so that it can be fed into &lt;tt&gt;WithMonoidDict&lt;/tt&gt; from “both sides”. For convenience, we can define variants that use the standard instance:&lt;/p&gt; 
&lt;pre&gt;wrapWithMonoidDict :: Monoid a =&amp;gt; a -&amp;gt; WithMonoidDict a
wrapWithMonoidDict = wrapWithCustomMonoidDict monoidDict

extractFromMonoidDict :: Monoid a =&amp;gt; WithMonoidDict a -&amp;gt; a
extractFromMonoidDict = extractFromCustomMonoidDict monoidDict&lt;/pre&gt; 
&lt;p&gt;We want to be able to pass the wrapped values as any other value with a Monoid instance, so we need to declare that:&lt;/p&gt; 
&lt;pre&gt;instance Monoid (WithMonoidDict a) where
&amp;#160;&amp;#160;&amp;#160; mempty = WithMonoidDict (\d -&amp;gt; (d, ed_mempty d))
&amp;#160;&amp;#160;&amp;#160; mappend (WithMonoidDict f1) (WithMonoidDict f2) = WithMonoidDict $ \d -&amp;gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; let (d1,v1) = f1 d
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; (d2,v2) = f2 d
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; in&amp;#160; (d1, ed_mappend d1 v1 v2)&lt;/pre&gt; 
&lt;p&gt;Note that mappend has the choice between three dictionaries This is not a good sign, but let’s hope that they are all the same.&lt;/p&gt; 
&lt;p&gt;Does it work? Let’s see:&lt;/p&gt; 
&lt;pre&gt;listInstance :: MonoidDict [a]
listInstance = monoidDict

reverseInstance :: MonoidDict [a]
reverseInstance = monoidDict { ed_mappend = \l1 l2 -&amp;gt; l2 ++ l1 }

examples = do
&amp;#160;&amp;#160;&amp;#160; let l1 = [1,2,3]
&amp;#160;&amp;#160;&amp;#160; let l2 = [4,5,6]
&amp;#160;&amp;#160;&amp;#160; putStrLn $ &quot;Example lists: &quot; ++ show l1 ++ &quot; &quot; ++ show l2
&amp;#160;&amp;#160;&amp;#160; putStrLn $ &quot;l1 ++ l2: &quot; ++ show (l1 ++ l2) 
&amp;#160;&amp;#160;&amp;#160; putStrLn $ &quot;l1 `mappend` l2: &quot; ++ show (l1 `mappend` l2) 
&amp;#160;&amp;#160;&amp;#160; putStrLn $ &quot;Wrapped with default instance:&quot;
&amp;#160;&amp;#160;&amp;#160; putStrLn $ &quot;l1 `mappend` l2: &quot; ++ show (
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; extractFromMonoidDict $ wrapWithMonoidDict l1 `mappend` wrapWithMonoidDict l2)
&amp;#160;&amp;#160;&amp;#160; putStrLn $ &quot;Same with reversed monoid instance:&quot;
&amp;#160;&amp;#160;&amp;#160; putStrLn $ &quot;l1 `mappend` l2: &quot; ++ show (
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; extractFromCustomMonoidDict reverseInstance $
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; wrapWithCustomMonoidDict reverseInstance l1 `mappend`
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; wrapWithCustomMonoidDict reverseInstance l2)&lt;/pre&gt; 
&lt;p&gt;Running examples gives this output:&lt;/p&gt; 
&lt;pre&gt;Example lists: [1,2,3] [4,5,6]
l1 ++ l2: [1,2,3,4,5,6]
l1 `mappend` l2: [1,2,3,4,5,6]
Wrapped with default instance:
l1 `mappend` l2: [1,2,3,4,5,6]
Same with reversed monoid instance:
l1 `mappend` l2: [4,5,6,1,2,3]&lt;/pre&gt; 
&lt;p&gt;Indeed it works.&lt;/p&gt; 
&lt;p&gt;Unfortunately, this approach is not sufficient for all cases. It is perfectly valid to have a function with signature (&lt;tt&gt;Monoid a =&amp;gt; Maybe a -&amp;gt; Maybe a&lt;/tt&gt;), whose behavior depends on the instance of a, even when being passed Nothing and returning Nothing. Such a function would have a problem here, because the dictionary would not be passed to the function.&lt;br /&gt;&lt;/p&gt; 
&lt;p&gt;I wonder if it would be possible to extend the Haskell language somehow to be able to properly pass an alternative dictionary to such functions. But given that not all compilers use dictionary passing, my hopes are low.&lt;br /&gt;&lt;/p&gt;</description>
	<pubDate>Fri, 23 Apr 2010 12:56:55 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Joachim Breitner: A mathematician’s status symbol</title>
	<guid>https://www.joachim-breitner.de/blog/archives/395-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/395-A-mathematicians-status-symbol.html</link>
	<description>&lt;p&gt;While writing my diploma thesis, I often wished I had a blackboard in my room: A place to quickly scribble some ideas on, somewhere where I can easily erease and replace stuff. Also, somewhere where you can literally (and not just &lt;a href=&quot;http://xkcd.com/725/&quot;&gt;figuratively&lt;/a&gt;) step back from and look at from the distance.&lt;/p&gt; 
&lt;p&gt;For my 25&lt;sup&gt;th&lt;/sup&gt; birthday, my parents organized a discharged part of a blackboard from my old scool, and yesterday, we installed it in my room in Karlsruhe:&lt;/p&gt; 
&lt;div align=&quot;center&quot;&gt;&lt;img width=&quot;1000&quot; height=&quot;750&quot; src=&quot;http://www.joachim-breitner.de/various/blackboard.jpg&quot; alt=&quot;A blackboard in my room&quot; /&gt;&lt;/div&gt; 
&lt;p&gt;Although my &lt;a href=&quot;http://www.joachim-breitner.de/blog/archives/376-Diploma-Thesis-Finished.html&quot;&gt;diploma thesis is finished&lt;/a&gt;, I’m sure it will be a nice and useful piece of furniture, and if only to draw funny things on (as my girlfriend did on this picture).&lt;/p&gt;</description>
	<pubDate>Thu, 15 Apr 2010 10:16:30 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Joachim Breitner: zpub article in “Linux-Magazin”</title>
	<guid>https://www.joachim-breitner.de/blog/archives/394-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/394-zpub-article-in-Linux-Magazin.html</link>
	<description>&lt;p&gt;The 05/2010 issue of the German “&lt;a href=&quot;http://www.linux-magazin.de/Heft-Abo/Ausgaben/2010/05&quot;&gt;Linux-Magazin&lt;/a&gt;“ contains an article of mine about &lt;a href=&quot;http://en.wikipedia.org/wiki/DocBook&quot;&gt;DocBook&lt;/a&gt;, &lt;a href=&quot;http://subversion.tigris.org/&quot;&gt;Subversion&lt;/a&gt; and &lt;a href=&quot;http://www.zpub.de/&quot;&gt;zpub&lt;/a&gt;. I was quite surprised to find it there – I submitted it in January and did not receive any feedback. But of course it is a nice surprise to find out it was accepted!&lt;/p&gt;
&lt;p&gt;The article, the zpub website and zpub itself is only available in German so far, but there is an &lt;a href=&quot;http://www.joachim-breitner.de/blog/archives/346-Releasing-zpub-as-Free-Software.html&quot;&gt;English blog post describing zpub&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;</description>
	<pubDate>Thu, 15 Apr 2010 09:32:50 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Joachim Breitner: libnss-gw-name: A stable name for your gateway</title>
	<guid>https://www.joachim-breitner.de/blog/archives/390-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/390-libnss-gw-name-A-stable-name-for-your-gateway.html</link>
	<description>&lt;p&gt;I often find myself running &lt;tt&gt;/sbin/route&lt;/tt&gt; to get the IP address of the current gateway, especially when using a wireless LAN while traveling. For example, if the “Internet does not work” I usually ping the local gateway to see where the connectivity problem lies. I also need the IP if I want to access the routers configuration web interface. This is somewhat tedious, so I wrote &lt;a href=&quot;http://www.joachim-breitner.de/projects#libnss-gw-name&quot;&gt;libnss-gw-name&lt;/a&gt;, and now:&lt;/p&gt; 
&lt;pre&gt;$ sudo apt-get install libnss-gw-name
[...]
$ ping gateway.current
PING gateway.current (172.20.239.1) 56(84) bytes of data.
64 bytes from hhicalvin.stud.uni-karlsruhe.de (172.20.239.1): icmp_seq=1 ttl=64 time=2.16 ms
64 bytes from hhicalvin.stud.uni-karlsruhe.de (172.20.239.1): icmp_seq=2 ttl=64 time=1.48 ms
64 bytes from hhicalvin.stud.uni-karlsruhe.de (172.20.239.1): icmp_seq=3 ttl=64 time=2.73 ms
^C
--- gateway.current ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 1.482/2.129/2.739/0.513 ms&lt;/pre&gt; 
&lt;p&gt;Once libnss-gw-name is installed, it hooks into the system’s &lt;a href=&quot;http://en.wikipedia.org/wiki/Name_Service_Switch&quot;&gt;Name Service Switch&lt;/a&gt;, which is, among other things, responsible for resolving hostnames to ip addresses. It will only react on the name “gateway.current”, checking the system’s routing table and returning the IP address of the current default gateway.&lt;/p&gt; 
&lt;p&gt;It’s a pretty simple and small tool, but it could well prove very handy to the power user. I uploaded &lt;a href=&quot;http://packages.debian.org/sid/libnss-gw-name&quot;&gt;libnss-gw-name to Debian sid&lt;/a&gt;, you can &lt;a href=&quot;http://www.joachim-breitner.de/archive/libnss-gw-name/&quot;&gt;download the source code&lt;/a&gt; or access the &lt;a href=&quot;http://git.nomeata.de/?p=libnss-gw-name.git&quot;&gt;git repository&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: Changed the name to gateway.localhost, as that is within a reserved top-level-domain.&lt;br /&gt;&lt;/p&gt;</description>
	<pubDate>Thu, 18 Mar 2010 20:40:21 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Joachim Breitner: Video of my CeBIT talk online</title>
	<guid>https://www.joachim-breitner.de/blog/archives/389-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/389-Video-of-my-CeBIT-talk-online.html</link>
	<description>&lt;p&gt;As &lt;a href=&quot;http://blog.schmehl.info/Debian/events/cebit-2010/video-online&quot;&gt;tolimar already said&lt;/a&gt;, videos of talks at the Linux New Media booth at CeBIT are &lt;a href=&quot;http://www.techcast.com/events/cebit10/&quot;&gt;online&lt;/a&gt; now, including &lt;a href=&quot;http://www.techcast.com/events/cebit10/mi07-breitner/&quot;&gt;mine about how to submit patches&lt;/a&gt;. It is in German, though.&lt;/p&gt;</description>
	<pubDate>Thu, 18 Mar 2010 16:18:32 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Joachim Breitner: kexec saved my day</title>
	<guid>https://www.joachim-breitner.de/blog/archives/386-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/386-kexec-saved-my-day.html</link>
	<description>&lt;p&gt;Yesterday evening, when returning from a two-day trip with no connectivity, I found my server to be broken. I still reacted on ping, but no service would respond. I tried to restart it using my hoster’s web interface, but it would not come back up.&lt;/p&gt; 
&lt;p&gt;I booted into the recovery system and checked the hard disk, but could not find any issues. File system checks went through without a hitch. But it would still not boot. Unfortunately, my hoster does not provide access to the system console, so I had no idea what was going wrong.&lt;/p&gt; 
&lt;p&gt;I never did anything with &lt;a href=&quot;http://en.wikipedia.org/wiki/Kexec&quot;&gt;kexec&lt;/a&gt;, (a relatively new feature of the Linux kernel to act as a bootloader to load another system) and I was very positively surprised to find that it works out-of-the-box and flawlessly: I was able to load my system’s kernel and initrd from the recovery system and successfully booted it. I then ran lilo and rebooted right again, which now worked. I’m not sure if running lilo fixed it, or the clean shut-down, nor do I know what caused the problem in the first place, but kexec saved my day here.&lt;br /&gt;&lt;/p&gt;</description>
	<pubDate>Tue, 16 Mar 2010 10:38:28 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Henry Addo: Away From Home</title>
	<guid>http://www.addhen.org/blog/?p=131</guid>
	<link>http://www.addhen.org/blog/2010/03/16/away-from-home/</link>
	<description>&lt;div class=&quot;wp-caption aligncenter&quot;&gt;&lt;img title=&quot;Kumasi road&quot; src=&quot;http://lh6.ggpht.com/_SnaF3sehqPA/S57AskRF5cI/AAAAAAAAES0/qENwGHCiTB4/blog6.JPG&quot; alt=&quot;Kumasi road&quot; width=&quot;450&quot; height=&quot;338&quot; /&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Kumasi road&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;
&lt;p&gt;I got really tired of Accra because of the scorching sun and the unbearable humidity. So I decided to geek out at a different location and headed straight to&lt;a href=&quot;http://en.wikipedia.org/wiki/Sunyani&quot;&gt; Sunyani, Brong Ahafo&lt;/a&gt;. Also I have had this pending motorcycle trip to Sunyani for a while, so I decided to do it this time.&lt;/p&gt;
&lt;div class=&quot;wp-caption aligncenter&quot;&gt;&lt;img title=&quot;Me on the motorcycle&quot; src=&quot;http://lh4.ggpht.com/_SnaF3sehqPA/S5665MPJLAI/AAAAAAAAESY/kXOZbU_T7Hk/blog1.JPG&quot; alt=&quot;Me on the motorcycle&quot; width=&quot;450&quot; height=&quot;338&quot; /&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Me on the motorcycle&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;On Wednesday morning, I packed up my backpack, took my camera and G1 Android powered( courtesy Google Ghana ) phone and rode all the way from Accra to Sunyani. It was my longest motorcycle trip. The distance about is about 383.01 km (238.0 mi). Made few stops on the way for photos. I saw lots of accidents on the road, even saw a fresh accident, involving two vehicles, veered off the road into the bush. This got me a bit scared but I was so determined to get to my destination safely.&lt;/p&gt;
&lt;div class=&quot;wp-caption aligncenter&quot;&gt;&lt;img title=&quot;Linda Dor&quot; src=&quot;http://lh3.ggpht.com/_SnaF3sehqPA/S57AsLdg0bI/AAAAAAAAESk/pZecdoyXhcI/blog2.JPG&quot; alt=&quot;Linda Dor&quot; width=&quot;450&quot; height=&quot;338&quot; /&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Linda Dor&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;My first stop was at the famous Linda Dor restaurant on the Accra &amp;#8211; Kumasi road. There, I rested for about 15 minutes, stretched , peed, jumped back onto the bike and headed straight to Nkwakwa. On the Nkwakwa road, I saw this huge mountain with masts on it. Caught my eyes so I decided to document it.&lt;/p&gt;
&lt;div class=&quot;wp-caption aligncenter&quot;&gt;&lt;img title=&quot;Nkwakwa&quot; src=&quot;http://lh4.ggpht.com/_SnaF3sehqPA/S57AsAjRBQI/AAAAAAAAESo/DifFvK-f2q0/blog3.JPG&quot; alt=&quot;Nkwakwa&quot; width=&quot;450&quot; height=&quot;338&quot; /&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Nkwakwa&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;From Nkwakwa rode about half an hour to a fuel filling station to top up the tank. From there, I rode straight up to kumasi where I rode through Kejetia finding my way to the Sunyani road. I rested in Kumasi for about an hour, drinking and socializing with the local people I met at the bar. I also charged up my dead phones to get them back to function.&lt;/p&gt;
&lt;div class=&quot;wp-caption aligncenter&quot;&gt;&lt;img title=&quot;Kumasi&quot; src=&quot;http://lh5.ggpht.com/_SnaF3sehqPA/S57AsUsZ_cI/AAAAAAAAESw/-O_FNgrazZY/blog5.JPG&quot; alt=&quot;Kumasi&quot; width=&quot;450&quot; height=&quot;338&quot; /&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Kumasi&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;
&lt;p&gt;After resting in Kumasi, the second trip started. I rode into the night to Sunyani. I made it to Sunyani about 2 hours. On the road, I got high way night riding experience. Riding in the night wasn&amp;#8217;t fun at all if you ask me. Vision wasn&amp;#8217;t so clear ,so riding became extremely dangerous. There were lots of insects on the road. They got tricked by the headlights, thinking they have got a place to linker on but rather got busted on the helmet and the riding jacket. If you are very sensitive to slight pains, then night riding isn&amp;#8217;t for you. You might scream and if you don&amp;#8217;t take care, you might lose your balance.&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;aligncenter&quot; title=&quot;Sunyani&quot; src=&quot;http://lh6.ggpht.com/_SnaF3sehqPA/S57UzvnN7QI/AAAAAAAAETA/LX5l80j7Dk8/blog7.jpg&quot; alt=&quot;Sunyani&quot; width=&quot;450&quot; height=&quot;338&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I documented my trip on Google maps using My tracks to record the journey.&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;&lt;small&gt;View &lt;a href=&quot;http://maps.google.com.gh/maps/ms?ie=UTF8&amp;hl=en&amp;msa=0&amp;msid=102921804835279272593.000481dc319f531679fc2&amp;ll=7.262105,-2.214112&amp;spn=0.187385,0.233776&amp;source=embed&quot;&gt;Sunyani Trip&lt;/a&gt; in a larger map&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;The trip was a good one. Worth the effort and the money spent on the journey.  Sunyani&amp;#8217;s weather was much bearable. It was a bit colder compared to Accra&amp;#8217;s and I managed to touch base with a long time friend. She was really happy to see me after 3 years not seeing each other. The only issue I have in Sunyani was the poor connectivity but hey, better than nothing. I managed to get down at work. I&amp;#8217;m going to do this again but a different location.&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;</description>
	<pubDate>Tue, 16 Mar 2010 01:12:59 +0000</pubDate>
</item>
<item>
	<title>Joachim Breitner: Talking at CeBIT tomorrow</title>
	<guid>https://www.joachim-breitner.de/blog/archives/384-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/384-Talking-at-CeBIT-tomorrow.html</link>
	<description>&lt;p&gt;Today, I arrived at the &lt;a href=&quot;http://www.cebit.de/&quot;&gt;CeBIT&lt;/a&gt; conference in Hannover, and had a first look around. I find trade fairs like that quickly boring, and I was glad to meet some some other Debian folk and listen to some of the talks at the CeBIT Open Source Forum in hall 2, including &lt;a href=&quot;http://blog.schmehl.info/2010/03/02&quot;&gt;tolimar’s talk about Debian GNU/kFreeBSD&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Tomorrow (Wednesday), I will talk at the same place at 13:45, explaining some basic stuff about patches and bug tracker. The target audience are users of Free Software who modify it for their private or company-wide use and would like to see their changes included in the official project. There will be a &lt;a href=&quot;http://www.techcast.com/events/cebit10/&quot;&gt;live stream&lt;/a&gt; of the talk, which I am officially holding as an employee of the &lt;a href=&quot;http://www.itomig.de/&quot;&gt;ITOMIG GmbH&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;</description>
	<pubDate>Tue, 02 Mar 2010 20:02:29 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Joachim Breitner: Teeth fashion</title>
	<guid>https://www.joachim-breitner.de/blog/archives/382-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/382-Teeth-fashion.html</link>
	<description>&lt;p&gt;Has anyone ever considered wearing his teeth consistent with the rest of ones cloths?&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;&lt;img src=&quot;http://www.joachim-breitner.de/various/teeth-fashion.jpg&quot; width=&quot;700&quot; height=&quot;942&quot; /&gt;&lt;/p&gt;</description>
	<pubDate>Mon, 01 Mar 2010 11:49:11 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Joachim Breitner: Exploiting sharing in arbtt</title>
	<guid>https://www.joachim-breitner.de/blog/archives/381-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/381-Exploiting-sharing-in-arbtt.html</link>
	<description>&lt;p&gt;My &lt;a href=&quot;http://www.joachim-breitner.de/projects#arbtt&quot;&gt;automatic rule-based time tracker&lt;/a&gt; (arbtt), which is written in Haskell, collects every minute a data sample consisting mainly of the list of currently open windows (window title and program name). Naturally, this log grows rather large. Since October of last year, I collected 70,000 samples. I already went &lt;a href=&quot;http://www.joachim-breitner.de/blog/archives/341-arbtt-goes-Binary.html&quot;&gt;from a text-based file format to a binary format&lt;/a&gt; using Data.Binary, which gave a big performance boost.&lt;br /&gt;&lt;/p&gt; 
&lt;p&gt;But by now, I was afraid that this is not enough. My log file is now 30MB large. Looking at the memory graph of gnome-panel, it is taking up more than half of my memory. When running arbtt-stats, the Haskell run time system reports 569 MB total memory in use and the command finishes after 28.5 seconds.&lt;/p&gt; 
&lt;p&gt;Naturally, the log file is highly redundant: Compressing it with bzip2 shrinks it to 1.6MB. But as I would like to preserve the ability to just append samples at the end, without having to read the file, I chose not just to add bzip2 or gzip compression. Rather, I am now exploiting a very obvious redundancy: Two adjacent samples usually list exactly the same windows, and a focus change only changes a flag. So now, when storing a string that is part of a sample, it will check if this string was already present in the previous sample and, in this case, just store the number of that string (one byte). Only if the string was not present it will write a zero byte and then the string. When reading the sample, the process is reversed.&lt;/p&gt; 
&lt;p&gt;This greatly reduces the file size: It is down to 6.2MB. It also improves the memory consumption, due to Haskell’s abilities with regard to sharing: When a reference to a string in a previous sample is read, then only one instance of this string is in memory, even if it occurs several times in the log. This brings the memory consumption down to 264 MB and the runtime to 17 seconds.&lt;/p&gt; 
&lt;p&gt;I released the changes as version 0.4.5.1 to &lt;a href=&quot;http://hackage.haskell.org/package/arbtt&quot;&gt;Hackage&lt;/a&gt;, &lt;a href=&quot;http://packages.debian.org/sid/arbtt&quot;&gt;Debian&lt;/a&gt; and as a &lt;a href=&quot;http://www.joachim-breitner.de/archive/arbtt/arbtt-setup-0.4.5.1.exe&quot;&gt;Windows installer&lt;/a&gt;. The log file is not automatically converted, but new samples will be written in the compressed format. If you want to convert your whole file, you have to stop arbtt-capture, run arbtt-recover, and then move the hopefully noticeable smaller &lt;a href=&quot;http://capture.log.recovered&quot;&gt;~/.arbtt/capture.log.recovered&lt;/a&gt;&amp;#160; to ~/.arbtt/capture.log.&lt;br /&gt;&lt;/p&gt; 
&lt;p&gt;The &lt;a href=&quot;http://darcs.nomeata.de/cgi-bin/darcsweb.cgi?r=arbtt;a=commitdiff;h=20100228205945-23c07-136eaf3cc7bd5c4e6f7b67f4d0cee1ac4433133e.gz&quot;&gt;required code changes&lt;/a&gt; were not too big. I somewhat isolated the relevant code in the &lt;a href=&quot;http://darcs.nomeata.de/arbtt/src/Data/Binary/StringRef.hs&quot;&gt;Data.Binary.StringRef&lt;/a&gt; module. Unfortunately, I have to use OverlappingInstances to be able to provide the special instance for String – is there a cleaner way (besides the trick used for the Show class)?&lt;br /&gt;&lt;/p&gt;</description>
	<pubDate>Sun, 28 Feb 2010 22:04:48 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Odzangba Dake: Optimize Your Internet Speed With Namebench DNS Benchmarking Tool</title>
	<guid>http://odzangba.wordpress.com/?p=357</guid>
	<link>http://odzangba.wordpress.com/2010/02/21/optimize-your-internet-speed-with-namebench-dns-benchmarking-tool/</link>
	<description>&lt;p&gt;&lt;!-- p, li { white-space: pre-wrap; } --&gt;&lt;!--StartFragment--&gt;&lt;strong&gt;DNS Crash Course&lt;/strong&gt;&lt;br /&gt;
The Domain Name System (DNS) resolves domain names like&lt;strong&gt; www.wordpress.com&lt;/strong&gt; into a series of digits (&lt;strong&gt;74.200.247.60&lt;/strong&gt;) that computers can understand. Your browser typically hands over website names to a DNS server and receives &lt;strong&gt;IP Addresses&lt;/strong&gt; in return. Most Internet Service Providers provide a DNS server for their customers to help speed up browsing and downloads.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In Comes Namebench&lt;/strong&gt;&lt;br /&gt;
Namebench is a DNS benchmarking application available for the Linux, Windows and Mac OS X. It uses either your web browser’s history or a standardized test data set to find out which DNS service returns the fastest results for your location.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Installing Namebench&lt;/strong&gt;&lt;br /&gt;
Download and run Namebench from the Google Code repository &lt;a title=&quot;Download namebench&quot; href=&quot;http://code.google.com/p/namebench/&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ubuntu Users&lt;/strong&gt;&lt;br /&gt;
The people at &lt;a href=&quot;http://www.getdeb.net/software/namebench&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;GetDeb&lt;/strong&gt;&lt;/a&gt; have packaged a deb for Namebench. You can add their repository &lt;a title=&quot;GetDeb Repository&quot; href=&quot;http://www.getdeb.net/updates/Ubuntu/all#how_to_install&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Using Namebench&lt;/strong&gt;&lt;br /&gt;
Close all internet-aware applications before you start Namebench. We don&amp;#8217;t want those applications competing with Namebench for your bandwidth and distorting the results. Launch Namebench (Internet &amp;#8211;&amp;gt; namebench for Ubuntu users.) You&amp;#8217;ll see an interface like this:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://odzangba.files.wordpress.com/2010/02/screenshot-namebench.png&quot;&gt;&lt;img class=&quot;size-full wp-image-350 aligncenter&quot; title=&quot;Namebench Application Window&quot; src=&quot;http://odzangba.files.wordpress.com/2010/02/screenshot-namebench.png?w=500&amp;h=265&quot; alt=&quot;Namebench Application Window&quot; width=&quot;500&quot; height=&quot;265&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;Nameservers&lt;/strong&gt; are the DNS servers you are currently using. You can add other nameservers to this list (separate them with a comma or space.) The default settings are usually okay for most people so just click &lt;strong&gt;Start Benchmark.&lt;/strong&gt; Google has a more detailed explanation of the settings &lt;a href=&quot;http://code.google.com/p/namebench/wiki/UsingNameBench&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;. The test takes &lt;strong&gt;10 &amp;#8211; 20 minutes&lt;/strong&gt; so you can take a sandwich break or something. &lt;img src=&quot;http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Nambench Results&lt;/strong&gt;&lt;br /&gt;
After the test completes, your web browser starts up to show you the results.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://odzangba.files.wordpress.com/2010/02/nb1.png&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-351&quot; title=&quot;Namebench Results&quot; src=&quot;http://odzangba.files.wordpress.com/2010/02/nb1.png?w=500&amp;h=119&quot; alt=&quot;Namebench Results&quot; width=&quot;500&quot; height=&quot;119&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
As you can see, my primary DNS server&amp;#8217;s performance is pretty sweet. That&amp;#8217;s to be expected though&amp;#8230; it&amp;#8217;s a local server so some cached queries must have been involved. On the right, Namebench recommends the optimum nameserver setup for my machine. It seems I&amp;#8217;ll have to switch my fall-back namservers from OpenDNS to one in the Netherlands and another in Kenya.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://odzangba.files.wordpress.com/2010/02/nb2.png&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-353&quot; title=&quot;Response Times&quot; src=&quot;http://odzangba.files.wordpress.com/2010/02/nb2.png?w=500&amp;h=382&quot; alt=&quot;&quot; width=&quot;500&quot; height=&quot;382&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This table shows the DNS servers that were used in the test, resonse times, notes and errors if any. I&amp;#8217;ve got some tweaking to do, it seems.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Moving on&amp;#8230;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://odzangba.files.wordpress.com/2010/02/nb3.png&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-354&quot; title=&quot;Average and Fastest Responses&quot; src=&quot;http://odzangba.files.wordpress.com/2010/02/nb3.png?w=500&amp;h=339&quot; alt=&quot;Average and Fastest Responses&quot; width=&quot;500&quot; height=&quot;339&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This graph shows the &lt;strong&gt;average&lt;/strong&gt; and &lt;strong&gt;fastest&lt;/strong&gt; response times for the top 10 nameservers.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://odzangba.files.wordpress.com/2010/02/nb4.png&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-355&quot; title=&quot;Response Distribution Chart (First 200ms)&quot; src=&quot;http://odzangba.files.wordpress.com/2010/02/nb4.png?w=500&amp;h=289&quot; alt=&quot;Response Distribution Chart (First 200ms)&quot; width=&quot;500&quot; height=&quot;289&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This one shows the percentage of times a response was received from a server within the first 200 milliseconds.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://odzangba.files.wordpress.com/2010/02/nb5.png&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-356&quot; title=&quot;Response Distribution Chart (Full)&quot; src=&quot;http://odzangba.files.wordpress.com/2010/02/nb5.png?w=500&amp;h=289&quot; alt=&quot;Response Distribution Chart (Full)&quot; width=&quot;500&quot; height=&quot;289&quot; /&gt;&lt;br /&gt;
&lt;/a&gt;This last graph shows the percentage of times a response was received from a server for the entire test duration.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Making Changes&lt;/strong&gt;&lt;br /&gt;
There&amp;#8217;s a great article &lt;a title=&quot;How to configure your DNS servers&quot; href=&quot;http://shibuvarkala.blogspot.com/2009/12/how-to-setup-google-public-dns-in.html&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt; on how to change your DNS servers in Ubuntu. Use the fastest servers from your Namebench test. Windows and Mac users can take a look &lt;a href=&quot;http://code.google.com/speed/public-dns/docs/using.html#testing&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt; to learn how to change DNS settings. Have fun. &lt;img src=&quot;http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;!--EndFragment--&gt;&lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/odzangba.wordpress.com/357/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/odzangba.wordpress.com/357/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/odzangba.wordpress.com/357/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/odzangba.wordpress.com/357/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/odzangba.wordpress.com/357/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/odzangba.wordpress.com/357/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/odzangba.wordpress.com/357/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/odzangba.wordpress.com/357/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/odzangba.wordpress.com/357/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/odzangba.wordpress.com/357/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=odzangba.wordpress.com&amp;blog=438445&amp;post=357&amp;subd=odzangba&amp;ref=&amp;feed=1&quot; /&gt;</description>
	<pubDate>Sun, 21 Feb 2010 19:29:36 +0000</pubDate>
</item>
<item>
	<title>Odzangba Dake: How To Free Reserved Space On EXT4 Partitions</title>
	<guid>http://odzangba.wordpress.com/?p=344</guid>
	<link>http://odzangba.wordpress.com/2010/02/20/how-to-free-reserved-space-on-ext4-partitions/</link>
	<description>&lt;p&gt;&lt;!-- p, li { white-space: pre-wrap; } --&gt;&lt;!--StartFragment--&gt;This one came in handy when I bought a 1TB hard drive last week. Most linux distributions reserve 5% of new partitions for the root user and system services. The idea here is even when you run out of disk space, the root user should still be able to log in and system services should still run&amp;#8230; this won&amp;#8217;t happen if there is no space on the root partition. This policy may have been appropriate in the 90s when hard disk capacities were relatively low but this is 2010 and one can get a 1TB hard drive for a couple of hundred Ghana Cedis. 5% of that is about 51GB and those system services need only a couple of hundred megabytes.&lt;/p&gt;
&lt;p&gt;So I decided to reclaim all that disk real estate with this command:&lt;/p&gt;
&lt;p&gt;sudo tune2fs -m 0 /dev/sdb1&lt;/p&gt;
&lt;p&gt;This sets the reserved blocks to 0%. This is an additional storage drive, I have no need to reserve disk space for system services. You can verify that this actually worked with:&lt;/p&gt;
&lt;p&gt;sudo tune2fs -l /dev/sdb1 | grep &amp;#8216;Reserved block count&amp;#8217;&lt;/p&gt;
&lt;p&gt;As usual, modify &lt;strong&gt;/dev/sdb1&lt;/strong&gt; to suit your partition setup. Have fun. &lt;img src=&quot;http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif&quot; alt=&quot;:D&quot; class=&quot;wp-smiley&quot; /&gt; &lt;!--EndFragment--&gt;&lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/odzangba.wordpress.com/344/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/odzangba.wordpress.com/344/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/odzangba.wordpress.com/344/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/odzangba.wordpress.com/344/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/odzangba.wordpress.com/344/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/odzangba.wordpress.com/344/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/odzangba.wordpress.com/344/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/odzangba.wordpress.com/344/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/odzangba.wordpress.com/344/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/odzangba.wordpress.com/344/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=odzangba.wordpress.com&amp;blog=438445&amp;post=344&amp;subd=odzangba&amp;ref=&amp;feed=1&quot; /&gt;</description>
	<pubDate>Sat, 20 Feb 2010 20:46:56 +0000</pubDate>
</item>
<item>
	<title>Joachim Breitner: Diploma Thesis Finished</title>
	<guid>https://www.joachim-breitner.de/blog/archives/376-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/376-Diploma-Thesis-Finished.html</link>
	<description>&lt;p&gt;Earlier today, I went to a local copy shop and had my diploma thesis printed. This afternoon, I will hand it in. The title is “&lt;a href=&quot;http://www.joachim-breitner.de/various/DA/LoopSubgroupDiplomaThesis.pdf&quot;&gt;Loop subgroups of F&lt;sub&gt;r&lt;/sub&gt; and the images of their stabilizer subgroups in GL&lt;sub&gt;r&lt;/sub&gt;(ℤ)&lt;/a&gt;” and discusses a group-theoretical result. I assume that very few readers care about the content of the thesis, but maybe some are interested in a few assorted LaTeX hints. I’m also publishing the &lt;a href=&quot;http://www.joachim-breitner.de/various/DA/LoopSubgroupDiplomaThesis.tex&quot;&gt;full TeX source code&lt;/a&gt;, maybe someone can make use of it.&lt;/p&gt; 
&lt;h3&gt;Less chatty varioref&lt;/h3&gt; 
&lt;p&gt;I’m using the &lt;a href=&quot;http://tug.ctan.org/cgi-bin/ctanPackageInformation.py?id=varioref&quot;&gt;&lt;tt&gt;varioref&lt;/tt&gt;&lt;/a&gt; package, in conjunction with the &lt;a href=&quot;http://tug.ctan.org/cgi-bin/ctanPackageInformation.py?id=cleveref&quot;&gt;&lt;tt&gt;cleveref&lt;/tt&gt;&lt;/a&gt; package. This provides a command &lt;tt&gt;\vref{fig:S3S4l}&lt;/tt&gt; which will expand to, for example, to “Figure 1 on page 11”. But if the referenced figure is actually on the current page, the next page, the previous page or the facing page (in two-side layouts), it will say so: “Figure 1 on this page.” &lt;/p&gt; 
&lt;p&gt;This is very nice, but I assume that the reader of my thesis is able to find Figure 1 when it is visible, i.e. on the current or facing page. One can remove the referencing texts with the commands &lt;tt&gt;\def\reftextfaceafter{}&lt;/tt&gt;, &lt;tt&gt;\def\reftextfacebefore{}&lt;/tt&gt; and &lt;tt&gt;\def\reftextcurrent{}&lt;/tt&gt;. But because &lt;tt&gt;varioref&lt;/tt&gt; puts a space between “Figure 1” and this text, we will get a superfluous space – even before punctuation.&lt;/p&gt; 
&lt;p&gt;The remedy is the command &lt;tt&gt;\unskip&lt;/tt&gt;, which removes this space again. So I use in my preamble:&lt;/p&gt; 
&lt;pre&gt;\def\reftextfaceafter {\unskip}%
\def\reftextfacebefore{\unskip}%
\def\reftextcurrent   {\unskip}%&lt;/pre&gt; 
&lt;h3&gt;Palatino and extra leading&lt;/h3&gt; 
&lt;p&gt;I chose the Palatino font for my thesis, using the &lt;a href=&quot;http://tug.ctan.org/cgi-bin/ctanPackageInformation.py?id=mathpazo&quot;&gt;&lt;tt&gt;mathpazo&lt;/tt&gt;&lt;/a&gt; package. Various sources (such as the &lt;a href=&quot;http://tug.ctan.org/cgi-bin/ctanPackageInformation.py?id=koma-script&quot;&gt;KOMA-Script&lt;/a&gt; manual) suggest to use 5% extra leading:&lt;/p&gt; 
&lt;pre&gt;\linespread{1.05}&lt;/pre&gt; 
&lt;h3&gt;Counting figures independently from chapters&lt;/h3&gt; 
&lt;p&gt;I don’t have too many figures and tables in my thesis, and I want them to be numbered simple 1, 2, ... By default, LaTeX would say 1.1, 1.2, 2.1, ... This can be fixed using the &lt;a href=&quot;http://tug.ctan.org/cgi-bin/ctanPackageInformation.py?id=remreset&quot;&gt;&lt;tt&gt;remreset&lt;/tt&gt;&lt;/a&gt; package and these commands:&lt;/p&gt; 
&lt;pre&gt;\makeatletter
\@removefromreset{figure}{chapter}
\renewcommand{\thefigure}{\arabic{figure}}
\@removefromreset{table}{chapter}
\renewcommand{\thetable}{\arabic{table}}
\makeatother&lt;/pre&gt; 
&lt;h3&gt;No widows and club lines&lt;/h3&gt; 
&lt;p&gt;LaTeX already avoids these, but I wanted to get rid of them completely. This can be done with:&lt;/p&gt; 
&lt;pre&gt;% Disable single lines at the start of a paragraph (Schusterjungen)
\clubpenalty = 10000
% Disable single lines at the end of a paragraph (Hurenkinder)
\widowpenalty = 10000 \displaywidowpenalty = 1000&lt;/pre&gt; 
&lt;h3&gt;Struck table lines&lt;/h3&gt; 
&lt;p&gt; I had to typeset tables with some lines struck, and I could not find a ready command for that. I used the following definition, based on the code for &lt;tt&gt;\hline&lt;/tt&gt;. Note that it probably does not adjust well to other font sizes and needs to be adjusted manually:&lt;/p&gt; 
&lt;pre&gt;\makeatletter
\def\stline{%
&amp;#160; \noalign{\vskip-.7em\vskip-\arrayrulewidth\hrule \@height \arrayrulewidth\vskip.7em}}
\makeatother&lt;/pre&gt; 
&lt;h3&gt;Title page in one-sided layout&lt;/h3&gt; 
&lt;p&gt;According to the KOMA manual, the title page as set by LaTeX is not meant to be the cover of a publication, and therefore has to be set with the margins of a right page – i.e. a larger right margin and a smaller left margin. But when printing cheaply, one often just put a transparent sheet on top of the print, so the title page &lt;em&gt;is&lt;/em&gt; the cover. You can convince KOMA that you are right by using&lt;/p&gt; 
&lt;pre&gt;\KOMAoptions{twoside=false}
\begin{titlepage}
...
\end{titlepage}
\KOMAoptions{twoside=true}&lt;/pre&gt; 
&lt;h3&gt;Not flushing the page for chapter heads&lt;/h3&gt; 
&lt;p&gt;LaTeX would put the list of algorithms on a new right page. I found this a waste of paper for my few algorithms, and preferred to put the list right after the table of contents. You can override the LaTeX behavior using:&lt;/p&gt; 
&lt;pre&gt;\tableofcontents
{
\let\cleardoublepage\relax&amp;#160; % book
\let\clearpage\relax&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; % report
\let\chapter\section
\listofalgorithms
}&lt;/pre&gt; 
&lt;p&gt;This code also reduces the size of the heading to that of a section. The same trick also works with &lt;tt&gt;\chapter&lt;/tt&gt;.&lt;/p&gt; 
&lt;h3&gt;Math in headings vs. PDF bookmarks&lt;/h3&gt; 
&lt;p&gt;LaTeX with the &lt;a href=&quot;http://tug.ctan.org/cgi-bin/ctanPackageInformation.py?id=hyperref&quot;&gt;&lt;tt&gt;hyperref&lt;/tt&gt;&lt;/a&gt; package creates nice PDF bookmarks from your chapter and section titles. Unfortunately, PDF bookmark names can only be plain strings, while the titles in the document might contain some math symbols. You can make both happy with &lt;tt&gt;\texorpdfstring&lt;/tt&gt;:&lt;/p&gt; 
&lt;pre&gt;\section{Stabilizer subgroups in \texorpdfstring{$\GL_r(\Z/2\Z)$}{GL\_r(Z/2Z)}}&lt;/pre&gt; 
&lt;h3&gt;Setting lines for the signature&lt;/h3&gt; 
&lt;p&gt;The diploma thesis contains a small note which I have to sign, saying that I created it on my own etc. Below that, I put two labeled lines for date and signature, using the tabbing environment:&lt;/p&gt; 
&lt;pre&gt;\begin{tabbing}
\rule{4cm}{.4pt}\hspace{1cm} \= \rule{7cm}{.4pt} \\
Ort, Datum \&amp;gt; Unterschrift
\end{tabbing}&lt;/pre&gt;</description>
	<pubDate>Thu, 11 Feb 2010 13:11:19 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Joachim Breitner: If I were a caricaturist</title>
	<guid>https://www.joachim-breitner.de/blog/archives/374-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/374-If-I-were-a-caricaturist.html</link>
	<description>&lt;p&gt;I’d draw a caricature involving a Toyota car, representing capitalism, with a stuck gas petal and Barack Obama trying to fix it. But as I cannot draw very well, especially recognizable people, I created this collage:&lt;/p&gt; 
&lt;div align=&quot;center&quot;&gt;&lt;img width=&quot;682&quot; height=&quot;549&quot; src=&quot;http://www.joachim-breitner.de/various/obama-toyota-callback.jpg&quot; /&gt;&lt;/div&gt; 
&lt;p&gt;The photo of Obama was created by &lt;a href=&quot;http://www.flickr.com/photos/bethcanphoto/2287026145/&quot;&gt;Beth Rankin&lt;/a&gt;.&lt;/p&gt;</description>
	<pubDate>Sun, 07 Feb 2010 20:33:45 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Joachim Breitner: FontForge-Article in the German Linux-Magazin</title>
	<guid>https://www.joachim-breitner.de/blog/archives/371-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/371-FontForge-Article-in-the-German-Linux-Magazin.html</link>
	<description>&lt;p&gt;Yesterday, I found the 3/10-issue of the German “&lt;a href=&quot;http://www.linux-magazin.de/Heft-Abo/Ausgaben/2010/03&quot;&gt;Linux-Magazin&lt;/a&gt;” in my mailbox. (I don’t dare to call it the March issue – they are a bit off schedule...) On page 62, you can find my 3½ page article about creating a symbol font with &lt;a href=&quot;http://fontforge.sourceforge.net/&quot;&gt;FontForge&lt;/a&gt;. I &lt;a href=&quot;http://www.joachim-breitner.de/blog/archives/310-My-very-first-font.html&quot;&gt;briefly covered the topic&lt;/a&gt; on my blog and later thought that it would made a nice article, even though I’m not an expert on this area. The article will be freely available in about three years.This is already my third publication, after my article on the &lt;a href=&quot;http://www.joachim-breitner.de/blog/archives/56-Like-XSS,-just-simpler-and-harder-to-prevent-The-Cross-Site-Auth-XSA-Attack.html&quot;&gt;Cross-Site-Authentication attack&lt;/a&gt; that was published &lt;a href=&quot;http://www.joachim-breitner.de/blog/archives/84-Erste-Schritte-im-Journalismus.html&quot;&gt;in the same magazine&lt;/a&gt; (circulation ~63.000) and in &lt;a href=&quot;http://www.joachim-breitner.de/blog/archives/108-International-Journalism-and-me.html&quot;&gt;its international counterpart&lt;/a&gt; in 2005 and my recent &lt;a href=&quot;http://www.joachim-breitner.de/blog/archives/354-Second-Post!.html&quot;&gt;article in the “freeX” magazine&lt;/a&gt; (circulation ~15.000). Looks like I’ll have to add a&amp;#160; “Publications” section to my website soon...&lt;/p&gt;</description>
	<pubDate>Thu, 04 Feb 2010 21:50:11 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Joachim Breitner: pidgin-blinklight goes subliminal</title>
	<guid>https://www.joachim-breitner.de/blog/archives/369-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/369-pidgin-blinklight-goes-subliminal.html</link>
	<description>&lt;p&gt;A long while ago I wrote a plugin for gaim called gaim-thinklight that blinks ones ThinkPad ThinkLight when a new message arrives. By now it is called pidgin-blinklight and supports some other hardware as well, but has not changed since over a year. Today, I implemented a new feature, and I’m curious if it will actually work:&lt;/p&gt; 
&lt;p&gt;Until now, the blink pattern was hardcoded: ON, wait 150ms, OFF, wait 125ms, ON, wait 150ms, OFF. Since version 0.11, pidgin-blinklight will calculate these three delay times based on the contacts login name. So different contacts will have very slightly different blinking patterns. The idea is that, after a while, you start to recognize your frequent buddies already by the blinking. The wait times are from the range from 50ms to 250ms, I hope that range works well.&lt;br /&gt;&lt;/p&gt; 
&lt;p&gt;Users of &lt;a href=&quot;http://packages.debian.org/sid/pidgin-blinklight&quot;&gt;Debian unstable&lt;/a&gt; will get the new version automatically. If you want to compile pidgin-blinklight from source, you will have to grab it &lt;a href=&quot;http://ftp.de.debian.org/debian/pool/main/p/pidgin-blinklight/&quot;&gt;from the debian ftp server&lt;/a&gt;. The source is in the &lt;a href=&quot;http://darcs.nomeata.de/pidgin-blinklight.upstream/&quot;&gt;pidgin-blinklight Darcs repository&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;</description>
	<pubDate>Sat, 30 Jan 2010 22:08:25 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Joachim Breitner: Serna XML editor uploaded to Debian</title>
	<guid>https://www.joachim-breitner.de/blog/archives/366-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/366-Serna-XML-editor-uploaded-to-Debian.html</link>
	<description>&lt;p&gt;The &lt;a href=&quot;http://www.syntext.com/products/serna-free/&quot;&gt;XML-Editor Serna&lt;/a&gt; by &lt;a href=&quot;http://www.syntext.com/&quot;&gt;Syntext&lt;/a&gt; has been published as Free Software a few months ago. This was very good news, because there was a lack of a good free XML editors with a good graphical view on DocBook documents, which I needed to recommend to users of &lt;a href=&quot;http://www.zpub.de/&quot;&gt;zpub&lt;/a&gt;. Therefore, I investigated packaging Serna for Debian. I had to &lt;a href=&quot;http://git.nomeata.de/?p=serna.git;a=tree;f=debian/patches;hb=refs/heads/master&quot;&gt;patch a few things&lt;/a&gt; to make it compile on and64 and to use components shipped by Debian where possible. Today, I could finally close the &lt;a href=&quot;http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=535828&quot;&gt;RFP bug&lt;/a&gt; filed by W. Martin Borgert, as the &lt;a href=&quot;http://packages.debian.org/sid/serna&quot;&gt;serna package&lt;/a&gt; was accepted by the ftp-masters. The &lt;a href=&quot;http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=566823&quot;&gt;first bug&lt;/a&gt; (SEGFAULT on startup on lenny) is already filed. I hope this is a good sign, as it shows that there is interest in the package.&lt;/p&gt; 
&lt;p&gt;For my packaging workflow, I used git-svn to import the upstream SVN branch into &lt;a href=&quot;http://git.nomeata.de/?p=serna.git&quot;&gt;a git repository&lt;/a&gt;. I then use &lt;a href=&quot;http://git-dpm.alioth.debian.org/&quot;&gt;git-dpm&lt;/a&gt; by Bernhard R. Link to manage my changes as patches in the new 3.0 (quilt) debian source package. I must say that I prefer this approach to git-buildpackage, as there is only one git branch to publish. I hope that Bernhard uploads git-dpm to Debian soon.&lt;/p&gt; 
&lt;p&gt;Serna is quite a big software project and uses stuff that I know little about (Qt, C++ with python interaction etc.). Also, the package currently bundles the &lt;a href=&quot;http://dita-ot.sourceforge.net/&quot;&gt;DITA-OT&lt;/a&gt; package, which should rather be packaged separately. Therefore, I’d be glad if co-maintainers would join the effort.&lt;br /&gt;&lt;/p&gt;</description>
	<pubDate>Mon, 25 Jan 2010 11:28:33 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Joachim Breitner: DebConf mugshots view statistics</title>
	<guid>https://www.joachim-breitner.de/blog/archives/363-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/363-DebConf-mugshots-view-statistics.html</link>
	<description>&lt;p&gt;In a comment to &lt;a href=&quot;https://www.joachim-breitner.de/blog/archives/360-screen-message-ported-to-Windows.html&quot;&gt;my previous blog post&lt;/a&gt;, I linked to the DebConf photo gallery page with the &lt;a href=&quot;https://gallery.debconf.org/v/debconf8/Mugshots/&quot;&gt;DebConf8 mugshots&lt;/a&gt;. &lt;a href=&quot;http://www.felixbrandt.de/blog/index.php?/archives/93-Unconventional-Image-Classification.html&quot;&gt;Felix Brandt&lt;/a&gt;, a friend of mine, noticed the per-picture view statistics there and plotted them, differentiating between male and female. He finds that the number of views on an image gives a fairly good indication of the sex (or gender?) of the person in question:&lt;/p&gt; 
&lt;div align=&quot;center&quot;&gt;&lt;a href=&quot;http://www.felixbrandt.de/blog/index.php?/archives/93-Unconventional-Image-Classification.html&quot;&gt;&lt;img border=&quot;0&quot; align=&quot;middle&quot; src=&quot;http://www.felixbrandt.de/~felix/blog/debconf8_mugshots_views.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt; 
&lt;p&gt;The most notable exception is the &lt;a href=&quot;https://gallery.debconf.org/v/debconf8/Mugshots/mugshots-dc8068.jpg.html&quot;&gt;image of bubulle&lt;/a&gt;. He does not even look feminine. Maybe it’s because he’s like a mother to us Debianers, always kind and always helpful? :-)&lt;/p&gt; 
&lt;p&gt;This observation fits my experience when I created a top-100-statistic of individual picture page views of &lt;a href=&quot;http://www.joachim-breitner.de/bilder/&quot;&gt;my personal gallery&lt;/a&gt;: I got a collection of pretty much all pictures of girls in bikinis, lying at some beach, across the various pages and years, and hardly any other picture. I won’t post these top-100 here, as I don’t want to additionally increase the effect...&lt;/p&gt;</description>
	<pubDate>Sat, 09 Jan 2010 14:02:29 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Joachim Breitner: screen-message ported to Windows</title>
	<guid>https://www.joachim-breitner.de/blog/archives/360-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/360-screen-message-ported-to-Windows.html</link>
	<description>&lt;p&gt;Over the holidays I investigated how to cross-compile GTK applications for Windows, and managed to port screen-message. I also created an Inno Setup based installer for it that includes the necessary GTK DLLs. You can grab it from the &lt;a href=&quot;http://www.joachim-breitner.de/projects#screen-message&quot;&gt;screen-message homepage&lt;/a&gt;. The installer optionally binds screen-messages to the key combination Alt-Ctrl-S.&lt;br /&gt;&lt;/p&gt; 
&lt;p&gt;I would have published the binary much earlier if starting the application had not always given the error message
&lt;/p&gt; 
&lt;blockquote&gt;
The application failed to initialize properly (0xc000007b).  Click on OK to terminate the application.
&lt;/blockquote&gt;
&lt;p&gt;
on Windows, while it worked fine under WINE. It took me a while to find the cause, as there seems to be only &lt;a href=&quot;http://www.mail-archive.com/gtkmm-list@gnome.org/msg10153.html&quot;&gt;one mention&lt;/a&gt; of it in the internet: One must not use MinGW’s strip.exe utility on DLLs not created with MinGW, it seems.
&lt;/p&gt;

&lt;p&gt; &lt;/p&gt; 
&lt;p&gt;I added a “make installer” target to the Makefile to create the installer. If you are curious about how that works, have a look at &lt;a href=&quot;http://darcs.nomeata.de/screen-message.upstream&quot;&gt;the source&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
	<pubDate>Thu, 07 Jan 2010 12:35:31 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Joachim Breitner: Building arbtt for Windows</title>
	<guid>https://www.joachim-breitner.de/blog/archives/358-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/358-Building-arbtt-for-Windows.html</link>
	<description>&lt;p&gt;A friend of mine is interested in trying out the &lt;a href=&quot;http://www.joachim-breitner.de/projects#arbtt&quot;&gt;Automatic Rule Based Time-Tracker&lt;/a&gt; arbtt which I programmed. Unfortunately, he is using Windows and up to now, arbtt only worked on Linux. But as I wanted to check out Haskell’s cross-platform abilities for a while, this was a good opportunity to do so. I don’t have Windows installed myself (and did not plan to do so), so I did all this under &lt;a href=&quot;http://www.winehq.org/&quot;&gt;WINE&lt;/a&gt;, the Windows compatibility layer, which works very well: It takes only a few minutes to install the &lt;a href=&quot;http://hackage.haskell.org/platform/&quot;&gt;Haskell Platform&lt;/a&gt; for Windows and then I was able to run &lt;tt&gt;wine ghc --make&lt;/tt&gt; and &lt;tt&gt;cabal install&lt;/tt&gt;.&lt;/p&gt; 
&lt;p&gt;I played around with some simple programs and was surprised by these timings:&lt;/p&gt; 
&lt;pre&gt;$ rm *.o *.hi; ghc --make fourfours.hs ; time ./fourfours &amp;gt; /dev/null
[1 of 1] Compiling Main             ( fourfours.hs, fourfours.o )
Linking fourfours ...

real	0m1.909s
user	0m1.692s
sys	0m0.208s
$ rm *.o *.hi; wine ghc --make fourfours.hs ; time wine ./fourfours.exe &amp;gt; /dev/null
[1 of 1] Compiling Main             ( fourfours.hs, fourfours.o )
Linking fourfours.exe ...

real	0m1.631s
user	0m1.376s
sys	0m0.092s
&lt;/pre&gt; 
&lt;p&gt;So it is faster to run a compiled Haskell program on top of a compatibility layer than directly on Linux! The world is in order again, though, if optimization is enabled:&lt;/p&gt; 
&lt;pre&gt;$ rm *.o *.hi; ghc -O --make fourfours.hs ; time ./fourfours &amp;gt; /dev/null
[1 of 1] Compiling Main             ( fourfours.hs, fourfours.o )
Linking fourfours ...

real	0m0.981s
user	0m0.876s
sys	0m0.108s
$ rm *.o *.hi; wine ghc -O --make fourfours.hs ; time wine ./fourfours.exe &amp;gt; /dev/null
[1 of 1] Compiling Main             ( fourfours.hs, fourfours.o )
Linking fourfours.exe ...

real	0m1.270s
user	0m1.036s
sys	0m0.072s
&lt;/pre&gt; 
&lt;p&gt;Funny. Anyways, I wanted to port arbtt. The only platform-dependent part is the capture module that gathers the list of open Windows. The &lt;a href=&quot;http://hackage.haskell.org/package/Win32&quot;&gt;Win32&lt;/a&gt; package that comes with the Haskell Platform did not cover all the functions needed to do so, but creating additional function bindings is really easy with Haskell, as can be seen in the &lt;a href=&quot;http://darcs.nomeata.de/arbtt/src/Graphics/Win32/Window/Extra.hsc&quot;&gt;Graphics.Win32.Window.Extra&lt;/a&gt; module. I also replaced the locking code that prevents two instances of &lt;tt&gt;arbtt-capture&lt;/tt&gt; to run at the same time by equivalent code using Windows mutexes (module &lt;a href=&quot;http://darcs.nomeata.de/arbtt/src/System/Win32/Mutex.hsc&quot;&gt;System.Win32.Mutex&lt;/a&gt;). With these small changes and some CPP conditionals to make the code compile for either platform, the porting was done! Even accessing the files in &lt;tt&gt;~/.arbtt&lt;/tt&gt; works correctly on Windows, where it will look in the Application Data folder,  without changing the code, thanks to &lt;a href=&quot;http://hackage.haskell.org/packages/archive/directory/latest/doc/html/System-Directory.html#v%3AgetAppUserDataDirectory&quot;&gt;System.Directory.getAppUserDataDirectory&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;But Windows users won’t like compiling software on their own. They won’t even like installing software by copying various files to certain directories. Therefore, I also had to create a Windows Installer. I picked &lt;a href=&quot;http://www.jrsoftware.org/isinfo.php&quot;&gt;Inno Setup&lt;/a&gt;, because it’s Free Software and seems to be simpler than NSIS. The installer puts the compiled &lt;tt&gt;.exe&lt;/tt&gt; files, the example &lt;tt&gt;categorize.cfg&lt;/tt&gt; and the HTML documentation in the right spot, adds icons to the Start Menu (“Edit categorize.cfg”, which fires up wordpad, a link to the documentation and the uninstaller), puts &lt;tt&gt;arbtt-capture&lt;/tt&gt; in the Autorun folder, puts the path to &lt;tt&gt;arbtt-stats&lt;/tt&gt; in the &lt;tt&gt;PATH&lt;/tt&gt; variable and starts &lt;tt&gt;arbtt-capture&lt;/tt&gt; at the end (the last three points being optional). Of course it undoes all this when removing the program again. I integrated the call to the Inno Setup installer into the usual ./&lt;a href=&quot;http://darcs.nomeata.de/arbtt/Setup.hs&quot;&gt;Setup&lt;/a&gt; build process of Haskell packages. Some more details of how to create the Windows installer are mentioned in the &lt;a href=&quot;http://darcs.nomeata.de/arbtt/README&quot;&gt;README&lt;/a&gt; file.&lt;/p&gt; 
&lt;p&gt;Now all this does not magically add a graphical user interface to arbtt, so users will still have to work with &lt;tt&gt;arbtt-stats&lt;/tt&gt; on the command line – even on Windows. If this is not a problem for you then you can fetch the latest installer from &lt;a href=&quot;http://www.joachim-breitner.de/projects#arbtt&quot;&gt;the arbtt homepage&lt;/a&gt;. And if you happen to become a serious user of arbtt on Windows and want to help maintaining the Windows port, I’ll gladly share some responsibilities.&lt;/p&gt; 
&lt;p&gt;I’m very satisfied with the process and the result and I’m happy to
know that I can offer some of my programs also to Windows users in the
future.It is also a big plus for Haskell – with Python, shipping a program for Windows users is likely more difficult. The next step will be providing gtk-based graphical Haskell applications for Windows, including a nice installer that ideally includes all dependencies (gtk etc.).&lt;br /&gt;&lt;/p&gt;</description>
	<pubDate>Fri, 25 Dec 2009 18:48:00 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Joachim Breitner: Packaged unicode-screensaver properly</title>
	<guid>https://www.joachim-breitner.de/blog/archives/355-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/355-Packaged-unicode-screensaver-properly.html</link>
	<description>&lt;p&gt;Three years ago, while I was in Ghana, I &lt;a href=&quot;https://www.joachim-breitner.de/blog/archives/204-Unicode-Hack.html&quot;&gt;wrote a small screensaver&lt;/a&gt; that displays a randomly picked unicode character full-screen. I like it because there is a huge bunch of very weird characters and signs in the unicode standard. It also prints the unicode codepoint and character name.&lt;/p&gt;
&lt;div align=&quot;center&quot;&gt;&lt;img width=&quot;651&quot; src=&quot;http://www.joachim-breitner.de/various/unicode-screensaver.png&quot; /&gt;&lt;/div&gt;&lt;p&gt;Now I finally got around to properly package it: Created a &lt;a href=&quot;http://www.joachim-breitner.de/projects#unicode-screensaver&quot;&gt;small homepage&lt;/a&gt;, a &lt;a href=&quot;http://www.joachim-breitner.de/archive/unicode-screensaver/&quot;&gt;source tarball&lt;/a&gt; with (hopefully) proper autotool files, all managed in a &lt;a href=&quot;http://git.nomeata.de/?p=unicode-screensaver.git&quot;&gt;git repository&lt;/a&gt; (also &lt;a href=&quot;http://gitorious.org/unicode-screensaver&quot;&gt;on gitorious&lt;/a&gt;), complete with manpage, README and other additional files. I’m also going to upload the package to Debian, so you can just do apt-get install &lt;a href=&quot;http://packages.debian.org/sid/unicode-screensaver&quot;&gt;unicode-screensaver&lt;/a&gt; as soon as it gets accepted.&lt;/p&gt;&lt;p&gt;It can probably not enter the official &lt;a href=&quot;http://www.jwz.org/xscreensaver/&quot;&gt;xscreensaver&lt;/a&gt; distribution as it adds dependencies on the fontconfig and freetype libraries.&lt;/p&gt;</description>
	<pubDate>Wed, 09 Dec 2009 13:54:20 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Joachim Breitner: Second Post!</title>
	<guid>https://www.joachim-breitner.de/blog/archives/354-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/354-Second-Post!.html</link>
	<description>&lt;p&gt;Yesterday, the German magazine &lt;a href=&quot;http://www.cul.de/freex.html&quot;&gt;freeX&lt;/a&gt; published its December issue. It includes an three-page article about  &lt;a href=&quot;http://gitorious.org/vbox-sync&quot;&gt;vbox-sync&lt;/a&gt;, written by me, that is even mentioned on the cover page. After my article on the &lt;a href=&quot;http://www.joachim-breitner.de/blog/archives/56-Like-XSS,-just-simpler-and-harder-to-prevent-The-Cross-Site-Auth-XSA-Attack.html&quot;&gt;Cross-Site-Authentication attack&lt;/a&gt; that was published &lt;a href=&quot;http://www.joachim-breitner.de/blog/archives/84-Erste-Schritte-im-Journalismus.html&quot;&gt;in the German Linux-Magazin&lt;/a&gt; and the &lt;a href=&quot;http://www.joachim-breitner.de/blog/archives/108-International-Journalism-and-me.html&quot;&gt;international Linux Magazine&lt;/a&gt; in 2005, this is my second publication.&lt;/p&gt;&lt;p&gt;Vbox-sync is a tool to distribute VirtualBox images via apt-get that Phil Kern and I wrote as part of our work for &lt;a href=&quot;http://itomig.de/&quot;&gt;itomig.de&lt;/a&gt;, a German Free Software consulting company, and the &lt;a href=&quot;http://www.muenchen.de/limux&quot;&gt;LiMux&lt;/a&gt; project. I also held a &lt;a href=&quot;https://penta.debconf.org/dc9_schedule/events/476.en.html&quot;&gt;talk about it&lt;/a&gt; at the Debian Conference in Extremadura, Spain, in 2009.&lt;/p&gt;</description>
	<pubDate>Thu, 03 Dec 2009 22:28:59 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Joachim Breitner: screen-message now in an online version</title>
	<guid>https://www.joachim-breitner.de/blog/archives/353-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/353-screen-message-now-in-an-online-version.html</link>
	<description>&lt;p&gt;Folllowing an idea by &lt;a href=&quot;http://twitter.com/kaihendry/statuses/5920995902&quot;&gt;Kai Hendry&lt;/a&gt;, I re-implemented my Linux application screen-message, which does nothing but display a piece of text that you enter as large as possible, in HTML. So whenever you are in need of screen-message, but don’t have it installed at the moment, put your browser into fullscreen mode, go to&lt;/p&gt;&lt;div align=&quot;center&quot;&gt;&lt;a href=&quot;http://sm.nomeata.de&quot;&gt;http://sm.nomeata.de/&lt;/a&gt;&lt;/div&gt;&lt;p&gt;and type away.&lt;/p&gt;&lt;p&gt;I only tested it with the web browser &lt;a href=&quot;http://galeon.sourceforge.net/&quot;&gt;galeon&lt;/a&gt;, so I expect it to work with Firefox and related browsers. If it does not work with Internet Explorer, I can’t help it – but patches are welcome. The file is stored in the screen-message &lt;a href=&quot;http://darcs.net/&quot;&gt;Darcs&lt;/a&gt; repository at &lt;a href=&quot;http://darcs.nomeata.de/screen-message.upstream/&quot;&gt;http://darcs.nomeata.de/screen-message.upstream&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;PS: If anyone wants to donate a shorter domain for this, you are welcome. But I guess all good domains with “sm” in them are taken...&lt;/p&gt;</description>
	<pubDate>Fri, 27 Nov 2009 16:52:06 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Joachim Breitner: arbtt now in Debian</title>
	<guid>https://www.joachim-breitner.de/blog/archives/352-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/352-arbtt-now-in-Debian.html</link>
	<description>&lt;p&gt;The &lt;a href=&quot;http://www.joachim-breitner.de/projects#arbtt&quot;&gt;Automatic Rule Based Time Tracker&lt;/a&gt; that I have created some weeks ago is now available in Debian unstable, so if if you were reluctant to use it because you did not want to figure out how to compile the Haskell code, you can just do apt-get install &lt;a href=&quot;http://packages.debian.org/sid/arbtt&quot;&gt;arbtt&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Although it’s such a young project, it already has a fork: Andreas Klöckner was very impatient with a feature request (sensible merging of logs from different hosts), so we went ahead and re-implemented arbtt in python, named &lt;a href=&quot;http://git.tiker.net/whatup.git&quot;&gt;whatup&lt;/a&gt;. Although I prefer contributions to arbtt, it shows that the principle of arbtt is useful. And I won’t be shy to copy nice ideas from him, as well :-)&lt;/p&gt;</description>
	<pubDate>Mon, 23 Nov 2009 15:18:58 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Joachim Breitner: Parody Song: „College teacher“</title>
	<guid>https://www.joachim-breitner.de/blog/archives/351-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/351-Parody-Song-College-teacher.html</link>
	<description>&lt;p&gt;Although it does not reflect my experiences at the university, I wrote a &lt;a href=&quot;http://www.joachim-breitner.de/content/parodie/College_Teacher&quot;&gt;song text about teachers that do not care about their students&lt;/a&gt;, to the melody of „Private Dancer“ of Tina Turner. My &lt;a href=&quot;http://www.joachim-breitner.de/content#parodie&quot;&gt;list of parody songs&lt;/a&gt; now contains 22 entries!&lt;/p&gt;</description>
	<pubDate>Fri, 20 Nov 2009 10:56:09 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>George Gyau: Is been a long time</title>
	<guid>http://egoleo.wordpress.com/2009/11/16/is-been-a-long-time/</guid>
	<link>http://egoleo.wordpress.com/2009/11/16/is-been-a-long-time/</link>
	<description>&lt;p&gt;Is been like ages since i blogged. Is been crazy for me since i got back to Ghana, land of my birth. but i am finally in control and want to start blogging seriously. expect more now.&lt;/p&gt;
&lt;h2&gt;&lt;span&gt;&lt;strong&gt;Currently moved this BLOG to http://www.egoleo.net&lt;/strong&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/egoleo.wordpress.com/42/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/egoleo.wordpress.com/42/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/egoleo.wordpress.com/42/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/egoleo.wordpress.com/42/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/egoleo.wordpress.com/42/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/egoleo.wordpress.com/42/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/egoleo.wordpress.com/42/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/egoleo.wordpress.com/42/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/egoleo.wordpress.com/42/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/egoleo.wordpress.com/42/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=egoleo.wordpress.com&amp;blog=480684&amp;post=42&amp;subd=egoleo&amp;ref=&amp;feed=1&quot; /&gt;</description>
	<pubDate>Mon, 16 Nov 2009 10:58:11 +0000</pubDate>
</item>
<item>
	<title>Joachim Breitner: Darcs Hacking Sprint: Mission Complete</title>
	<guid>https://www.joachim-breitner.de/blog/archives/350-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/350-Darcs-Hacking-Sprint-Mission-Complete.html</link>
	<description>&lt;p&gt;The &lt;a href=&quot;http://wiki.darcs.net/Sprints/2009-11&quot;&gt;darcs hacking sprint&lt;/a&gt; is slowly nearing its end. As planned, I have worked on integrating &lt;a href=&quot;http://darcswatch.nomeata.de/&quot;&gt;DarcsWatch&lt;/a&gt; and &lt;a href=&quot;http://bugs.darcs.net/&quot;&gt;bugs.darcs.net&lt;/a&gt;, and I am satisfied so far. From now on, if someone submits a Darcs patch to patches@darcs.net, the patch will also be tracked by DarcsWatch. DarcsWatch will display a link to the entry on bugs.darcs.net, and also add a comment to the bugtracker with a link to the patch on DarcsWatch. And eventually, if the patch is included in the darcs.net repository, DarcsWatch will change the state of the ticket to accepted, removing one step of work for the Darcs maintainers. Currently, it checks the state of the repository three times per hour, so expect a delay after you applied the patch to the repository before the state is updated.&lt;/p&gt;</description>
	<pubDate>Sun, 15 Nov 2009 16:15:30 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Joachim Breitner: Arrived at the Darcs hacking sprint</title>
	<guid>https://www.joachim-breitner.de/blog/archives/349-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/349-Arrived-at-the-Darcs-hacking-sprint.html</link>
	<description>&lt;p&gt;Today, my alarm clock was set to 4:30, as I was going to Vienna, to attend the &lt;a href=&quot;http://wiki.darcs.net/Sprints/2009-11&quot;&gt;Darcs hacking sprint&lt;/a&gt;. I’ll be working on &lt;a href=&quot;http://darcswatch.nomeata.de/&quot;&gt;DarcsWatch&lt;/a&gt;, making it a bit more modular and hopefully integegrate it better into bug tracking systems (especially &lt;a href=&quot;http://roundup.sourceforge.net/&quot;&gt;roundup&lt;/a&gt;, as that’s &lt;a href=&quot;http://bugs.darcs.net/&quot;&gt;used by the Darcs team&lt;/a&gt;). On Monday, I’ll be a tourist until I leave in the evening. If any Debianers or Haskellers want to meet for keysigning or sightseeing, just drop me a mail!&lt;/p&gt;</description>
	<pubDate>Sat, 14 Nov 2009 08:32:05 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Joachim Breitner: Maxi-Max-Algorithm</title>
	<guid>https://www.joachim-breitner.de/blog/archives/348-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/348-Maxi-Max-Algorithm.html</link>
	<description>&lt;div align=&quot;center&quot;&gt;&lt;img width=&quot;400&quot; height=&quot;500&quot; title=&quot;You are a regular xkcd.com reader, are you?&quot; src=&quot;http://www.joachim-breitner.de/various/schaeferschach.png&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Thu, 12 Nov 2009 08:45:59 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Henry Addo: The Go Programming Language</title>
	<guid>http://www.addhen.org/blog/?p=119</guid>
	<link>http://www.addhen.org/blog/2009/11/12/the-go-programming-language/</link>
	<description>&lt;div id=&quot;attachment_120&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;img class=&quot;size-medium wp-image-120&quot; title=&quot;Go&quot; src=&quot;http://www.addhen.org/blog/wp-content/uploads/2009/11/go_ui-300x204.jpg&quot; alt=&quot;Go The programming language&quot; width=&quot;300&quot; height=&quot;204&quot; /&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Go The programming language&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;It seems Google is doing everything under this sun. From &lt;a href=&quot;http://google.com&quot;&gt;search engine&lt;/a&gt;, &lt;a href=&quot;http://android.com&quot;&gt;mobile OS&lt;/a&gt;, &lt;a href=&quot;http://www.google.com/chrome&quot;&gt;browser&lt;/a&gt;, and other &lt;a href=&quot;http://www.google.com/options/&quot;&gt;several products&lt;/a&gt;, now its the &lt;a href=&quot;http://golang.org&quot;&gt;Go&lt;/a&gt; programming language. I can&amp;#8217;t wait to see them reveal a teleport system, that way I don&amp;#8217;t have to ride about 218km to get to the Western region.&lt;/p&gt;
&lt;p&gt;Go is a system programming language  like &lt;a href=&quot;http://en.wikipedia.org/wiki/C_(programming_language)&quot;&gt;C&lt;/a&gt; and&lt;a href=&quot;http://en.wikipedia.org/wiki/C%2B%2B&quot;&gt; C++&lt;/a&gt; but with new features and eliminations of the short comings of C and C++.  Go is designed to be extremely fast and avoids some of the complexities in writing software( like C is :-) ). Its an open source project aiming to have a community to contribute to make it even more powerful.&lt;/p&gt;
&lt;p&gt;It is optimized for massive scaling and for multi-core processors that handle many tasks in parallel. It has a strong focus on object oriented principles. The project looks bright. However, &lt;a id=&quot;authorStorefrontLink&quot; title=&quot;visit this Author's Storefront&quot; href=&quot;http://stores.lulu.com/frankmccabe&quot;&gt;Francis McCabe&lt;/a&gt; who has been working on a programming language also called &lt;a href=&quot;http://code.google.com/p/go/issues/detail?id=9&quot;&gt;Go&lt;/a&gt; is seriously begging Google to change the name of their programming language Go. I wonder how such a big company couldn&amp;#8217;t do their homework well.&lt;/p&gt;</description>
	<pubDate>Thu, 12 Nov 2009 07:24:32 +0000</pubDate>
</item>
<item>
	<title>Joachim Breitner: Parody song „Another year at university“</title>
	<guid>https://www.joachim-breitner.de/blog/archives/347-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/347-Parody-song-Another-year-at-university.html</link>
	<description>&lt;p&gt;
The &lt;a href=&quot;http://www.joachim-breitner.de/content#parodie&quot;&gt;list of parody songs&lt;/a&gt; on my web site just got a bit longer: I changed the text of Phil Collins’ „Another day in paradise“ to „&lt;a href=&quot;http://www.joachim-breitner.de/content/parodie/Another_year_at_university&quot;&gt;Another year at university&lt;/a&gt;“, about a girl failing a math test. It’s not really funny, but the original wasn’t either.&lt;/p&gt;</description>
	<pubDate>Sun, 08 Nov 2009 11:23:00 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Joachim Breitner: Releasing zpub as Free Software</title>
	<guid>https://www.joachim-breitner.de/blog/archives/346-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/346-Releasing-zpub-as-Free-Software.html</link>
	<description>&lt;p&gt;Earlier this year, &lt;a href=&quot;http://www.breitnerundbreitner.de/&quot;&gt;my brother&lt;/a&gt; and I developed a “documentation management server” for a small software developing company. They were sick of creating their documentation by sending around Word documents, having to manually merge them, losing changes and not getting a clean, consistent layout.&lt;/p&gt;&lt;p&gt;So we created &lt;a href=&quot;http://www.zpub.de/&quot;&gt;zpub&lt;/a&gt; for them: It is based on &lt;a href=&quot;http://en.wikipedia.org/wiki/DocBook&quot;&gt;DocBook&lt;/a&gt; and &lt;a href=&quot;http://subversion.tigris.org/&quot;&gt;Subversion&lt;/a&gt;, and adds a fairly nice web interface to it. Now their work flow is &lt;/p&gt;&lt;ol&gt;&lt;li&gt;The editor checks out the DocBook source document via Subversion. With a client like &lt;a href=&quot;http://tortoisesvn.tigris.org/&quot;&gt;TortoiseSVN&lt;/a&gt;, this is possible even for the less tech-savvy editor.&lt;/li&gt;&lt;li&gt;He works on the document using the editor of his choice. We recommended an editor with a proper DocBook mode such as the &lt;a href=&quot;http://www.xmlmind.com/xmleditor/&quot;&gt;XMLMind XML Editor&lt;/a&gt; or &lt;a href=&quot;http://www.syntext.com/products/serna-free/&quot;&gt;Serna Free&lt;/a&gt;, which was recently published as Free Software, to our customer.&lt;/li&gt;&lt;li&gt;When satisfied, he commits his changes via  Subversion, adding a comment describing his modifications.&lt;/li&gt;&lt;li&gt;On the server, zpub renders the document in the various output formats (.html, .pdf, .chm), and makes the result available via the web interface. The commit messages are put there, and all previous revisions of the document can still be accessed.&lt;/li&gt;&lt;li&gt;Optionally, an e-mail about the change is sent out to a per-document configurable list of recipients.&lt;/li&gt;&lt;li&gt;Optionally, the documents are rendered with a “DRAFT”-Watermark on the pages, to avoid leaking wrong revisions to the outside. Only users with extended rights are allowed to release a document, thus causing a version without that watermark to be rendered.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;For more details on the feature and usage of zpub, check out the documentation that you can find on &lt;a href=&quot;http://www.zpub.de/de/demo.html&quot;&gt;the demo instance&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;We are actually quite satisfied by zpub, and it would be a petty if that was just it. Of course, there are quite a view programs out that that can provide these features – plus many more, much more than a company the size of our customer would want to have (or even to worry about). So there is a niche between „sending Word documents by mail“ and „buying a very expensive, complicated product“ where zpub fits in.&lt;/p&gt;&lt;p&gt;Being a fan of Free Software myself, and since zpub is based on Free Software, we decided that we want to release zpub itself under a Free License. We chose the &lt;a href=&quot;http://ec.europa.eu/idabc/eupl&quot;&gt;EUPL&lt;/a&gt;, which is a GPL compatible license created by the European Commission, since our customer comes from a municipal environment. The &lt;a href=&quot;http://gitorious.org/zpub&quot;&gt;code is hosted on gitorious&lt;/a&gt; now, so if you have a need for zpub, just give it a try.&lt;/p&gt;&lt;p&gt;Also, if you run a Free Software project, manage your documentation in DocBook (or want to start to do so) and think that zpub might be a neat idea to allow more documentation writers to contribute, talk to me. I might well offer free hosting in that case. If you are a commercial user, I’m still offering hosting (and support or feature development), just not for free any more. Note that the zpub user interface and documentation is currently only available in German.&lt;/p&gt;</description>
	<pubDate>Fri, 06 Nov 2009 16:37:28 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Joachim Breitner: Mimesweeper</title>
	<guid>https://www.joachim-breitner.de/blog/archives/345-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/345-Mimesweeper.html</link>
	<description>&lt;div align=&quot;center&quot;&gt;
&lt;img src=&quot;http://www.joachim-breitner.de/various/mimesweeper.jpg&quot; alt=&quot;Just the pun on the Windows game, no other deeper insights to be found here.&quot; /&gt;
&lt;/div&gt;</description>
	<pubDate>Tue, 03 Nov 2009 09:00:28 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Joachim Breitner: About the Freedoms of Web Services</title>
	<guid>https://www.joachim-breitner.de/blog/archives/344-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/344-About-the-Freedoms-of-Web-Services.html</link>
	<description>&lt;p&gt;For software, the question whether some software can be considered “free“ is relatively easy to decide: Check the license of the code against the list of free licenses of your trust (&lt;a href=&quot;http://opensource.org/licenses/alphabetical&quot;&gt;the OSI list&lt;/a&gt;, &lt;a href=&quot;http://www.gnu.org/philosophy/license-list.html&quot;&gt;the FSF list&lt;/a&gt; or the &lt;a href=&quot;http://wiki.debian.org/DFSGLicenses&quot;&gt;judgement applied by debian-legal&lt;/a&gt;) and that’s (mostly) it. When it comes to web services in the broader sense, including hosters, communication providers, social networks etc., this are not so clear. In this blog entry, I’ll try to list the various requirements that a service should fulfill and which I usually consider before deciding to use a service.&lt;/p&gt;&lt;h3&gt;The Requirements&lt;/h3&gt;&lt;h4&gt;A) Availability of source code&lt;/h4&gt;&lt;p&gt;Coming from the Free Software movement, this is the first requirement that comes to mind. If a web service claims to be free, then I want to be able to inspect how it is working, suggest and implement improvements and set up my own instance. For example, &lt;i&gt;&lt;a href=&quot;http://www.canonical.com/&quot;&gt;Canonical&lt;/a&gt;&lt;/i&gt;’s software housing setup &lt;i&gt;&lt;a href=&quot;https://launchpad.net/&quot;&gt;Launchpad&lt;/a&gt;&lt;/i&gt; was itself not Free Software until very recently. Having access to the source code is also the reason why I prefer &lt;a href=&quot;http://gitorious.org/&quot;&gt;&lt;i&gt;gitorious&lt;/i&gt;&lt;/a&gt; over &lt;a href=&quot;http://github.com/&quot;&gt;&lt;i&gt;github&lt;/i&gt;&lt;/a&gt; for git hosting.&lt;/p&gt;&lt;h4&gt;B) Access to my data&lt;/h4&gt;&lt;p&gt;Depending on the kind of service, it might hold data from me or about me that are important, such as my emails on a webmail service. If I won’t have a way to easily retrieve my data to back it up or to move to a competitor, I’ll think twice before trusting my data to this service.&lt;/p&gt;&lt;h4&gt;C) Free data formats&lt;/h4&gt;&lt;p&gt;If there is accessible data, it should be in a format that I can easily get and use with a choice of (Free) software. Not sure if such a service exists, but an online office suite only supporting its own proprietary file format (possibly with its own proprietary offline office suit) would be no option for me.&lt;/p&gt;&lt;h4&gt;D) An  API&lt;/h4&gt;&lt;p&gt;For an extensively used service, I will want to have the possibility to optimize my user experience by automation. This requires that I can use the service not only in person, but also from tools I write. A very good example for this is &lt;a href=&quot;http://twitter.com/&quot;&gt;&lt;i&gt;Twitter&lt;/i&gt;&lt;/a&gt;: Besides registration, there is no need to use their web site at all and still use all the features, using the tools I find most fit for a task.&lt;/p&gt;&lt;h4&gt;E) Choice of providers&lt;/h4&gt;&lt;p&gt;Competition is good. If a service is only provided by a single company, and I become dependent on the service, I become dependent on the company. A few years ago, &lt;a href=&quot;http://sourceforge.net/&quot;&gt;&lt;i&gt;SourceForge&lt;/i&gt;&lt;/a&gt; was mostly the only provider of gratis, comprehensive software project hosting. By now, there are a few alternatives, such as &lt;i&gt;&lt;a href=&quot;http://alioth.debian.org/&quot;&gt;alioth&lt;/a&gt;&lt;/i&gt;, &lt;a href=&quot;http://savannah.gnu.org/&quot;&gt;&lt;i&gt;savannah&lt;/i&gt;&lt;/a&gt; or &lt;i&gt;&lt;a href=&quot;http://code.google.com/hosting/&quot;&gt;google code&lt;/a&gt;&lt;/i&gt;, which is appreciated. Note that when it comes to the proprietary instant messaging services (&lt;a href=&quot;http://www.icq.com/&quot;&gt;&lt;i&gt;ICQ&lt;/i&gt;&lt;/a&gt;, &lt;a href=&quot;http://messenger.yahoo.com/&quot;&gt;&lt;i&gt;yahoo messenger&lt;/i&gt;&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Windows_Live_Messenger&quot;&gt;&lt;i&gt;MSN messenger&lt;/i&gt;&lt;/a&gt;), there is no choice of providers: To talk to my buddies on a certain network, I am bound to that provider. The same applies to social networks (&lt;a href=&quot;http://www.facebook.com/&quot;&gt;&lt;i&gt;Facebook&lt;/i&gt;&lt;/a&gt;, &lt;a href=&quot;http://www.studivz.net/&quot;&gt;&lt;i&gt;StudiVZ&lt;/i&gt;&lt;/a&gt;, &lt;a href=&quot;http://www.xing.com/&quot;&gt;&lt;i&gt;XING&lt;/i&gt;&lt;/a&gt;), and is one of the reasons why I shun these yet. &lt;/p&gt;&lt;h4&gt;F) Federation between providers&lt;/h4&gt;&lt;p&gt;If there is  a choice of providers, and the service in question provides some kind of communication, it is very desirable if I can interact with users of the service on other providers. A very good example for this is e-mail: People @&lt;a href=&quot;http://www.gmx.net/&quot;&gt;gmx.net&lt;/a&gt; can send mails to people @&lt;a href=&quot;http://www.aol.com/&quot;&gt;aol.com&lt;/a&gt;, and I can have @&lt;a href=&quot;http://www.joachim-breitner.de/&quot;&gt;joachim-breitner.de&lt;/a&gt; and still communicate with everyone. This was not always the matter of course: Before Internet e-mail was common, people on &lt;i&gt;AOL&lt;/i&gt; could not get in touch with people at &lt;a href=&quot;http://en.wikipedia.org/wiki/CompuServe&quot;&gt;CompuServe&lt;/a&gt;. These days, the problem persists with instant messaging (&lt;a href=&quot;http://en.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol&quot;&gt;&lt;i&gt;Jabber&lt;/i&gt;&lt;/a&gt; a.k.a. &lt;i&gt;XMPP&lt;/i&gt; being the notable exception) and social networks. Also sites like &lt;i&gt;gitorious&lt;/i&gt; or &lt;i&gt;github&lt;/i&gt; could support federation if they would allow to create branches of repositories that are hosted elsewhere, allowing their users to use the familiar interface with all repositories they work with.&lt;/p&gt;&lt;h3&gt;Analysis of a few services&lt;/h3&gt;&lt;p&gt;So far the theory. Let’s see how various services fare.&lt;/p&gt;&lt;h4&gt;e-mail&lt;/h4&gt;&lt;p&gt;Being from the old times of the Internet, when everything was better, it does not surprise that this passes all requirements: There is a large amount of Free e-mail servers and clients to choose from, my data is easily moved via well-known protocols such as POP or IMAP and save in standardized format. There is an abundance of service providers, and they all talk to each other. One could argue that the openness of email causes problems like spam, but I’d say that this might be a design issue, but not inherent to the above criteria.&lt;/p&gt;&lt;p&gt;Pretty much the same analysis applies to &lt;b&gt;Jabber/XMPP&lt;/b&gt;.&lt;/p&gt;&lt;h4&gt;ICQ&lt;/h4&gt;&lt;p&gt;I joined when I was young and unwise. Now I am stuck to &lt;i&gt;AOL&lt;/i&gt; to keep in touch with a relevent part of my online correspondence. To use it on the operating system of my choice, other people had to reverse engineer the protocol and any time, &lt;i&gt;AOL&lt;/i&gt; could change how its servers work and I’ll be locked out. I can not get in touch with people on other networks, my buddy roster is not easily backed up and restored, and no, we can not see the source of the &lt;i&gt;ICQ&lt;/i&gt; servers. I’d wish I could switch over to &lt;i&gt;Jabber&lt;/i&gt; completely, but there are always a few important people who do not use that yet.&lt;/p&gt;&lt;h4&gt;Github/Gitorious&lt;/h4&gt;&lt;p&gt;Although &lt;i&gt;gitorious&lt;/i&gt; is slightly older, &lt;i&gt;github&lt;/i&gt; managed to become more famous. These web sites allow developers to publish their source code and other contributors to easily branch, work on their changes, and propose them for merging in the main code. They are based on git, so I can get my data. There is a choice of providers. I am not sure how well I can access their functionality (merge requests etc.) programmatically. As said before, they do not interact well, and only &lt;i&gt;gitorious&lt;/i&gt; has published its code.&lt;/p&gt;&lt;h4&gt;Facebook/StudiVZ&lt;/h4&gt;&lt;p&gt;Very disappointing. I have heard that &lt;i&gt;Facebook&lt;/i&gt; offers you a rich API, but otherwise, they fail every category. This is one of the reasons why I am not to be found on these networks yet.&lt;/p&gt;&lt;h4&gt;Twitter/identi.ca&lt;/h4&gt;&lt;p&gt;&lt;i&gt;Twitter&lt;/i&gt;, similar to &lt;i&gt;Facebook&lt;/i&gt;, excels in the category “API”, but fails in the others. A better alternative is &lt;a href=&quot;http://identi.ca/&quot;&gt;&lt;i&gt;identi.ca&lt;/i&gt;&lt;/a&gt;: The software behind it is free, I can download contact data etc. It even supports federation via &lt;a href=&quot;http://en.wikipedia.org/wiki/OpenMicroBlogging&quot;&gt;&lt;i&gt;OpenMicroBlogging&lt;/i&gt;&lt;/a&gt;, although  that did not break through yet it, it seems.&lt;/p&gt;&lt;h4&gt;OpenID&lt;/h4&gt;&lt;p&gt;Another very good example for what I want is &lt;a href=&quot;http://en.wikipedia.org/wiki/OpenID&quot;&gt;&lt;i&gt;OpenID&lt;/i&gt;&lt;/a&gt;, a service that allows websites to accept a user’s credentials from another site. This saves the user from having to create accounts everywhere. There are free implementations, multiple providers, I can easily switch between them. A great feature of &lt;i&gt;OpenID&lt;/i&gt; that goes a bit beyond federation is delegation: On the start page of my homepage http://www.joachim-breitner.de/, I saved who my OpenID provider is. Now I can use  http://www.joachim-breitner.de/ as my &lt;i&gt;OpenID&lt;/i&gt;, and even if I change my provider, this stays valid! This is a feature that not even &lt;i&gt;XMPP&lt;/i&gt; easily provides.&lt;/p&gt;&lt;h3&gt;Conclusion&lt;/h3&gt;&lt;p&gt;Whether a web service is really free is a complicated question and has a graded answer. One has to balance the benefits of using a web service against the freedoms it is missing. I hope that in the long run, services fulfilling most or all of these requirements will prevail, so that I’ll be networking socially and blogging microly with a good conscience.&lt;/p&gt;&lt;p&gt;
&lt;/p&gt;</description>
	<pubDate>Sun, 25 Oct 2009 20:37:00 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Odzangba Dake: How to Fix “subprocess pre-removal script returned error exit status 2″ Error</title>
	<guid>http://odzangba.wordpress.com/?p=319</guid>
	<link>http://odzangba.wordpress.com/2009/10/14/how-to-fix-%e2%80%9csubprocess-pre-removal-script-returned-error-exit-status-2%e2%80%b3-error/</link>
	<description>&lt;p&gt;UPDATE: Thanks to &lt;cite&gt;Msz Junk &lt;/cite&gt;for pointing out the typos in the file paths.&lt;/p&gt;
&lt;p&gt;What I really should have done was to link to &lt;a href=&quot;http://www.khattam.info/2009/08/04/solved-subprocess-pre-removal-script-returned-error-exit-status-2-error/comment-page-1/#comment-834&quot; target=&quot;_blank&quot;&gt;khattam&amp;#8217;s article&lt;/a&gt; because he did a pretty good job of describing the solution to this error but for my own archives, here goes&amp;#8230;. I upgraded my box to Karmic Koala this evening and for some reason, &lt;strong&gt;ubiquity-frontend-kde&lt;/strong&gt; flipped and borked the package management system. When I tried to open Synaptic, I got this:&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;size-full wp-image-321 aligncenter&quot; title=&quot;Synaptic Error&quot; src=&quot;http://odzangba.files.wordpress.com/2009/10/screenshot-untitled-window.png?w=500&amp;h=300&quot; alt=&quot;Click to view a screenshot of Synaptic's error message&quot; width=&quot;500&quot; height=&quot;300&quot; /&gt;&lt;/p&gt;
&lt;p&gt;So I tried&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;sudo aptitude &amp;#8211;configure -a&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;and&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;sudo apt-get install -f&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;and even tried messing with these:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;/var/lib/dpkg/info/dbconfig-common.postinst&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;/var/lib/dpkg/info/dbconfig-common.postrm&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;but the system wouldn&amp;#8217;t budge. Then I found &lt;a href=&quot;http://www.khattam.info/2009/08/04/solved-subprocess-pre-removal-script-returned-error-exit-status-2-error/comment-page-1/#comment-834&quot; target=&quot;_blank&quot;&gt;khattam&amp;#8217;s article&lt;/a&gt; and realized I was looking in the wrong files. To solve this error, close all package management software, and back up and edit the &lt;strong&gt;/var/lib/dpkg/status&lt;/strong&gt; file with the following commands:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;sudo cp /var/lib/dpkg/status /var/log/dpkg/status.old&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;gksudo gedit /var/lib/dpkg/status&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Here comes the dicey part. Search for the package causing all this brouhaha and delete its entry. Please be very careful here and make sure you leave a blank line between the package entries below or above the deleted package entry. Here are screenshots of my file before and after selecting the appropriate package description entry.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;a href=&quot;http://odzangba.files.wordpress.com/2009/10/screenshot-status-b4.png&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-325&quot; title=&quot;Before&quot; src=&quot;http://odzangba.files.wordpress.com/2009/10/screenshot-status-b4.png?w=500&amp;h=375&quot; alt=&quot;Before&quot; width=&quot;500&quot; height=&quot;375&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://odzangba.files.wordpress.com/2009/10/screenshot-status-after.png&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-326&quot; title=&quot;After&quot; src=&quot;http://odzangba.files.wordpress.com/2009/10/screenshot-status-after.png?w=500&amp;h=375&quot; alt=&quot;After&quot; width=&quot;500&quot; height=&quot;375&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;If you did this right you should be able to open Synaptic and remove the offending package (if you don&amp;#8217;t want it any more) or re-install it.I don&amp;#8217;t understand why the developers couldn&amp;#8217;t cook up a more graceful way for dpkg to show its displeasure.&lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/odzangba.wordpress.com/319/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/odzangba.wordpress.com/319/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/odzangba.wordpress.com/319/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/odzangba.wordpress.com/319/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/odzangba.wordpress.com/319/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/odzangba.wordpress.com/319/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/odzangba.wordpress.com/319/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/odzangba.wordpress.com/319/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/odzangba.wordpress.com/319/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/odzangba.wordpress.com/319/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=odzangba.wordpress.com&amp;blog=438445&amp;post=319&amp;subd=odzangba&amp;ref=&amp;feed=1&quot; /&gt;</description>
	<pubDate>Wed, 14 Oct 2009 01:05:05 +0000</pubDate>
</item>
<item>
	<title>Odzangba Dake: How To Disable Compcache (and Fix Swap Errors) in Ubuntu 9.04</title>
	<guid>http://odzangba.wordpress.com/?p=302</guid>
	<link>http://odzangba.wordpress.com/2009/10/12/how-to-disable-compcache-and-fix-swap-errors-in-ubuntu-9-04/</link>
	<description>&lt;p&gt;For weeks now my Jaunty box would lock up unexpectedly and only a hard reset could bring it back to life. Since it did not happen often, I just brushed it off&amp;#8230; to be completely honest, I was too lazy to track down the problem. &lt;img src=&quot;http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif&quot; alt=&quot;:D&quot; class=&quot;wp-smiley&quot; /&gt;  But my box locked up again a few minutes ago as I was waiting on a very important download and after I&amp;#8217;d exhausted my vocabulary of swear words (and seriously contemplated throwing my monitor through the window), I decided I&amp;#8217;d had enough. I examined my logs and noticed these errors around the time the lock-up kicked in:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;compcache: Error allocating memory for compressed page: 37691, size=28&lt;br /&gt;
compcache: Error allocating memory for compressed page: 126848, size=233&lt;br /&gt;
compcache: Error allocating memory for compressed page: 106315, size=40&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;So I googled compcache and found out that it &lt;a title=&quot;Click to read explanation on the ubuntu-users mailing list&quot; href=&quot;https://lists.ubuntu.com/archives/ubuntu-users/2009-February/174405.html&quot; target=&quot;_blank&quot;&gt;wasn&amp;#8217;t supposed to be active on permanent installations like mine&lt;/a&gt;. Basically, it helps computers with low RAM to comfortably load a livecd session through a fairly boring use of &amp;#8220;virtual RAM.&amp;#8221; The important thing is, it should only kick in during a livecd session. It&amp;#8217;s also quite unstable.  Read more about compcache &lt;a title=&quot;Ubuntu Compcache Specification&quot; href=&quot;https://wiki.ubuntu.com/Compcache&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To find out if compcache is active on your system, do:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; sudo swapon -s&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;If you see &lt;strong&gt;/dev/ramzswap&lt;/strong&gt;, compcache is plotting to lock up your box when you least expect it. To permanently disable compcache, do:&lt;/p&gt;
&lt;p&gt;s&lt;strong&gt;udo rm -f /usr/share/initramfs-tools/conf.d/compcache &amp;amp;&amp;amp; sudo update-initramfs -u&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Then either reboot or do a&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;sudo swapoff /dev/ramzswap{insert the device number here}&lt;/strong&gt;&amp;#8230; so for example:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;sudo swapoff /dev/ramzswap1&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The morale of the story is, don&amp;#8217;t be lazy&amp;#8230; it took me about three minutes to track down the problem, fix it and get on with my life. &lt;img src=&quot;http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot; /&gt;  Now I have to restart this 700MB download. &lt;img src=&quot;http://s.wordpress.com/wp-includes/images/smilies/icon_sad.gif&quot; alt=&quot;:(&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/odzangba.wordpress.com/302/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/odzangba.wordpress.com/302/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/odzangba.wordpress.com/302/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/odzangba.wordpress.com/302/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/odzangba.wordpress.com/302/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/odzangba.wordpress.com/302/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/odzangba.wordpress.com/302/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/odzangba.wordpress.com/302/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/odzangba.wordpress.com/302/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/odzangba.wordpress.com/302/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=odzangba.wordpress.com&amp;blog=438445&amp;post=302&amp;subd=odzangba&amp;ref=&amp;feed=1&quot; /&gt;</description>
	<pubDate>Mon, 12 Oct 2009 03:13:49 +0000</pubDate>
</item>
<item>
	<title>Joachim Breitner: arbtt: Now with Documentation</title>
	<guid>https://www.joachim-breitner.de/blog/archives/342-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/342-arbtt-Now-with-Documentation.html</link>
	<description>&lt;p&gt;Yesterday I did what Free Software authors supposedly don’t do. I wrote documentation. In fact, I had a relatively detailed README already, but I thought this would be a good opportunity to create a more elaborate documentation, using the ubiquitous  DocBook. You can read the &lt;a href=&quot;http://darcs.nomeata.de/arbtt/doc/users_guide/&quot;&gt;HTML documentation for arbtt&lt;/a&gt; online, where it’s automatically updated when I push to the &lt;a href=&quot;http://darcs.nomeata.de/arbtt&quot;&gt;darcs repository&lt;/a&gt;. You can see, I use the same CSS file that most Haskell-related DocBook documentation seems to use.&lt;/p&gt;&lt;p&gt;One motivation to use &lt;a href=&quot;http://www.docbook.org/&quot;&gt;DocBook&lt;/a&gt; was that I can extract manpages from it, which should be present if I package arbtt for Debian. I was about to complain that references from the manpages to other part of the documentation can not work sensibly, but using the &lt;a href=&quot;http://www.sagehill.net/docbookxsl/Profiling.html&quot;&gt;“profiling” feature&lt;/a&gt; of docbook-xsl, I can replace them by a textual reference to the user’s manual if the file is processed for manpage output. Have a look at &lt;a href=&quot;http://darcs.nomeata.de/cgi-bin/darcsweb.cgi?r=arbtt;a=commitdiff;h=20091011095133-23c07-07121a9d8fc2fa653342b367227a6d464e0dc437.gz&quot;&gt;my changes for that&lt;/a&gt; if you want to know how it works.&lt;/p&gt;&lt;p&gt;For some reason, the &amp;lt;refentry&amp;gt;-tags that make up the manpages are split to separate files when generating chunked HTML output, but they do not appear in the table of contents. You have to find a spot in the text where they are linked, as they are now in the section “&lt;a href=&quot;http://darcs.nomeata.de/arbtt/doc/users_guide/references.html&quot;&gt;Program references&lt;/a&gt;”, to find them. This is unfortunate, I expect that a few readers might miss this important part of the documentation. Am I doing something wrong?&lt;/p&gt;&lt;p&gt;For the configuration file, I put an &lt;a href=&quot;http://darcs.nomeata.de/arbtt/doc/users_guide/configuration.html#grammar&quot;&gt;EBNF-style grammar description&lt;/a&gt; in the documentation. There is a special &lt;a href=&quot;http://www.docbook.org/schemas/ebnf.html&quot;&gt;DocBook module&lt;/a&gt; for that, but I’m not satisfied with it. On the right hand side of production rules, it has only special support for nonterminals, but no tags to semantically mark up choice, repetition etc. I followed the lead found at the &lt;a href=&quot;http://yaml.org/spec/1.2/spec.dbk&quot;&gt;YAML specification&lt;/a&gt; and put &amp;lt;quote&amp;gt;-Tags around literal parts of the grammar, but this is not valid according to the DocBook DTD. Speaking of the DTD: I guess since the EBNF-stuff is just a module, the tag &amp;lt;productionset&amp;gt; is not a valid content of &amp;lt;figure&amp;gt;. So, if I choose to use the EBNF module in a sensible way, I will not have a valid DocBook file.&lt;/p&gt;&lt;p&gt;All in all, I am satisified with the result. Especially that nobody can say any more “I like your program, but I can’t contribute, because I don’t know Haskell”. Just improve the docs! :-)&lt;/p&gt;</description>
	<pubDate>Sun, 11 Oct 2009 10:01:00 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Kofi Boakye: The Global Village</title>
	<guid>http://kdex.wordpress.com/2009/10/06/the-global-village/</guid>
	<link>http://kdex.wordpress.com/2009/10/06/the-global-village/</link>
	<description>&lt;p&gt;If the world is now a global village, then I guess Aunt Araba can go and spy on what Mrs Obama is cooking for supper nd we the village elders sit and drink some pito with Osama and Gordon Brown while the German chancellor  plays ampe with Sirleaf Johnson.Now where r the power chaskele boys , Mugabe and Wen Jiabao??&lt;/p&gt;
&lt;p&gt;ah these boy paa !!&lt;/p&gt;
&lt;p&gt;(Memoirs of a global village elder)&lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/kdex.wordpress.com/32/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/kdex.wordpress.com/32/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/kdex.wordpress.com/32/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/kdex.wordpress.com/32/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/kdex.wordpress.com/32/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/kdex.wordpress.com/32/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/kdex.wordpress.com/32/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/kdex.wordpress.com/32/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/kdex.wordpress.com/32/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/kdex.wordpress.com/32/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=kdex.wordpress.com&amp;blog=1707633&amp;post=32&amp;subd=kdex&amp;ref=&amp;feed=1&quot; /&gt;</description>
	<pubDate>Tue, 06 Oct 2009 14:19:42 +0000</pubDate>
</item>
<item>
	<title>Kofi Boakye: Karmic Kaola Goodness !!</title>
	<guid>http://kdex.wordpress.com/?p=27</guid>
	<link>http://kdex.wordpress.com/2009/10/06/karmic-kaola-goodness/</link>
	<description>&lt;p&gt;Wow!!&lt;/p&gt;
&lt;p&gt;Just spent over three hours downloading the Karmic Kaola beta  over a crappy wireless connection.&lt;/p&gt;
&lt;p&gt;And I just got to shout &amp;#8220;Wow!!&amp;#8221;. Beta saf be this. Man, they really put some good work into this stuff.Little touches here and there . And I think my screen display just increased or something cuz there seems to be more space on the desktop. No kidding !! It is really worth the long wait , short fevered naps and the ever present angelically annoying mosquitoes buzzing and taking painful dives at my body&amp;#8230;Karmic Kaola rocks , though there&amp;#8217;s still more work to be done..And this time I hope to be part of it contributing my quota to it!!&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;attachment wp-att-28&quot; href=&quot;http://kdex.wordpress.com/2009/10/06/karmic-kaola-goodness/screenshot/&quot;&gt;&lt;img class=&quot;aligncenter size-medium wp-image-28&quot; title=&quot;Screenshot&quot; src=&quot;http://kdex.files.wordpress.com/2009/10/screenshot.png?w=300&amp;h=225&quot; alt=&quot;Screenshot&quot; width=&quot;300&quot; height=&quot;225&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/kdex.wordpress.com/27/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/kdex.wordpress.com/27/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/kdex.wordpress.com/27/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/kdex.wordpress.com/27/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/kdex.wordpress.com/27/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/kdex.wordpress.com/27/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/kdex.wordpress.com/27/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/kdex.wordpress.com/27/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/kdex.wordpress.com/27/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/kdex.wordpress.com/27/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=kdex.wordpress.com&amp;blog=1707633&amp;post=27&amp;subd=kdex&amp;ref=&amp;feed=1&quot; /&gt;</description>
	<pubDate>Tue, 06 Oct 2009 06:50:08 +0000</pubDate>
</item>
<item>
	<title>Joachim Breitner: arbtt goes Binary</title>
	<guid>https://www.joachim-breitner.de/blog/archives/341-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/341-arbtt-goes-Binary.html</link>
	<description>&lt;p&gt;Three weeks ago, I announced the &lt;a href=&quot;https://www.joachim-breitner.de/blog/archives/336-The-Automatic-Rule-Based-Time-Tracker.html&quot;&gt;automatic rule-based time tracker&lt;/a&gt; here, and it seems that there are actually users out there :-). Since then, it has recorded more than 240 hours of my computer’s uptime in about 15000 samples. Until now, this data was stored in a simple text file, one line per entry, and relying on Haskell’s Show/Read instances to do the serialization. Although not quite unexpected, this turned out to be a severe bottleneck: Already, it takes more than 25 seconds to parse the log file on my computer.&lt;/p&gt;&lt;p&gt;Following an advice given to me on the #haskell IRC channel, I switched to a binary representation of the data, using the very nice &lt;a href=&quot;http://code.haskell.org/binary/&quot;&gt;Data.Binary&lt;/a&gt; module. The capture program will automatically detect if the log file is in the old format, move it away and convert the entries to binary data. And voilà, the statistics program evalutes my data in about two seconds! This should be fast enough for quite a while, I hope.&lt;/p&gt;&lt;p&gt;In my binary instances, which you can find in &lt;a href=&quot;http://darcs.nomeata.de/arbtt/src/Data.hs&quot;&gt;Data.hs&lt;/a&gt;, I prepended a version tag to each entry. This hopefully allows me to add more fields to the log file later, while still being able to parse the old data directly and without conversion. To still be able to manually inspect the recorded data, the program arbtt-dump was added to the package. The new version is uploaded to &lt;a href=&quot;http://hackage.haskell.org/package/arbtt&quot;&gt;hackage&lt;/a&gt; as 0.3.0.&lt;/p&gt;&lt;p&gt;One thing still worries me: With the old format, I could easily throw away unparseable lines in the log file (e.g. from a partial write) and still read the rest of it. With the new code, there is no such robustness: If the file breaks somewhere, it will be unreadable in its whole, or at least to the broken point. I’m not sure what to do about that problem, but given the very low number of bytes written each time, I hope that it will just not happen.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</description>
	<pubDate>Sun, 04 Oct 2009 11:09:00 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Kofi Boakye: From Gnome to KDE and back again</title>
	<guid>http://kdex.wordpress.com/?p=24</guid>
	<link>http://kdex.wordpress.com/2009/09/19/from-gnome-to-kde-and-back-again/</link>
	<description>&lt;p&gt;First cut is the deepest as they say and its really&lt;/p&gt;
&lt;p&gt;I tried KDE 4.3 over the week and I must admit they got some bling,bling. Wow!! Great work, guys and ladies.. The panel looked more spacious and the various effects and widgets/ plasmoids were just amazing !! And the preview effects in Dolphin were just over the top. (Top that if u can, Windows 7)&lt;/p&gt;
&lt;p&gt;But then ,bam, without any warning stuff just started to mess up .First it was my Intel graphics cards not agreeing with compiz.(though KDE still looked good and handled ok without the bling,bling) Then KPackage Kit just made me boil with its interface. I mean, if I want to go through the list of available and installed software I d**n well want to see it all without typing keywords to get a list. sheesh!! Of course it just made me love Synaptic all the more)&lt;/p&gt;
&lt;p&gt;Finally I just gave up and guiltily run back to Gnome. So simple!&lt;/p&gt;
&lt;p&gt;Of course I&amp;#8217;m waiting with huge anticipation for the final version of Karmic Kaola. Even the Alpha releases do show some serious improvements that  make me swell extra extra with pride at being a linux user. Go Karmic Kaola team!! All the best !!&lt;/p&gt;
&lt;p&gt;After Karmic , I&amp;#8217;m definitely gonna become a full time evangelist for Linux Usage in Ghana&amp;#8230;.&lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/kdex.wordpress.com/24/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/kdex.wordpress.com/24/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/kdex.wordpress.com/24/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/kdex.wordpress.com/24/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/kdex.wordpress.com/24/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/kdex.wordpress.com/24/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/kdex.wordpress.com/24/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/kdex.wordpress.com/24/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/kdex.wordpress.com/24/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/kdex.wordpress.com/24/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=kdex.wordpress.com&amp;blog=1707633&amp;post=24&amp;subd=kdex&amp;ref=&amp;feed=1&quot; /&gt;</description>
	<pubDate>Sat, 19 Sep 2009 22:05:36 +0000</pubDate>
</item>
<item>
	<title>Joachim Breitner: Freaking out with LaTeX</title>
	<guid>https://www.joachim-breitner.de/blog/archives/337-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/337-Freaking-out-with-LaTeX.html</link>
	<description>&lt;p&gt;If you want to play a trick on a colleague who is writing a LaTeX document: Open the file, copy the entire contents of the file and paste it at the very end. LaTeX will happily process the file and render the first part. But your colleague will likely try to edit the end of the file and soon feel haunted because his changes to the file have no effect – no matter how often he deletes the resulting PDF file or any intermediate file, how often he renames the original file or moves it somewhere else...&lt;/p&gt;&lt;p&gt;(Just happened to me, but not due to a mean colleague, but due to some accidential vim commands.)&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</description>
	<pubDate>Mon, 14 Sep 2009 08:33:11 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Joachim Breitner: The Automatic Rule-Based Time Tracker</title>
	<guid>https://www.joachim-breitner.de/blog/archives/336-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/336-The-Automatic-Rule-Based-Time-Tracker.html</link>
	<description>&lt;p&gt;A while ago, I thought: „I seem to be less productive than I used to be. Why might that be? Do I spend more and more time with e-Mails? Or is it something else?“ I couldn’t tell, so I needed a time tracking tool. There are a few of those for Linux that allow you, while working, specify what you are doing and then generate statistics about it. This approach has a few disadvantages:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;It is distracting (and I want to &lt;i&gt;increase&lt;/i&gt; productivity).&lt;/li&gt;&lt;li&gt;You can only record one kind of information. So either, you record &lt;i&gt;what&lt;/i&gt; you are doing (writing e-Mails, surfing the web, programming), or &lt;i&gt;why&lt;/i&gt; you are doing it (work, study, leisure). You can not easily record both.&lt;/li&gt;&lt;li&gt;If you are lazy and don’t keep updating it, the statistics will be useless.&lt;/li&gt;&lt;li&gt;You won’t be able to catch a little thing like quickly answering an e-Mail or looking for the weather report.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;So I created &lt;b&gt;arbtt, the Automatic Rule-Based Time Tracker&lt;/b&gt;. It comes with a background program that is started with your desktop session and will, each minute, record what windows are open, which one is active, what their titles and corresponding programs are. It also checks how long the user has been idle. No interaction required, no distraction possible. This information is stored in a log file. A separate tool allows the user to investigate this data. It is called rule-based because the mapping from the raw data to sensible “tags” that give information about the time sample is specified by a simple, but hopefully sufficiently powerful language.&lt;/p&gt;&lt;p&gt;A simple example for a rule that indicates the currently used program would be:&lt;/p&gt;&lt;pre&gt;tag Program:$current.program,&lt;/pre&gt;&lt;p&gt;The prefix “Program:” is a category. Arbtt will ensure that for each time sample and category, at most one tag is specified. A more complex rule is&lt;/p&gt;&lt;pre&gt;current window $title =~ m!(?:~|home/jojo)/projekte/(?:programming/(?:haskell/)?)?([^/)]*)!&lt;br /&gt;  ==&amp;gt; tag Project:$1,&lt;/pre&gt;&lt;p&gt;which makes use of the fact that both GVim and gnome-terminal display the full path to the currently edited file resp. to the working directory in the window title. This rule will track all my projects separately, and even automatically pick up new projects when they appear! You can see more rules in the &lt;a href=&quot;http://darcs.nomeata.de/arbtt/categorize.cfg&quot;&gt;example file&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The statistics program then allows you to query the tags with some options:&lt;/p&gt;&lt;pre&gt;Usage: arbtt-stats [OPTIONS...]&lt;br /&gt;  -h, -?       --help                 show this help&lt;br /&gt;  -V           --version              show the version number&lt;br /&gt;  -x TAG       --exclude=TAG          ignore samples containing this tag&lt;br /&gt;  -o TAG       --only=TAG             only consider samples containing this tag&lt;br /&gt;               --also-inactive        include samples with the tag &amp;quot;inactive&amp;quot;&lt;br /&gt;  -m PERC      --min-percentage=PERC  do not show tags with a percentage lower than PERC% (default: 1)&lt;br /&gt;  -i           --information          show general statistics about the data&lt;br /&gt;  -t           --total-time           show total time for each tag&lt;br /&gt;  -c CATEGORY  --category=CATEGORY    show statistics about category CATEGORY&lt;/pre&gt;&lt;p&gt;For example, if I want to know what folders I have open while using evolution, I can run &lt;tt&gt;arbtt-stats -o Program:evolution -c Evo-Folder -m 3&lt;/tt&gt; to see this:&lt;/p&gt;&lt;pre&gt;Statistics for category Evo-Folder&lt;br /&gt;==================================&lt;br /&gt;                         ||       Time Percentage&lt;br /&gt;=========================++======================&lt;br /&gt;      Evo-Folder:Eingang ||  22h20m00s      17.0%&lt;br /&gt;     Evo-Folder:Bekannte ||  16h40m00s      12.7%&lt;br /&gt;    Evo-Folder:d-haskell ||   9h40m00s       7.4%&lt;br /&gt;       Evo-Folder:Itomig ||   8h20m00s       6.4%&lt;br /&gt;   Evo-Folder:Verschickt ||   7h40m00s       5.8%&lt;br /&gt;Evo-Folder:pkg-fso-maint ||   7h00m00s       5.3%&lt;br /&gt;         Evo-Folder:Bugs ||   6h00m00s       4.6%&lt;br /&gt;Evo-Folder:planet debian ||   4h00m00s       3.0%&lt;br /&gt;    (60 entries omitted) ||   4h49m00s      36.7%&lt;br /&gt;        (unmatched time) ||      8m00s       1.0%&lt;/pre&gt;&lt;p&gt;One big advantage of this approach is that you do not need to know in advance what queries you are interested in. Since the rules are applied when you are evaluating your data, and not when recording it, you can add more tags and forgotten special cases later.&lt;/p&gt;&lt;p&gt;At this point, a big &lt;b&gt;warning&lt;/b&gt; is due: This program will record a lot of very sensitive information about you. Be aware of this before you start using arbtt, and make sure you protect your data. You can get rid of all logs by deleting ~/.arbtt/capture.log.&lt;/p&gt;&lt;p&gt;I have published &lt;a href=&quot;http://hackage.haskell.org/package/arbtt&quot;&gt;arbtt on hackage&lt;/a&gt;. If you have &lt;a href=&quot;http://haskell.org/cabal/download.html&quot;&gt;cabal-install&lt;/a&gt; installed, you can install it with cabal install arbtt. See the &lt;a href=&quot;http://darcs.nomeata.de/arbtt/README&quot;&gt;README file&lt;/a&gt; for more information about setting it up. Depending on the feedback I get I will also consider packaging it for Debian.&lt;/p&gt;&lt;p&gt;If you want to contribute, you are very welcome. The code is available at the darcs repository &lt;a href=&quot;http://darcs.nomeata.de/arbtt/&quot;&gt;http://darcs.nomeata.de/arbtt/&lt;/a&gt; (&lt;a href=&quot;http://darcs.nomeata.de/cgi-bin/darcsweb.cgi?r=arbtt;a=summary&quot;&gt;DarcsWeb&lt;/a&gt;). See the README for some ideas what to implement and feel free to come up with new ideas.&lt;/p&gt;&lt;p&gt;
&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</description>
	<pubDate>Sun, 13 Sep 2009 10:01:00 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Odzangba Dake: Fix Dolphin Thumbnail Previews</title>
	<guid>http://odzangba.wordpress.com/?p=295</guid>
	<link>http://odzangba.wordpress.com/2009/09/12/fix-dolphin-thumbnail-previews/</link>
	<description>&lt;p&gt;Dolphin, the KDE 4 file manager, needs a little help in order to display thumbnails of videos. It uses &lt;strong&gt;mplayerthumbs&lt;/strong&gt; to generate the thumbnails. Unfortunately, mplayerthumbs is not pulled in as a dependency when installing dolphin. I don&amp;#8217;t know what the developers were thinking. Video thumbnails are integral to any modern desktop. It doesn&amp;#8217;t make sense to ask users to manually install an extra package in order to enjoy this feature. Anyway, do a quick&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;sudo aptitude install mplayerthumbs&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;on the terminal or search for and install &lt;strong&gt;mplayerthumbs&lt;/strong&gt; in the Synaptic package manager, and dolphin will be able to generate thumbnails for your video collection.&lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/odzangba.wordpress.com/295/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/odzangba.wordpress.com/295/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/odzangba.wordpress.com/295/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/odzangba.wordpress.com/295/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/odzangba.wordpress.com/295/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/odzangba.wordpress.com/295/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/odzangba.wordpress.com/295/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/odzangba.wordpress.com/295/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/odzangba.wordpress.com/295/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/odzangba.wordpress.com/295/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=odzangba.wordpress.com&amp;blog=438445&amp;post=295&amp;subd=odzangba&amp;ref=&amp;feed=1&quot; /&gt;</description>
	<pubDate>Sat, 12 Sep 2009 16:59:44 +0000</pubDate>
</item>
<item>
	<title>Odzangba Dake: Using Google Talk With Kopete</title>
	<guid>http://odzangba.wordpress.com/?p=279</guid>
	<link>http://odzangba.wordpress.com/2009/09/01/using-google-talk-with-kopete/</link>
	<description>&lt;p&gt;I got bored over the weekend and did a fresh install of Jaunty. In part I wanted to try out backing up and restoring application settings and other data. It worked out pretty well. I last used Kopete in 2006 and I was a little curious so I installed and fired it up. Adding a &lt;strong&gt;Yahoo&lt;/strong&gt; messenger account worked flawlessly but &lt;strong&gt;Google Talk&lt;/strong&gt; choked on some weird ssl error. As it turned out after some googling, one needs a package called &lt;strong&gt;qca-tls&lt;/strong&gt; (ubuntu) to be able to get Kopete to play nice with Google Talk. Other distributions have slightly different names for this package:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Gentoo                 app-crypt/qca-tls&lt;br /&gt;
Mandriva              libqca1-tls&lt;br /&gt;
OpenSuSE            qca&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;On Ubuntu, a quick&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;sudo aptitude install qca-tls&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;on the terminal will do the trick. Or you can search for &lt;strong&gt;qca-tls &lt;/strong&gt;in Synaptic.&lt;/p&gt;
&lt;p&gt;To add a google talk account:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Settings &amp;#8211;&amp;gt; Configure&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Accounts&lt;/strong&gt; &amp;#8211;&amp;gt; &lt;strong&gt;Add Account&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Jabber&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Next&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;On the &lt;strong&gt;Basic Setup&lt;/strong&gt; tab, your account information should look like this:&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;blockquote&gt;&lt;p&gt;Jabber ID:     &lt;strong&gt;xxxx@gmail.com&lt;/strong&gt; (your gmail address)&lt;br /&gt;
[ ] Remember password     (Ticking this makes it easier to login later)&lt;br /&gt;
Password:     &lt;strong&gt;xxxxx&lt;/strong&gt; (Enter your password)&lt;/p&gt;&lt;/blockquote&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;The Connection tab should look like this:&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;[X]&lt;/strong&gt; Use protocol encryption (SSL)&lt;br /&gt;
&lt;strong&gt;[X]&lt;/strong&gt; Allow plain-text password authentication&lt;br /&gt;
&lt;strong&gt;[X]&lt;/strong&gt; Override default server information&lt;br /&gt;
Server:  &lt;strong&gt;[talk.google.com]&lt;/strong&gt; Port:  &lt;strong&gt;[5223]&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;You&amp;#8217;re done. &lt;img src=&quot;http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/odzangba.wordpress.com/279/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/odzangba.wordpress.com/279/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/odzangba.wordpress.com/279/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/odzangba.wordpress.com/279/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/odzangba.wordpress.com/279/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/odzangba.wordpress.com/279/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/odzangba.wordpress.com/279/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/odzangba.wordpress.com/279/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/odzangba.wordpress.com/279/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/odzangba.wordpress.com/279/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=odzangba.wordpress.com&amp;blog=438445&amp;post=279&amp;subd=odzangba&amp;ref=&amp;feed=1&quot; /&gt;</description>
	<pubDate>Tue, 01 Sep 2009 01:06:11 +0000</pubDate>
</item>
<item>
	<title>Henry Addo: Menace of E-Waste</title>
	<guid>http://www.addhen.org/blog/?p=104</guid>
	<link>http://www.addhen.org/blog/2009/08/24/menace-of-e-waste/</link>
	<description>&lt;p&gt;&lt;/p&gt;
&lt;pre id=&quot;line25&quot;&gt;&lt;span&gt;&lt;span&gt;Source of video: &lt;a title=&quot;Frontline World&quot; href=&quot;http://www.pbs.org/frontlineworld/stories/ghana804/video/video_index.html&quot; target=&quot;_blank&quot;&gt;Frontline World&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre id=&quot;line25&quot;&gt;&lt;span&gt;After watching the video, it kept me thinking how on earth could we( Ghanaians ) create an attractive market for these wastes. We are to be largely blamed for this. We tend to like these garbages a.k.a &quot;home use&quot;  from the west. You should see people lined up in long queues just to pick the best out of these bazillion wastes. 
&lt;/span&gt;&lt;/pre&gt;
&lt;pre id=&quot;line25&quot;&gt;&lt;span&gt;If there are policies out there to make importation of these wastes unattractive, I don't think any importer will give a look at these. Hence no or little of them will come in.&lt;/span&gt;&lt;/pre&gt;
&lt;pre id=&quot;line25&quot;&gt;&lt;span&gt; If you watched the video to the fullest, its horrifying how these young men extract sensitive data from the dumped &lt;a href=&quot;http://en.wikipedia.org/wiki/Hard_disk_drive&quot;&gt;HDD&lt;/a&gt;. The best way of disposing these HDDs is to crash them if you ask me. &lt;/span&gt;&lt;/pre&gt;
&lt;pre id=&quot;line25&quot;&gt;&lt;span&gt; Anyhow, if you have any comment, feel free to pass it.
&lt;/span&gt;&lt;/pre&gt;</description>
	<pubDate>Mon, 24 Aug 2009 08:21:43 +0000</pubDate>
</item>
<item>
	<title>Joachim Breitner: Already dead</title>
	<guid>https://www.joachim-breitner.de/blog/archives/335-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/335-Already-dead.html</link>
	<description>&lt;p&gt;
This year’s game of &lt;a href=&quot;http://wiki.debconf.org/wiki/DebConf9/Assassins&quot;&gt;Assassins&lt;/a&gt; at DebConf 9 was quick. I did not even had a chance to check who my target would have been, and already I got touched by a sock...&lt;/p&gt;</description>
	<pubDate>Sat, 25 Jul 2009 20:47:30 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Joachim Breitner: Ctrl-Alt-F1 in VirtualBox</title>
	<guid>https://www.joachim-breitner.de/blog/archives/334-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/334-Ctrl-Alt-F1-in-VirtualBox.html</link>
	<description>&lt;p&gt;If you have a Linux VirtualBox guest accessed from a Linux machine, e.g. via rdesktop, then you cannot just press Ctrl-Alt-F1 to switch to the first virtual console, as your real computer will act on it. Instead, you can use&lt;/p&gt;
&lt;pre&gt;VBoxManage controlvm VBoxMachineName keyboardputscancode 1D 38 3B 9D B8 CB 
&lt;/pre&gt;
&lt;p&gt;to simulate a Ctrl-Alt-F1 keypress. For the other F-keys, you need to increase the third and last number, e.g. &lt;/p&gt;
&lt;pre&gt;VBoxManage controlvm VBoxMachineName keyboardputscancode 1D 38 3D 9D B8 CD&lt;/pre&gt;&lt;p&gt;for Ctrl-Alt-F2.&lt;/p&gt;</description>
	<pubDate>Mon, 13 Jul 2009 11:09:21 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Joachim Breitner: Stronger GPG key generated</title>
	<guid>https://www.joachim-breitner.de/blog/archives/333-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/333-Stronger-GPG-key-generated.html</link>
	<description>&lt;p&gt;In time for the upcoming &lt;a href=&quot;http://people.debian.org/~anibal/ksp-dc9/ksp-dc9.html&quot;&gt;DebConf keysigning party&lt;/a&gt; I &lt;a href=&quot;http://www.die-welt.net/index.php/blog/253/Yes%2C_new_GPG_key&quot;&gt;followed&lt;/a&gt; &lt;a href=&quot;http://blog.aurel32.net/?p=48&quot;&gt;the&lt;/a&gt; &lt;a href=&quot;http://ekaia.org/blog/2009/05/10/creating-new-gpgkey/&quot;&gt;crowd&lt;/a&gt; and generated a new 4096-bit RSA GPG key, which  you can find on the keyserver near you.  But I plan to use my old key for a while, until the new one is properly integrated in the Web of Trust. I still have a batch of cards with the old key on it as well, so I won’t revoke that too soon.&lt;/p&gt;&lt;pre&gt;pub   4096R/F0FBF51F 2009-07-10&lt;br /&gt;      Key fingerprint = 1A46 087F 955D 93C5 7C60  571B 3D90 8AB3 F0FB F51F&lt;br /&gt;uid                  Joachim Breitner &amp;lt;mail@joachim-breitner.de&amp;gt;&lt;br /&gt;uid                  Joachim Breitner &amp;lt;joachim.breitner@itomig.de&amp;gt;&lt;br /&gt;uid                  Joachim Breitner (Jabber-ID) &amp;lt;nomeata@joachim-breitner.de&amp;gt;&lt;br /&gt;uid                  Joachim Breitner &amp;lt;nomeata@debian.org&amp;gt;&lt;br /&gt;sub   4096R/6F927969 2009-07-10&lt;/pre&gt;&lt;p&gt;I’m also considering to play the keysigning game a bit less intense. I reached a &lt;a href=&quot;http://pgp.cs.uu.nl/graph.php?KEY=4743206C&amp;TYP=rank&amp;STY=BIG&quot;&gt;rank of about 20&lt;/a&gt; two months ago with my old key and had my fun.&lt;/p&gt;</description>
	<pubDate>Fri, 10 Jul 2009 09:07:49 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Kofi Boakye: Back Again !!</title>
	<guid>http://kdex.wordpress.com/2009/07/01/back-again/</guid>
	<link>http://kdex.wordpress.com/2009/07/01/back-again/</link>
	<description>&lt;p&gt;Hello World&lt;/p&gt;
&lt;p&gt;Its sure been a while since i last posted on this blog.&lt;/p&gt;
&lt;p&gt;However i&amp;#8217;m back and this time i hope to put up new stuff everyday about what i&amp;#8217;m currently doing .Hoping to start releasing some serious apps for the linux world soon.&lt;/p&gt;
&lt;p&gt;Adios amigos&lt;/p&gt;
&lt;br /&gt;  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/kdex.wordpress.com/16/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/kdex.wordpress.com/16/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/kdex.wordpress.com/16/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/kdex.wordpress.com/16/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/kdex.wordpress.com/16/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/kdex.wordpress.com/16/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/kdex.wordpress.com/16/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/kdex.wordpress.com/16/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/kdex.wordpress.com/16/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/kdex.wordpress.com/16/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=kdex.wordpress.com&amp;blog=1707633&amp;post=16&amp;subd=kdex&amp;ref=&amp;feed=1&quot; /&gt;</description>
	<pubDate>Wed, 01 Jul 2009 17:47:39 +0000</pubDate>
</item>
<item>
	<title>Joachim Breitner: Introducing L-seed</title>
	<guid>https://www.joachim-breitner.de/blog/archives/330-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/330-Introducing-L-seed.html</link>
	<description>&lt;p&gt;In two weeks, the eighth „&lt;a href=&quot;http://entropia.de/wiki/GPN8&quot;&gt;Gulasch-Programmier-Nacht&lt;/a&gt;“ will be held in Karlsruhe, a yearly geek event  by the &lt;a href=&quot;http://entropia.de/&quot;&gt;Entropia e.V&lt;/a&gt;, which is the local &lt;a href=&quot;http://ccc.de/&quot;&gt;CCC&lt;/a&gt; club. It will, as usually, offer a lot of interesting talks and events. One of my personal highlights have always been the programming games: Games, where you write your own code to compete against others, while the playing field is projected in the hacking area. The last few years, dividuum has done a great job providing these (as regular readers of my blog might &lt;a href=&quot;https://www.joachim-breitner.de/blog/archives/295-GPN-7-Resume.html&quot;&gt;remember&lt;/a&gt;).&lt;/p&gt;&lt;p&gt;This year, I’m trying to follow in his footsteps and will provide the programming game, called „&lt;a href=&quot;http://entropia.de/wiki/L-seed&quot;&gt;L-seed&lt;/a&gt;“. This blog post is an introduction (and a call for contribution, at the bottom of the post :-))&lt;/p&gt;&lt;h3&gt;The idea&lt;/h3&gt;&lt;p&gt;The participants will write code (the „genome“) that describes how plants (the biological type, not the industrial) will grow. The plants will grow simultaneously on the screen (the „garden“), will compete for light and will multiply. The players can not change the code of a growing plant, but they do have the chance to update their code for the next generation – when a plant drops a seed, it will run the newest code. All in all, the game aims to be slowly paced and relaxing, something to just watch for a while and something that does not need constant attention by the players. The score is based on the total amount of biomass produced, but I expect (and hope) that some players will aim for the most beautiful or weirdest shapes.&lt;/p&gt;&lt;h3&gt;The plant code&lt;/h3&gt;&lt;p&gt;In contrast to the previous years, this year’s game will not allow player to use a full-fledged Turing-complete programming language, but a rather minimalistic rule based language to describe the plant’s growth. Especially, it will be hard to coordinate different branches of the same plant: Information mostly flows from the leaves to the root, and not the other direction.&lt;/p&gt;&lt;p&gt;The simplest plant is based on this code:&lt;/p&gt;&lt;pre&gt;// This is the trivial plant, which just grows and grows&lt;br /&gt;RULE &amp;quot;Very simple Rule&amp;quot;&lt;br /&gt;GROW BY 1&lt;/pre&gt;&lt;p&gt;You can see that each rule has a name (which is purely informational), and an action which tells the current branch to, well, grow by one. The syntax allows for Java-style comments, whitespace and newlines are insignificant and the reserved words are case-insensitive. The result will be a plant that just grows straight up, for ever and ever. A more complex rule might be this:&lt;/p&gt;&lt;pre&gt;&lt;img vspace=&quot;2&quot; hspace=&quot;2&quot; border=&quot;0&quot; src=&quot;http://www.joachim-breitner.de/various/L-seed-christmas-tree.png&quot; /&gt;RULE &amp;quot;Start&amp;quot;&lt;br /&gt;WHEN Length &amp;lt;= 0&lt;br /&gt;GROW BY 1&lt;br /&gt;SET TAG = &amp;quot;Root1&amp;quot;&lt;br /&gt;&lt;br /&gt;RULE &amp;quot;Story 1&amp;quot;&lt;br /&gt;WHEN TAG = &amp;quot;Root1&amp;quot;&lt;br /&gt;// No Percentage means 100%&lt;br /&gt;BRANCH ANGLE = 70°, LENGTH = 2, Tag = &amp;quot;&amp;quot;&lt;br /&gt;       ANGLE = -70°, LENGTH = 2, Tag = &amp;quot;&amp;quot;&lt;br /&gt;       ANGLE = 0°, LENGTH = 1, TAG = &amp;quot;Root2&amp;quot;&lt;br /&gt;SET TAG = &amp;quot;&amp;quot;&lt;br /&gt;&lt;br /&gt;RULE &amp;quot;Story 2&amp;quot;&lt;br /&gt;WHEN TAG = &amp;quot;Root2&amp;quot;&lt;br /&gt;BRANCH AT 100% ANGLE = 70°, LENGTH = 1.5, Tag = &amp;quot;&amp;quot;&lt;br /&gt;               ANGLE = -70°, LENGTH = 1.5, Tag = &amp;quot;&amp;quot;&lt;br /&gt;               ANGLE = 0°, LENGTH = 1, TAG = &amp;quot;Root3&amp;quot;&lt;br /&gt;SET TAG = &amp;quot;&amp;quot;&lt;br /&gt;&lt;br /&gt;RULE &amp;quot;Story 3&amp;quot;&lt;br /&gt;WHEN TAG = &amp;quot;Root3&amp;quot;&lt;br /&gt;BRANCH AT 100% ANGLE = 70°, LENGTH = 1, Tag = &amp;quot;&amp;quot;&lt;br /&gt;               ANGLE = -70°, LENGTH = 1, Tag = &amp;quot;&amp;quot;&lt;br /&gt;               ANGLE = 0°, LENGTH = 1, TAG = &amp;quot;Root4&amp;quot;&lt;br /&gt;SET TAG = &amp;quot;&amp;quot;&lt;br /&gt;&lt;br /&gt;RULE &amp;quot;Story 4&amp;quot;&lt;br /&gt;WHEN TAG = &amp;quot;Root4&amp;quot;&lt;br /&gt;BRANCH AT 100% ANGLE = 70°, LENGTH = 0.5, Tag = &amp;quot;&amp;quot;&lt;br /&gt;               ANGLE = -70°, LENGTH = 0.5, Tag = &amp;quot;&amp;quot;&lt;br /&gt;               ANGLE = 0°, LENGTH = 0.5, Tag = &amp;quot;Tip&amp;quot;&lt;br /&gt;SET TAG = &amp;quot;&amp;quot;&lt;br /&gt;&lt;br /&gt;RULE &amp;quot;Star&amp;quot;&lt;br /&gt;WHEN TAG = &amp;quot;Tip&amp;quot;&lt;br /&gt;Blossom&lt;/pre&gt;&lt;p&gt;I added a picture with the resulting tree. The yellow blob at the top is a not-yet-polished rendering of a blossom. At the right, there is already the first offspring of the plant. One thing to keep in mind while writing a genome is that rules are applied to single branches, and not the whole plant. The program will, for each branch individually, check which rules apply and choose one.  I’ll skip a detailed description of the syntax here, eventually you will find proper documentation on the entropia wiki page. You can find &lt;a href=&quot;http://git.nomeata.de/?p=L-seed.git;a=tree;f=examples&quot;&gt;more examples&lt;/a&gt; in the source repository.&lt;/p&gt;&lt;h3&gt;The gameplay&lt;/h3&gt;&lt;p&gt;The players will register at a website providing the usual CRUD functionality for their code, with integrated syntax checking. They can have more than one code at the same time, but only one can be marked as „active.“ The program actually serving the projector will regularly fetch the active code and run a around (called „season“) of the game. Whenever a new seed grows, the program will get the possibly updated active code of that user and use that. A season will probably last for a fixed amount of time, and at the end the total biomass accumulated by each player is added up and written back to the database.&lt;/p&gt;&lt;h3&gt;The game code&lt;/h3&gt;&lt;p&gt;You can fetch the source code from my &lt;a href=&quot;http://git.nomeata.de/?p=L-seed.git;a=summary&quot;&gt;git repository&lt;/a&gt; and browse the &lt;a href=&quot;http://entropia.de/~nomeata/L-seed-doc/&quot;&gt;haddock documentation&lt;/a&gt;. Unsurprisingly, it is written in Haskell. To compile it yourself, you will need the GHC Haskell compiler, parsec version 3 and for the visualization the gtk2hs package, all of which are packaged in Debian unstable. The main.hs is the interesting program. You pass it one or more plants as an argument, and it will start the simulation. If it’s too slow for test runs, then reduce the &lt;a href=&quot;http://entropia.de/~nomeata/L-seed-doc/Lseed-Constants.html#v%3AdayLength&quot;&gt;dayLength&lt;/a&gt; variable in Lseed/Constants.hs. If you have trouble getting it to run, just talk to me.&lt;/p&gt;&lt;h3&gt;The call for help&lt;/h3&gt;&lt;p&gt;As you can see in the picture above, the graphical output is not very aesthetic. I am no artist, and I don’t pretend to be one. So, if you think you have the right touch, maybe know OpenGL and a bit of Haskell, I’d be very grateful if you make it look better. The UI interface is quite simple: You need to have a module that returns an &lt;a href=&quot;http://entropia.de/~nomeata/L-seed-doc/Lseed-Data.html#t%3AObserver&quot;&gt;Observer&lt;/a&gt; value, which contains a few callbacks for various situations. The code in &lt;a href=&quot;http://git.nomeata.de/?p=L-seed.git;a=blob;f=src/Lseed/Renderer/Cairo.hs;hb=HEAD&quot;&gt;Lseed/Renderer/Cairo.hs&lt;/a&gt; can of course be used as a guideline. I’m suggesting OpenGL because my code is not only ugly, it is also too slow very quickly. If you need any help, just contact me by mail or jabber.&lt;/p&gt;&lt;p&gt;I’m also interested in comments about the game balance, and the expressiveness of the programming language. If you play around with the code and discover that there are missing features in the language, or that your plants grow too fast or too slow, or when you discover bugs, please also tell me.&lt;/p&gt;&lt;h3&gt;Thanks&lt;/h3&gt;&lt;p&gt;L-seed is based on an &lt;a href=&quot;https://www.joachim-breitner.de/blog/archives/129-Fixe-Idee-Warfeu.html&quot;&gt;old idea of mine&lt;/a&gt;, advanced together with Cupe, Sven Hecht is programming the web interface, and Lay is testing the game and bugs me about it to keep the motivation going.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Update&lt;/b&gt;: I uploaded the package to &lt;a href=&quot;http://hackage.haskell.org/package/L-seed&quot;&gt;hackage&lt;/a&gt;, to encourage contributions.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</description>
	<pubDate>Sat, 13 Jun 2009 10:27:00 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Joachim Breitner: Third place in AI programming contest</title>
	<guid>https://www.joachim-breitner.de/blog/archives/328-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/328-Third-place-in-AI-programming-contest.html</link>
	<description>&lt;p&gt;
&lt;a href=&quot;https://www.joachim-breitner.de/blog/archives/324-Bejeweled-AI-in-Haskell.html&quot;&gt;My contribution&lt;/a&gt; to the programming contest held by the German „&lt;a href=&quot;http://www.freiesmagazin.de/&quot;&gt;FreiesMagazin&lt;/a&gt;“ got a &lt;a href=&quot;http://www.freiesmagazin.de/20090605-gewinner-des-programmierwettbewerbs-steht-fest&quot;&gt;third place&lt;/a&gt; out of 13 submissions. This is quite good, considering that I only wrote a small wrapper around the generic &lt;a href=&quot;http://hackage.haskell.org/cgi-bin/hackage-scripts/package/game-tree&quot;&gt;game-tree&lt;/a&gt; Haskell library by Colin Adams, and hardly gave any serious thought into the problem.&lt;/p&gt;&lt;p&gt;All entires are &lt;a href=&quot;ftp://ftp.freiesmagazin.de/2009/2009-04-wettbewerb/&quot;&gt;available for download&lt;/a&gt;. I have annotated the table containing the results with the line count as given by &lt;a href=&quot;http://labs.ohloh.net/ohcount&quot;&gt;ohcount&lt;/a&gt;:&lt;/p&gt;
&lt;div align=&quot;center&quot;&gt;
&lt;table cellpadding=&quot;3&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;    &lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; &lt;strong&gt;W&lt;/strong&gt; &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; &lt;strong&gt;D&lt;/strong&gt; &lt;/td&gt;

&lt;td align=&quot;center&quot;&gt; &lt;strong&gt;L&lt;/strong&gt; &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; &lt;strong&gt;Points&lt;/strong&gt; &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; &lt;strong&gt;Language&lt;/strong&gt; &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; &lt;strong&gt;Code lines&lt;/strong&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;1.  &lt;/td&gt;
&lt;td align=&quot;left&quot;&gt; Kroschinsky     &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 904 &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 242 &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 54      &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 2954 &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; Python &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 589 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;2.  &lt;/td&gt;
&lt;td align=&quot;left&quot;&gt; Schulz          &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 858 &lt;/td&gt;

&lt;td align=&quot;center&quot;&gt; 263 &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 79      &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 2837 &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; Python &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 544 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;3.  &lt;/td&gt;
&lt;td align=&quot;left&quot;&gt; Breitner        &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 837 &lt;/td&gt;

&lt;td align=&quot;center&quot;&gt; 281 &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 82      &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 2792 &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; Haskell &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 264 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;4.  &lt;/td&gt;
&lt;td align=&quot;left&quot;&gt; Jackermeier     &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 754 &lt;/td&gt;

&lt;td align=&quot;center&quot;&gt; 306 &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 140     &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 2568 &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; Perl &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 183 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;5.  &lt;/td&gt;
&lt;td align=&quot;left&quot;&gt; Roth            &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 574	&lt;/td&gt;

&lt;td align=&quot;center&quot;&gt; 338 &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 288     &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 2060 &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; C++ &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 1731 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;6.  &lt;/td&gt;
&lt;td align=&quot;left&quot;&gt; Eitel           &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 567 &lt;/td&gt;

&lt;td align=&quot;center&quot;&gt; 355 &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 278     &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 2056 &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; Ruby &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 352 &lt;/td&gt;

&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;7.  &lt;/td&gt;
&lt;td align=&quot;left&quot;&gt; Reichel         &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 342 &lt;/td&gt;

&lt;td align=&quot;center&quot;&gt; 328 &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 530     &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 1354 &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; Python &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 266 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;8.  &lt;/td&gt;
&lt;td align=&quot;left&quot;&gt; Zimmermann      &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 303 &lt;/td&gt;

&lt;td align=&quot;center&quot;&gt; 400 &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 497     &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 1309 &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; Java &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 1070 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;9.  &lt;/td&gt;
&lt;td align=&quot;left&quot;&gt; Apensiv         &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 190 &lt;/td&gt;

&lt;td align=&quot;center&quot;&gt; 353 &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 657     &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 923 &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; Perl &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 410 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;10. &lt;/td&gt;
&lt;td align=&quot;left&quot;&gt; Maraun          &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 150 &lt;/td&gt;

&lt;td align=&quot;center&quot;&gt; 300 &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 750     &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 750 &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; C++ &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 690 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;11. &lt;/td&gt;
&lt;td align=&quot;left&quot;&gt; Golemo          &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 131 &lt;/td&gt;

&lt;td align=&quot;center&quot;&gt; 319 &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 750     &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 712 &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; Python &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 104 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;12. &lt;/td&gt;
&lt;td align=&quot;left&quot;&gt; Ziegelwanger    &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 120 &lt;/td&gt;

&lt;td align=&quot;center&quot;&gt; 337 &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 743     &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 697 &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; C++ &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 868 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;13. &lt;/td&gt;
&lt;td align=&quot;left&quot;&gt; Fuest           &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 32  &lt;/td&gt;

&lt;td align=&quot;center&quot;&gt; 254 &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 914     &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 350 &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; Python &lt;/td&gt;
&lt;td align=&quot;center&quot;&gt; 645 &lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;Note that the line count for my haskell program includes the game-tree library, which I bundled in my submission. Without it, it’s 156 lines of code I had to write, which is second best in the code golf category.&lt;/p&gt;&lt;p&gt;If you look at the &lt;a href=&quot;http://www.freiesmagazin.de/20090605-gewinner-des-programmierwettbewerbs-steht-fest&quot;&gt;timing statistics&lt;/a&gt;, you will see that my program took the longest. When the contest was started, the timelimit was one minute per round – which I of course tried to use as much as possibly, by increasing the search tree depth. Later into the contest, the rules were changed to limit it to one minute for a whole game, and that long-running programs will get points deducted. I did some &lt;a href=&quot;http://darcs.nomeata.de/cgi-bin/darcsweb.cgi?r=hbejeweler;a=commitdiff;h=20090422213648-23c07-50878471ef59da871bb8744bae4d65bfac022faf.gz&quot;&gt;minor&lt;/a&gt; &lt;a href=&quot;http://darcs.nomeata.de/cgi-bin/darcsweb.cgi?r=hbejeweler;a=commitdiff;h=20090422213659-23c07-9d8129cced9a4d5e29dc59ccac1081e206dd89df.gz&quot;&gt;changes&lt;/a&gt; based on a profiling run, but did otherwise not care too much about performance. I would have tried to improve the runtime by using Haskell’s good ability for parallelization. But when I asked on what kind of machine the code will be run, but they would not tell me. They said that this is a hobby programmer’s contest where allowing for parallelization were not fair, so I did not work in that direction.&lt;/p&gt;&lt;p&gt;All in all it was a positive experience, showing of Haskell’s qualities as a language that you can quickly get good results with.&lt;/p&gt;</description>
	<pubDate>Fri, 05 Jun 2009 18:49:50 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>
<item>
	<title>Joachim Breitner: Points of View</title>
	<guid>https://www.joachim-breitner.de/blog/archives/327-guid.html</guid>
	<link>https://www.joachim-breitner.de/blog/archives/327-Points-of-View.html</link>
	<description>&lt;p&gt;Thanks &lt;a href=&quot;http://mces.blogspot.com/2009/06/your-point-of-view.html&quot;&gt;Behdad&lt;/a&gt; for pointing out this &lt;a href=&quot;http://www.yourpointofview.com/page03.html&quot;&gt;interesting advertisement campaign&lt;/a&gt; by HSBC. I’m very surprised how a word, printed on top of an image, can completely reverse the impression that the image makes on you.&lt;/p&gt;
&lt;div align=&quot;center&quot;&gt;&lt;img alt=&quot;HSBC ad&quot; src=&quot;http://www.yourpointofview.com/img/old_preview/madness.jpg&quot; /&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; The links seem to be dead by now.&lt;/p&gt;</description>
	<pubDate>Tue, 02 Jun 2009 14:37:58 +0000</pubDate>
	<author>mail@joachim-breitner.de (nomeata)</author>
</item>

</channel>
</rss>
