<?xml version="1.0"?>
<rdf:RDF
	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:foaf="http://xmlns.com/foaf/0.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns="http://purl.org/rss/1.0/"
>
<channel rdf:about="http://planet.openghana.org/">
	<title>Planet Open Ghana</title>
	<link>http://planet.openghana.org/</link>
	<description>Planet Open Ghana - http://planet.openghana.org/</description>

	<items>
		<rdf:Seq>
			<rdf:li rdf:resource="http://kdex.wordpress.com/2009/07/01/back-again/" />
			<rdf:li rdf:resource="https://www.joachim-breitner.de/blog/archives/330-guid.html" />
			<rdf:li rdf:resource="https://www.joachim-breitner.de/blog/archives/328-guid.html" />
			<rdf:li rdf:resource="https://www.joachim-breitner.de/blog/archives/327-guid.html" />
			<rdf:li rdf:resource="http://odzangba.wordpress.com/?p=277" />
			<rdf:li rdf:resource="https://www.joachim-breitner.de/blog/archives/325-guid.html" />
			<rdf:li rdf:resource="https://www.joachim-breitner.de/blog/archives/324-guid.html" />
			<rdf:li rdf:resource="http://odzangba.wordpress.com/?p=273" />
			<rdf:li rdf:resource="https://www.joachim-breitner.de/blog/archives/322-guid.html" />
			<rdf:li rdf:resource="https://www.joachim-breitner.de/blog/archives/321-guid.html" />
			<rdf:li rdf:resource="http://ghanageek.wordpress.com/?p=181" />
			<rdf:li rdf:resource="http://ghanageek.wordpress.com/?p=203" />
			<rdf:li rdf:resource="http://odzangba.wordpress.com/?p=248" />
			<rdf:li rdf:resource="http://odzangba.wordpress.com/?p=257" />
			<rdf:li rdf:resource="https://www.joachim-breitner.de/blog/archives/320-guid.html" />
			<rdf:li rdf:resource="https://www.joachim-breitner.de/blog/archives/318-guid.html" />
			<rdf:li rdf:resource="https://www.joachim-breitner.de/blog/archives/317-guid.html" />
			<rdf:li rdf:resource="http://odzangba.wordpress.com/?p=194" />
			<rdf:li rdf:resource="http://odzangba.wordpress.com/?p=185" />
			<rdf:li rdf:resource="https://www.joachim-breitner.de/blog/archives/316-guid.html" />
			<rdf:li rdf:resource="http://odzangba.wordpress.com/?p=182" />
			<rdf:li rdf:resource="https://www.joachim-breitner.de/blog/archives/314-guid.html" />
			<rdf:li rdf:resource="https://www.joachim-breitner.de/blog/archives/313-guid.html" />
			<rdf:li rdf:resource="https://www.joachim-breitner.de/blog/archives/312-guid.html" />
			<rdf:li rdf:resource="https://www.joachim-breitner.de/blog/archives/311-guid.html" />
			<rdf:li rdf:resource="http://odzangba.wordpress.com/2008/11/25/reserve-a-zain-mobile-phone-number/" />
			<rdf:li rdf:resource="http://odzangba.wordpress.com/?p=161" />
			<rdf:li rdf:resource="https://www.joachim-breitner.de/blog/archives/310-guid.html" />
			<rdf:li rdf:resource="http://ghanageek.wordpress.com/?p=199" />
			<rdf:li rdf:resource="http://ghanageek.wordpress.com/?p=196" />
			<rdf:li rdf:resource="http://odzangba.wordpress.com/?p=156" />
			<rdf:li rdf:resource="http://odzangba.wordpress.com/2008/10/25/using-ubuntu-without-x/" />
			<rdf:li rdf:resource="http://ghanageek.wordpress.com/?p=188" />
			<rdf:li rdf:resource="https://www.joachim-breitner.de/blog/archives/308-guid.html" />
			<rdf:li rdf:resource="http://ghanageek.wordpress.com/?p=186" />
			<rdf:li rdf:resource="https://www.joachim-breitner.de/blog/archives/305-guid.html" />
			<rdf:li rdf:resource="http://kdex.wordpress.com/?p=14" />
			<rdf:li rdf:resource="http://odzangba.wordpress.com/?p=152" />
			<rdf:li rdf:resource="http://egoleo.wordpress.com/?p=33" />
			<rdf:li rdf:resource="http://egoleo.wordpress.com/?p=28" />
			<rdf:li rdf:resource="https://www.joachim-breitner.de/blog/archives/303-guid.html" />
			<rdf:li rdf:resource="http://egoleo.wordpress.com/?p=26" />
			<rdf:li rdf:resource="http://egoleo.wordpress.com/?p=24" />
			<rdf:li rdf:resource="https://www.joachim-breitner.de/blog/archives/302-guid.html" />
			<rdf:li rdf:resource="http://ghanageek.wordpress.com/?p=183" />
			<rdf:li rdf:resource="https://www.joachim-breitner.de/blog/archives/300-guid.html" />
			<rdf:li rdf:resource="https://www.joachim-breitner.de/blog/archives/299-guid.html" />
			<rdf:li rdf:resource="https://www.joachim-breitner.de/blog/archives/298-guid.html" />
			<rdf:li rdf:resource="http://egoleo.wordpress.com/?p=22" />
			<rdf:li rdf:resource="https://www.joachim-breitner.de/blog/archives/297-guid.html" />
			<rdf:li rdf:resource="http://egoleo.wordpress.com/?p=20" />
			<rdf:li rdf:resource="http://egoleo.wordpress.com/?p=19" />
			<rdf:li rdf:resource="http://odzangba.wordpress.com/?p=143" />
			<rdf:li rdf:resource="http://odzangba.wordpress.com/2008/06/30/frustrations/" />
			<rdf:li rdf:resource="http://odzangba.wordpress.com/?p=137" />
			<rdf:li rdf:resource="http://odzangba.wordpress.com/?p=68" />
			<rdf:li rdf:resource="http://odzangba.wordpress.com/?p=134" />
			<rdf:li rdf:resource="http://egoleo.wordpress.com/?p=17" />
			<rdf:li rdf:resource="http://egoleo.wordpress.com/?p=16" />
			<rdf:li rdf:resource="http://egoleo.wordpress.com/?p=15" />
		</rdf:Seq>
	</items>
</channel>

<item rdf:about="http://kdex.wordpress.com/2009/07/01/back-again/">
	<title>Kofi Boakye: Back Again !!</title>
	<link>http://kdex.wordpress.com/2009/07/01/back-again/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&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;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;&lt;/div&gt;</content:encoded>
	<dc:date>2009-07-01T17:47:39+00:00</dc:date>
</item>
<item rdf:about="https://www.joachim-breitner.de/blog/archives/330-guid.html">
	<title>Joachim Breitner: Introducing L-seed</title>
	<link>https://www.joachim-breitner.de/blog/archives/330-Introducing-L-seed.html</link>
	<content:encoded>&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;</content:encoded>
	<dc:date>2009-06-13T10:27:00+00:00</dc:date>
	<dc:creator>nomeata</dc:creator>
</item>
<item rdf:about="https://www.joachim-breitner.de/blog/archives/328-guid.html">
	<title>Joachim Breitner: Third place in AI programming contest</title>
	<link>https://www.joachim-breitner.de/blog/archives/328-Third-place-in-AI-programming-contest.html</link>
	<content:encoded>&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;</content:encoded>
	<dc:date>2009-06-05T18:49:50+00:00</dc:date>
	<dc:creator>nomeata</dc:creator>
</item>
<item rdf:about="https://www.joachim-breitner.de/blog/archives/327-guid.html">
	<title>Joachim Breitner: Points of View</title>
	<link>https://www.joachim-breitner.de/blog/archives/327-Points-of-View.html</link>
	<content:encoded>&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 src=&quot;http://www.yourpointofview.com/img/old_preview/madness.jpg&quot; alt=&quot;HSBC ad&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2009-06-02T14:37:58+00:00</dc:date>
	<dc:creator>nomeata</dc:creator>
</item>
<item rdf:about="http://odzangba.wordpress.com/?p=277">
	<title>Odzangba Dake: Greetings from Ho</title>
	<link>http://odzangba.wordpress.com/2009/05/25/greetings-from-ho/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;It&amp;#8217;s a long weekend (thanks to African Unity Day) and I&amp;#8217;m relaxing in sleepy Ho&amp;#8230; it&amp;#8217;s nice to get away from the constant hustle and bustle of Accra. Anyway, I&amp;#8217;ve had a lot of hard disk trouble lately. First I &lt;a href=&quot;http://odzangba.wordpress.com/2009/03/25/gzip-vs-bzip2-vs-lzma/&quot; target=&quot;_blank&quot;&gt;ran out of space&lt;/a&gt;, then my system hard disk died. As if that wasn&amp;#8217;t enough, the next day, my spare hard disk died too&amp;#8230; making my life doubly miserable. You see, I hadn&amp;#8217;t backed up my data&amp;#8230; I was out of space after all and the dvd shop is out of my way &amp;#8211; I kept putting it off. So I had to raid my younger brother&amp;#8217;s piggy bank for a new hard disk. I&amp;#8217;d like to think that &amp;#8220;I was not attached to those hard disks&amp;#8221; but it really grinds my gears the way they both failed in rapid succession. Now if I had my way, somebody at Seagate would be in a lot of pain right now. How is it that the world&amp;#8217;s largest hard disk manufacturer has so many defective products on shelves? For what it&amp;#8217;s worth, I&amp;#8217;m never buying a Seagate hard drive again&amp;#8230; even though Barracuda is such a cool name. Western Digital hard drives are &amp;#8211; in my experience &amp;#8211; much more reliable. But they really should do something about the name &amp;#8220;Caviar.&amp;#8221; &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;/p&gt;
&lt;p&gt;I now have a lot more hard disk space and a fresh install of Ubuntu 9.04. Morale of the story&amp;#8230; back up your data and don&amp;#8217;t buy Seagate !&lt;/p&gt;
  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/odzangba.wordpress.com/277/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/odzangba.wordpress.com/277/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/odzangba.wordpress.com/277/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/odzangba.wordpress.com/277/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/odzangba.wordpress.com/277/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/odzangba.wordpress.com/277/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/odzangba.wordpress.com/277/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/odzangba.wordpress.com/277/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/odzangba.wordpress.com/277/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/odzangba.wordpress.com/277/&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=277&amp;subd=odzangba&amp;ref=&amp;feed=1&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2009-05-25T05:59:42+00:00</dc:date>
</item>
<item rdf:about="https://www.joachim-breitner.de/blog/archives/325-guid.html">
	<title>Joachim Breitner: Buzz free</title>
	<link>https://www.joachim-breitner.de/blog/archives/325-Buzz-free.html</link>
	<content:encoded>&lt;p&gt;
My Openmoko &lt;a href=&quot;http://wiki.openmoko.org/wiki/Neo_FreeRunner&quot;&gt;FreeRunner&lt;/a&gt; suffered from the infamous hardware bug that causes bad buzzing for my dialog partner, making it relatively useless for me. Last week, though, a collegue of my brother fixed it for me (by applying some &lt;a href=&quot;http://people.openmoko.org/joerg/GSM_EMI_noise/big-C_rework_SOP_rc2.pdf&quot;&gt;soldering-skills&lt;/a&gt;), and indeed, the audio quality is above bearable now! I plan to get &lt;a href=&quot;http://wiki.debian.org/DebianOnFreeRunner&quot;&gt;Debian on the FreeRunner&lt;/a&gt; up to date again with the other developments in the community now. Or at least soon, depending on how much time I’ll be able to spare.&lt;/p&gt;</content:encoded>
	<dc:date>2009-04-22T22:06:49+00:00</dc:date>
	<dc:creator>nomeata</dc:creator>
</item>
<item rdf:about="https://www.joachim-breitner.de/blog/archives/324-guid.html">
	<title>Joachim Breitner: Bejeweled AI in Haskell</title>
	<link>https://www.joachim-breitner.de/blog/archives/324-Bejeweled-AI-in-Haskell.html</link>
	<content:encoded>&lt;p&gt;The German online magazine „&lt;a href=&quot;http://www.freiesmagazin.de/&quot;&gt;FreiesMagazin&lt;/a&gt;“ has started a &lt;a href=&quot;http://www.freiesmagazin.de/programmierwettbewerb&quot;&gt;programming contest&lt;/a&gt; yesterday. The task is to write an AI for a two-player bejeweled-like game, where the stones that you can match cause your opponent to lose live points.&lt;/p&gt;&lt;p&gt;This evening I thought that this would be a nice finger exercise in Haskell programming, and indeed it was. Most time was spent writing the code that communicates with the game supervisor (via text files) and that re-implements the &lt;a href=&quot;http://darcs.nomeata.de/hbejeweler/Data.hs&quot;&gt;game logic&lt;/a&gt; to simulate the next steps. The example code is in C++, so I had to do it again, but it’s rather short: 123 lines, consisting of 8 lines for the module header, 26 lines for the data definitions, 16 lines for in- and output and 73 lines for the actual rules of the game.&lt;/p&gt;&lt;p&gt;Writing the rest was really easy. 15 lines use a &lt;a href=&quot;http://hackage.haskell.org/cgi-bin/hackage-scripts/package/game-tree&quot;&gt;generic Haskell module&lt;/a&gt; to implement alpha-beta-search in &lt;a href=&quot;http://darcs.nomeata.de/hbejeweler/Strategy.hs&quot;&gt;Strategy.hs&lt;/a&gt;, and 6 lines of &lt;a href=&quot;http://darcs.nomeata.de/hbejeweler/Main.hs&quot;&gt;code to glue&lt;/a&gt; it all together. And I’m sure one can do better...&lt;/p&gt;&lt;p&gt;The program wins against the demo AI. By choosing other algorithms provided by game-tree might even improve that. Feel free to try it out!&lt;/p&gt;&lt;p&gt;My code is available in a &lt;a href=&quot;http://darcs.nomeata.de/hbejeweler&quot;&gt;darcs repository&lt;/a&gt; (&lt;a href=&quot;http://darcs.nomeata.de/cgi-bin/darcsweb.cgi?r=hbejeweler;a=summary&quot;&gt;browse&lt;/a&gt;) under the GPL2 or later and I invite everyone to use it as a base for contest entries. If you want to use Haskell, you can just replace the Strategy.hs and do not have to re-implement the game logic. If you submit such a program, just make sure you credit me appropriately. Also, as always, patches are welcome. If the code is too slow for your taste, you can decrease the depth parameter in Strategy.hs.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2009-04-03T00:50:00+00:00</dc:date>
	<dc:creator>nomeata</dc:creator>
</item>
<item rdf:about="http://odzangba.wordpress.com/?p=273">
	<title>Odzangba Dake: GZIP vs. BZIP2 vs. LZMA</title>
	<link>http://odzangba.wordpress.com/2009/03/25/gzip-vs-bzip2-vs-lzma/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;There&amp;#8217;s no nicer way to say it&amp;#8230; I&amp;#8217;m running out of disk space. I have three options: buy a larger hard drive, delete some files to free up space, or compress some of the data. Buying a larger hard drive is the best option in the long term but &amp;#8220;in the long term, we&amp;#8217;re all dead&amp;#8221; &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;  and deleting files is painful for me&amp;#8230; I&amp;#8217;m a serial pack rat. So I decided to explore compression as a way out of my disk space headaches. First, I had to find the most efficient compression algorithm, a task I soon found out is not easy. I read several blogs and websites and everybody had something good to say about their favorite algorithm. But one thing was clear, the &lt;strong&gt;GZIP, BZIP2&lt;/strong&gt; and &lt;strong&gt;LZMA&lt;/strong&gt; compression algorithms were leading the pack. To satisfy my own curiosity and determine for myself which was the most efficient, I decided to run some benchmarks. To be honest, I&amp;#8217;ve been hearing some good things about the LZMA compression algorithm so I was hoping it would live up to the hype.&lt;/p&gt;
&lt;p&gt;These benchmarks were conducted on a&lt;strong&gt; 2.53 GHz&lt;/strong&gt; processor with&lt;strong&gt; 2GB RAM&lt;/strong&gt; and a &lt;strong&gt;5400 RPM&lt;/strong&gt; Seagate Barracuda IDE hard disk. I also throttled the algorithms for maximum compression.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Version information:&lt;/strong&gt;&lt;br /&gt;
&lt;em&gt;gzip 1.3.12&lt;br /&gt;
bzip2 1.0.5&lt;br /&gt;
LZMA 4.32.0beta3&lt;br /&gt;
LZMA SDK 4.43&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;For starters, I threw an empty &lt;strong&gt;1GiB&lt;/strong&gt; file with nothing in it but binary zeros at them.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;$ dd if=/dev/zero of=test.zero -bs=1024M -count=1&lt;/strong&gt;&lt;br /&gt;
&lt;em&gt;1+0 records in&lt;br /&gt;
1+0 records out&lt;br /&gt;
1073741824 bytes (1.1 GB) copied, 187.978 s, 5.7 MB/s&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Now the fun starts.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GZIP&lt;/strong&gt;&lt;br /&gt;
$ /usr/bin/time -f &amp;#8220;%U seconds CPU %P&amp;#8221; gzip -c9 test.zero &amp;gt; test.gz&lt;br /&gt;
&lt;em&gt;&lt;strong&gt;12.36 seconds&lt;/strong&gt; CPU 99%&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;BZIP2&lt;/strong&gt;&lt;br /&gt;
$ /usr/bin/time -f &amp;#8220;%U seconds CPU %P&amp;#8221; bzip2 -c9 test.zero &amp;gt; test.bz2&lt;br /&gt;
&lt;em&gt;&lt;strong&gt;32.07 seconds&lt;/strong&gt; CPU 98%&lt;/em&gt;&lt;br /&gt;
&lt;strong&gt;&lt;br /&gt;
LZMA&lt;br /&gt;
&lt;/strong&gt;$ /usr/bin/time -f &amp;#8220;%U seconds CPU %P&amp;#8221; lzma -c9 test.zero &amp;gt; test.lzma&lt;br /&gt;
&lt;em&gt;&lt;strong&gt;873.79 seconds&lt;/strong&gt; CPU 96%&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;So what kind of compression ratios are we talking about here?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;$ ls -lh test.zero*&lt;/strong&gt;&lt;br /&gt;
&lt;em&gt;-rw-r&amp;#8211;r&amp;#8211; 1 kafui kafui  &lt;strong&gt;1.0G&lt;/strong&gt; 2009-03-25 12:01 test.zero&lt;br /&gt;
-rw-r&amp;#8211;r&amp;#8211; 1 kafui kafui &lt;strong&gt;1018K&lt;/strong&gt; 2009-03-25 12:51 test.gz&lt;br /&gt;
-rw-r&amp;#8211;r&amp;#8211; 1 kafui kafui  &lt;strong&gt;148K&lt;/strong&gt; 2009-03-25 13:10 test.lzma&lt;br /&gt;
-rw-r&amp;#8211;r&amp;#8211; 1 kafui kafui   &lt;strong&gt;785&lt;/strong&gt; 2009-03-25 12:52 test.bz2&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;GZIP squeezed 1 gigabyte into about 1 megabyte in about 12 seconds&amp;#8230; nice. LZMA&amp;#8217;s compression ratio was very impressive; it squeezed 1 gigabyte into 148 kilobytes BUT in 873.79 seconds&amp;#8230; that&amp;#8217;s almost 15 minutes. BZIP2 was absolutely cool&amp;#8230; 1Gib down to 785 bytes in 32 seconds! The clear winner here however is BZIP2. It has the highest compression ratio with acceptable time requirements. Now on to tests with real data.&lt;/p&gt;
&lt;p&gt;For the next test, I decided to compress the contents of my  &lt;strong&gt;/opt&lt;/strong&gt; folder. To simplify things, I created a tar archive of the folder first.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;$ sudo tar -cf opt.tar /opt&lt;/strong&gt;&lt;br /&gt;
&lt;em&gt;[sudo] password for kafui:&lt;br /&gt;
tar: Removing leading `/&amp;#8217; from member names&lt;br /&gt;
tar: Removing leading `/&amp;#8217; from hard link targets&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;$ ls -lh opt.tar &lt;/strong&gt;&lt;br /&gt;
&lt;em&gt;-rw-r&amp;#8211;r&amp;#8211; 1 root root &lt;strong&gt;120M&lt;/strong&gt; 2009-03-25 15:48 opt.tar&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;So we&amp;#8217;re working with &lt;strong&gt;120MB&lt;/strong&gt; of data. On to the tests:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GZIP&lt;/strong&gt;&lt;br /&gt;
$ /usr/bin/time -f &amp;#8220;%U seconds CPU %P&amp;#8221; gzip -c9 opt.tar &amp;gt; opt.tar.gz&lt;br /&gt;
&lt;em&gt;&lt;strong&gt;19.42 seconds&lt;/strong&gt; CPU 89%&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;BZIP2&lt;/strong&gt;&lt;br /&gt;
$ /usr/bin/time -f &amp;#8220;%U seconds CPU %P&amp;#8221; bzip2 -c9 opt.tar &amp;gt; opt.tar.bz2&lt;br /&gt;
&lt;em&gt;&lt;strong&gt;30.76 seconds&lt;/strong&gt; CPU 93%&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;LZMA&lt;/strong&gt;&lt;br /&gt;
/usr/bin/time -f &amp;#8220;%U seconds CPU %P&amp;#8221; lzma -c9 opt.tar &amp;gt; opt.tar.lzma&lt;br /&gt;
&lt;em&gt;&lt;strong&gt;132.21 seconds&lt;/strong&gt; CPU 92%&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;$ ls -lh opt.tar*&lt;/strong&gt;&lt;br /&gt;
&lt;em&gt;-rw-r&amp;#8211;r&amp;#8211; 1 &lt;/em&gt;&lt;em&gt;kafui kafui&lt;/em&gt;&lt;em&gt; &lt;strong&gt;120M&lt;/strong&gt; 2009-03-25 15:48 opt.tar&lt;br /&gt;
-rw-r&amp;#8211;r&amp;#8211; 1 &lt;/em&gt;&lt;em&gt;kafui kafui&lt;/em&gt;&lt;em&gt; &lt;strong&gt;39M&lt;/strong&gt; 2009-03-25 15:56 opt.tar.gz&lt;br /&gt;
-rw-r&amp;#8211;r&amp;#8211; 1 &lt;/em&gt;&lt;em&gt;kafui kafui&lt;/em&gt;&lt;em&gt; &lt;strong&gt;36M&lt;/strong&gt; 2009-03-25 16:09 opt.tar.bz2&lt;br /&gt;
-rw-r&amp;#8211;r&amp;#8211; 1 &lt;/em&gt;&lt;em&gt;kafui kafui&lt;/em&gt;&lt;em&gt; &lt;strong&gt;25M&lt;/strong&gt; 2009-03-25 16:16 opt.tar.lzma&lt;br /&gt;
&lt;/em&gt;&lt;br /&gt;
Once again, GZIP was the fastest and got 120MB down to 39MB in 19.42 seconds. BZIP2 reduced 120MB to 36MB but took 11.34 seconds longer than GZIP. LZMA delivered the best compression with 25MB but took 132.21 seconds. It appears there are trade-offs with each compression method. GZIP is fast but its compression ratio is the lowest of the three. LZMA (depending on the data) delivers the most efficient compression ratio but takes too much time to do so. BZIP2 strikes a balance between efficient compression and speed&amp;#8230; it&amp;#8217;s way faster than LZMA and can actually deliver better compression. LZMA just does not live up to the hype.&lt;/p&gt;
&lt;p&gt;Unfortunately, these benchmarks were of no use to me because about &lt;strong&gt;140GiB&lt;/strong&gt; of my data is made up of &lt;strong&gt;AVIs&lt;/strong&gt;, &lt;strong&gt;PNGs&lt;/strong&gt; and &lt;strong&gt;JPEGs&lt;/strong&gt;. These formats are already compressed so there isn&amp;#8217;t much room for further compression. But for what it&amp;#8217;s worth, I gave the algorithms a spin anyway.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;$ ls -lh The.Big.Bang.Theory.S01E10.avi &lt;/strong&gt;&lt;br /&gt;
&lt;em&gt;-rwxrwxrwx 1 &lt;/em&gt;&lt;em&gt;kafui kafui&lt;/em&gt;&lt;em&gt; &lt;strong&gt;175M&lt;/strong&gt; 2008-04-18 20:14 The.Big.Bang.Theory.S01E10.avi&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GZIP&lt;/strong&gt;&lt;br /&gt;
$ /usr/bin/time -f &amp;#8220;%U seconds CPU %P&amp;#8221; gzip -c9 The.Big.Bang.Theory.S01E10.avi &amp;gt; The.Big.Bang.Theory.S01E10.avi.gz&lt;br /&gt;
&lt;em&gt;&lt;strong&gt;10.94 seconds&lt;/strong&gt; CPU 78%&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;BZIP2&lt;/strong&gt;&lt;br /&gt;
$ /usr/bin/time -f &amp;#8220;%U seconds CPU %P&amp;#8221; bzip2 -c9 The.Big.Bang.Theory.S01E10.avi &amp;gt; The.Big.Bang.Theory.S01E10.avi.bz2&lt;br /&gt;
&lt;em&gt;&lt;strong&gt;55.15 seconds&lt;/strong&gt; CPU 94%&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;LZMA&lt;/strong&gt;&lt;br /&gt;
$ /usr/bin/time -f &amp;#8220;%U seconds CPU %P&amp;#8221; lzma -c9 The.Big.Bang.Theory.S01E10.avi &amp;gt; The.Big.Bang.Theory.S01E10.avi.lzma&lt;br /&gt;
&lt;em&gt;&lt;strong&gt;138.74 seconds&lt;/strong&gt; CPU 93%&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;$ ls -lh The.Big.Bang.Theory.S01E10.avi*&lt;/strong&gt;&lt;br /&gt;
&lt;em&gt;-rwxr-xr-x 1 &lt;/em&gt;&lt;em&gt;kafui kafui&lt;/em&gt;&lt;em&gt; 175M 2009-03-25 16:34 The.Big.Bang.Theory.S01E10.avi&lt;br /&gt;
-rw-r&amp;#8211;r&amp;#8211; 1 &lt;/em&gt;&lt;em&gt;kafui kafui&lt;/em&gt;&lt;em&gt; 173M 2009-03-25 16:35 The.Big.Bang.Theory.S01E10.avi.gz&lt;br /&gt;
-rw-r&amp;#8211;r&amp;#8211; 1 &lt;/em&gt;&lt;em&gt;kafui kafui&lt;/em&gt;&lt;em&gt; 173M 2009-03-25 16:39 The.Big.Bang.Theory.S01E10.avi.bz2&lt;br /&gt;
-rw-r&amp;#8211;r&amp;#8211; 1 &lt;/em&gt;&lt;em&gt;kafui kafui&lt;/em&gt;&lt;em&gt; 174M 2009-03-25 16:43 The.Big.Bang.Theory.S01E10.avi.lzma&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;GZIP and BZIP both got the 175MB episode of The Big Bang Theory down to 173MB; BZIP2 of course took 44.12 seconds longer. And LZMA got it down by only 1MB but in 138.74 seconds. As you can see, it doesn&amp;#8217;t make much sense for me to compress my videos and pictures&amp;#8230; not with those compression ratios. So it seems I&amp;#8217;ll just have to cough up the cedis for a new hard drive. &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;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/odzangba.wordpress.com/273/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/odzangba.wordpress.com/273/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/odzangba.wordpress.com/273/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/odzangba.wordpress.com/273/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/odzangba.wordpress.com/273/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/odzangba.wordpress.com/273/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/odzangba.wordpress.com/273/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/odzangba.wordpress.com/273/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/odzangba.wordpress.com/273/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/odzangba.wordpress.com/273/&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=273&amp;subd=odzangba&amp;ref=&amp;feed=1&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2009-03-25T18:04:24+00:00</dc:date>
</item>
<item rdf:about="https://www.joachim-breitner.de/blog/archives/322-guid.html">
	<title>Joachim Breitner: Server updated to Lenny</title>
	<link>https://www.joachim-breitner.de/blog/archives/322-Server-updated-to-Lenny.html</link>
	<content:encoded>&lt;p&gt;Just updated my server from etch to &lt;a href=&quot;http://www.debian.org/releases/lenny/&quot;&gt;lenny&lt;/a&gt;. It was a mostly painless procedure, only &lt;a href=&quot;http://www.nagios.org/&quot;&gt;nagios&lt;/a&gt; needed some manual interaction, as it was upgraded from nagios2 to nagios3. &lt;/p&gt;&lt;p&gt;My only bigger problem was an old web application (running &lt;a href=&quot;http://04.abi-sgh.de/&quot;&gt;my highschool’s grad class&lt;/a&gt;’ and my &lt;a href=&quot;http://www.netz-zwerge.de/&quot;&gt;old counter-strike clan&lt;/a&gt;’s websites) written in mod_perl, which is not easily upgradeable, plus I did not want to use mod_perl again – I’ve had too much trouble with it eating up my memory or taking down the webserver.&lt;/p&gt;&lt;p&gt;So I bit the bullet and replaced all mod_perl-related code with CGI-stuff.  It actually went quite well, at least when accepting some hacks. Speed does not matter here, as the sites are there mostly for nostalgic reasons anyways.&lt;/p&gt;&lt;p&gt;The other small thing that’s lost with apache1 is the &lt;a href=&quot;http://people.debian.org/~nomeata/xsa-sample.html&quot;&gt;demonstration page&lt;/a&gt; for the &lt;a href=&quot;http://de.wikipedia.org/wiki/Cross-Site_Authentication&quot;&gt;Cross-Site-Authentication&lt;/a&gt; attack. Also not a great loss, and it can easily be re-implemented using a few lines of python and inetd.&lt;/p&gt;&lt;p&gt;I wonder what to do with all the memory that was freed by not having apache1 (with mod_perl) and apache2 running at the same time :-)&lt;/p&gt;</content:encoded>
	<dc:date>2009-03-17T01:29:21+00:00</dc:date>
	<dc:creator>nomeata</dc:creator>
</item>
<item rdf:about="https://www.joachim-breitner.de/blog/archives/321-guid.html">
	<title>Joachim Breitner: In a Letter to Ghana’s President</title>
	<link>https://www.joachim-breitner.de/blog/archives/321-In-a-Letter-to-Ghanas-President.html</link>
	<content:encoded>&lt;p&gt;Thanks to &lt;a href=&quot;http://www.google.de/alerts&quot;&gt;Google’s watchful eyes&lt;/a&gt; I found out that I was mentioned in a &lt;a href=&quot;http://www.ghanaweb.com/GhanaHomePage/NewsArchive/artikel.php?ID=158626&quot;&gt;„Letter to the President“ of Ghana&lt;/a&gt;, published pseudonymously on ghanaweb.com, that advocates Free Software to the new President of Ghana, John Atta-Mills. So, to all new presidents out there, if you need advice, just ask me :-)&lt;/p&gt;</content:encoded>
	<dc:date>2009-03-11T19:49:37+00:00</dc:date>
	<dc:creator>nomeata</dc:creator>
</item>
<item rdf:about="http://ghanageek.wordpress.com/?p=181">
	<title>Kwasi Kwakwa: What else I’ve been watching</title>
	<link>http://ghanageek.wordpress.com/2009/03/05/what-else-ive-been-watching/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;I started this post when I was talking about The Wire, I figured I&amp;#8217;d put out a list of what else has been keeping my attention TV wise these days. Its late, but I already wrote most of it so I figured why not. I&amp;#8217;m not really a huge TV person, never have been. I tend to time-shift my shows and then watch them when I&amp;#8217;m not doing anything else, which usually ends up being late at night.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Battlestar Galactica&lt;/strong&gt;: This has been one of my favourite television shows of the last few years and is now heading towards an ending. If you haven&amp;#8217;t seen any of it, you should have. Its really, really good. Basically its a rimagining of on old science fiction show in which the human race is wiped out my a race of machines we&amp;#8217;ve created and the survivors are forced to run for their lives while being hunted by the same machines. Along the way thugh it becomes a great meditation on the nature of humanity, morality, religion etc. Its science fiction at its upper end. I recommend highly.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Big Bang Theory&lt;/strong&gt;: This I was determined not to like. Its a sitcom about a pair of socially awkward physicists and their friends. I pretty much expected that the writers would settle for the dumbest possible nerd stereotypes, add no real depth and screw the story up. Instead, they kept the stereotypes but managed to add enough depth and authenticity to make them real people. Interestingly enough, there are quire a few scientists I know who are followers of the show because of how well its written and the inside jokes it throws our way. Also recommended&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Unit&lt;/strong&gt;: &lt;a href=&quot;http://www.imdb.com/name/nm0371660/&quot; target=&quot;_blank&quot;&gt;Dennis Haysbert&lt;/a&gt; shooting people and looking cool in the process. Need I say more? Its a bit on heavy handed in its stance at times,but its great pulp action and good acting. All things I&amp;#8217;m partial to.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Other stuff I&amp;#8217;m watching but not so keen on writing a short paragraph about, Mobile Suit Gundam 00 and  the new season of Hajime No Ippo (yes, I like anime. It doesn&amp;#8217;t say geek up there because I couldn&amp;#8217;t come up with another name)&lt;/p&gt;
&lt;p&gt;I was also watching Dr. Who and Torchwood until both seasons ended. I&amp;#8217;m really, really waiting for them to start back up again, even though they shall no longer be servicing my &lt;a href=&quot;http://en.wikipedia.org/wiki/Freema_Agyeman&quot; target=&quot;_blank&quot;&gt;Freema Agyeman&lt;/a&gt; crush. Again, if you are a science fiction fan and not watching these, your loss. Majorly.&lt;/p&gt;
  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/ghanageek.wordpress.com/181/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/ghanageek.wordpress.com/181/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/ghanageek.wordpress.com/181/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/ghanageek.wordpress.com/181/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/ghanageek.wordpress.com/181/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/ghanageek.wordpress.com/181/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/ghanageek.wordpress.com/181/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/ghanageek.wordpress.com/181/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/ghanageek.wordpress.com/181/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/ghanageek.wordpress.com/181/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=ghanageek.wordpress.com&amp;blog=474047&amp;post=181&amp;subd=ghanageek&amp;ref=&amp;feed=1&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2009-03-05T23:00:23+00:00</dc:date>
</item>
<item rdf:about="http://ghanageek.wordpress.com/?p=203">
	<title>Kwasi Kwakwa: In which the absentee host returns. Again</title>
	<link>http://ghanageek.wordpress.com/2009/03/04/in-which-the-absentee-host-returns-again/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;A very belated happy new year to you people. Apologies for the long absences. Again. At this point I&amp;#8217;m pretty sure I&amp;#8217;m down to just the people who forgot to remove me from their feed readers.&lt;/p&gt;
&lt;p&gt;Quick Updates on what I&amp;#8217;ve been up to:&lt;/p&gt;
&lt;p&gt;I was officially awarded my Masters by Research in Physics. My parents and big sister were in town for my graduation and that will easily pass for my best day this year. Since then I&amp;#8217;ve gotten accepted into a physics PhD program with the same advisor at the same university. 3 more years of this and I get to walk across a stage again in a gown with a hood on it and put &amp;#8216;Doctor&amp;#8217; on my business cards.&lt;/p&gt;
&lt;p&gt;On the Physical side. I persist with my judo and have now logged hundreds of hours of being thrown around, pinned, choked and armlocked. On good days I get to do the same to other people. In a little under 2 weeks I get to compete in the BUCS(British Universities and Colleges Sport) kyu grade competition. Hopefully all that work will end up in me getting a few good throws. Either way there will be pictures and maybe even video. At some point before I get the PhD I want to get my first dan(black belt)&lt;/p&gt;
&lt;p&gt;Otherwise, I live in London, I study, I train, I hang out with friends, I still read too much, I watch the odd movie and life continues.&lt;/p&gt;
&lt;p&gt;There&amp;#8217;s a bit of a backlog of topics I was planning to write about but never got around to. Some will make it out in the coming weeks, some won&amp;#8217;t. Either way, keep me in your readers people. If nothing else I need the touch typing practice&lt;/p&gt;
  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/ghanageek.wordpress.com/203/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/ghanageek.wordpress.com/203/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/ghanageek.wordpress.com/203/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/ghanageek.wordpress.com/203/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/ghanageek.wordpress.com/203/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/ghanageek.wordpress.com/203/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/ghanageek.wordpress.com/203/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/ghanageek.wordpress.com/203/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/ghanageek.wordpress.com/203/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/ghanageek.wordpress.com/203/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=ghanageek.wordpress.com&amp;blog=474047&amp;post=203&amp;subd=ghanageek&amp;ref=&amp;feed=1&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2009-03-04T23:43:46+00:00</dc:date>
</item>
<item rdf:about="http://odzangba.wordpress.com/?p=248">
	<title>Odzangba Dake: Graphical Hardware Information Tools</title>
	<link>http://odzangba.wordpress.com/2009/02/28/graphical-hardware-information-tools/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;Just a few months ago, I was not even using a graphical environment; videos, music, surfing the internet, instant messaging&amp;#8230; all from the terminal. But my philosophy on software has been undergoing subtle changes ever since the I got a faster computer. The thing is, I now default to graphical applications for most tasks. Where aptitude, mplayer, mpd, ncmpc, rtorrent, finch and elinks ruled supreme, synaptic, amarok, smplayer, deluge, pidgin and firefox have the upper hand. So this morning, I decided to find a GUI hardware information program to replace &lt;strong&gt;lspci, lshw and dmidecode&lt;/strong&gt;&amp;#8230; not really, I just needed a graphical frontend to these tools.  It took me about 15 minutes to go through the top three: &lt;strong&gt;Hardinfo, Sysinfo and Lshw-gtk&lt;/strong&gt;. Hardinfo was the most impressive of the lot. In addition to hardware information, it can perform benchmark tests and let you compare the results with that of others. My lean, mean and ridiculously affordable box did quite well in the comparison tests. &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;  Sysinfo was a little stingy on information but it&amp;#8217;s quite capable. Lshw-gtk, as the name implies, is really just a graphical frontend to lshw and threw up some detailed information about my motherboard and CPU but very little else. I&amp;#8217;m keeping only hardinfo for the long term however, the others don&amp;#8217;t quite live up to expectations. Anyways, that is only my opinion&amp;#8230; I&amp;#8217;ll let the screenshots do the rest of the talking:&lt;/p&gt;

&lt;a href=&quot;http://odzangba.wordpress.com/2009/02/28/graphical-hardware-information-tools/screenshot-cpu-zlib-system-information/&quot; title=&quot;screenshot-cpu-zlib-system-information&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;110&quot; src=&quot;http://odzangba.files.wordpress.com/2009/01/screenshot-cpu-zlib-system-information.png?w=150&amp;h=110&quot; class=&quot;attachment-thumbnail&quot; alt=&quot;CPU-Z Benchmark&quot; title=&quot;screenshot-cpu-zlib-system-information&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://odzangba.wordpress.com/2009/02/28/graphical-hardware-information-tools/screenshot-cpu-blowfish-system-information/&quot; title=&quot;screenshot-cpu-blowfish-system-information&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;110&quot; src=&quot;http://odzangba.files.wordpress.com/2009/01/screenshot-cpu-blowfish-system-information.png?w=150&amp;h=110&quot; class=&quot;attachment-thumbnail&quot; alt=&quot;Blowfish Benchmark&quot; title=&quot;screenshot-cpu-blowfish-system-information&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://odzangba.wordpress.com/2009/02/28/graphical-hardware-information-tools/screenshot-cpu-fibonacci-system-information/&quot; title=&quot;screenshot-cpu-fibonacci-system-information&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;110&quot; src=&quot;http://odzangba.files.wordpress.com/2009/01/screenshot-cpu-fibonacci-system-information.png?w=150&amp;h=110&quot; class=&quot;attachment-thumbnail&quot; alt=&quot;Fibinacci Benchmark&quot; title=&quot;screenshot-cpu-fibonacci-system-information&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://odzangba.wordpress.com/2009/02/28/graphical-hardware-information-tools/screenshot-cpu-md5-system-information/&quot; title=&quot;screenshot-cpu-md5-system-information&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;110&quot; src=&quot;http://odzangba.files.wordpress.com/2009/01/screenshot-cpu-md5-system-information.png?w=150&amp;h=110&quot; class=&quot;attachment-thumbnail&quot; alt=&quot;MD5 Benchmark&quot; title=&quot;screenshot-cpu-md5-system-information&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://odzangba.wordpress.com/2009/02/28/graphical-hardware-information-tools/screenshot-fpu-raytracing-system-information/&quot; title=&quot;screenshot-fpu-raytracing-system-information&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;110&quot; src=&quot;http://odzangba.files.wordpress.com/2009/01/screenshot-fpu-raytracing-system-information.png?w=150&amp;h=110&quot; class=&quot;attachment-thumbnail&quot; alt=&quot;Ray Tracing Benchmark&quot; title=&quot;screenshot-fpu-raytracing-system-information&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://odzangba.wordpress.com/2009/02/28/graphical-hardware-information-tools/screenshot-cpu-sha1-system-information/&quot; title=&quot;screenshot-cpu-sha1-system-information&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;110&quot; src=&quot;http://odzangba.files.wordpress.com/2009/01/screenshot-cpu-sha1-system-information.png?w=150&amp;h=110&quot; class=&quot;attachment-thumbnail&quot; alt=&quot;&quot; title=&quot;screenshot-cpu-sha1-system-information&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://odzangba.wordpress.com/2009/02/28/graphical-hardware-information-tools/screenshot-processor-system-information/&quot; title=&quot;screenshot-processor-system-information&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;110&quot; src=&quot;http://odzangba.files.wordpress.com/2009/02/screenshot-processor-system-information.png?w=150&amp;h=110&quot; class=&quot;attachment-thumbnail&quot; alt=&quot;&quot; title=&quot;screenshot-processor-system-information&quot; /&gt;&lt;/a&gt;

  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/odzangba.wordpress.com/248/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/odzangba.wordpress.com/248/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/odzangba.wordpress.com/248/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/odzangba.wordpress.com/248/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/odzangba.wordpress.com/248/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/odzangba.wordpress.com/248/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/odzangba.wordpress.com/248/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/odzangba.wordpress.com/248/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/odzangba.wordpress.com/248/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/odzangba.wordpress.com/248/&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=248&amp;subd=odzangba&amp;ref=&amp;feed=1&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2009-02-28T19:48:57+00:00</dc:date>
</item>
<item rdf:about="http://odzangba.wordpress.com/?p=257">
	<title>Odzangba Dake: How To Fix Partition Table Order</title>
	<link>http://odzangba.wordpress.com/2009/02/28/how-to-fix-partition-table-order/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;Last week, I resized one of my partitions to create some swap space. It&amp;#8217;s a long painful story that I will not bore you with but essentially, I got cocky with my 2GB RAM and refused to allocate swap space&amp;#8230; ubuntu punished me by activating compcache which then caused random lockups of the system. Anyway, I was coming up to the end of an install cycle anyway so I backed up the system with remastersys (that is one story, I&amp;#8217;ll have to blog about later), resized one of my partitions to create swap space and out of habit, did a &lt;strong&gt;sudo fdisk -l&lt;/strong&gt;&amp;#8230; it told me my partition entries were not in the proper order (a side effect of the resizing). It wasn&amp;#8217;t a big problem, just an irritation really but an irritation nevertheless. I decided to fix it before the install:&lt;/p&gt;
&lt;p&gt;sudo fdisk /dev/sda&lt;br /&gt;
press &lt;strong&gt;x&lt;/strong&gt; to enter expert mode&lt;br /&gt;
press &lt;strong&gt;f&lt;/strong&gt; to fix partition order&lt;br /&gt;
press &lt;strong&gt;w&lt;/strong&gt; to write the partition table changes to disk&lt;/p&gt;
&lt;p&gt;Yes, I&amp;#8217;l take a Heineken. &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;/p&gt;
  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/odzangba.wordpress.com/257/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/odzangba.wordpress.com/257/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/odzangba.wordpress.com/257/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/odzangba.wordpress.com/257/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/odzangba.wordpress.com/257/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/odzangba.wordpress.com/257/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/odzangba.wordpress.com/257/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/odzangba.wordpress.com/257/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/odzangba.wordpress.com/257/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/odzangba.wordpress.com/257/&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=257&amp;subd=odzangba&amp;ref=&amp;feed=1&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2009-02-28T19:27:33+00:00</dc:date>
</item>
<item rdf:about="https://www.joachim-breitner.de/blog/archives/320-guid.html">
	<title>Joachim Breitner: Reliability testing for python-dbus applications</title>
	<link>https://www.joachim-breitner.de/blog/archives/320-Reliability-testing-for-python-dbus-applications.html</link>
	<content:encoded>&lt;p&gt;In the Openmoko community, a lot of programs are written in python and use services provided over D-Bus. But I’m under the impression that not enough programmers consider that D-Bus is a remote protocol, and the other side might fail to respond any time. The code then works find if nothing goes wrong, but does not handle problems well. Understandably, it is hard to get this error checking right if you can’t really test it, as usually the D-Bus services do not fail. This is particularly annoying on a phone, because it might just be the program responsible for popping up the on screen keyboard that just failed.&lt;/p&gt;&lt;p&gt;Therefore I started to write a little &lt;a href=&quot;http://www.joachim-breitner.de/various/dbus_test.py&quot;&gt;python module called python_test.py&lt;/a&gt; that replaces some D-Bus functions in the python bindings (SystemBus.get_object and Connection.call_blocking at the moment) and makes them fail with a certain probability. You can add &amp;quot;import dbus_test&amp;quot; to your program (and adjust $PYTHON_PATH) and run it a few times, to see which error conditions are caught and which cause your problem to fail. If you come across failures that the script does not yet generate, they can easily be added.&lt;/p&gt;&lt;p&gt;Not sure yet if I am going to extend and maintain this, but I’m open to suggestions and additions. Maybe this (or something similar) should be provided by python-dbus directly.&lt;/p&gt;</content:encoded>
	<dc:date>2009-02-12T13:55:37+00:00</dc:date>
	<dc:creator>nomeata</dc:creator>
</item>
<item rdf:about="https://www.joachim-breitner.de/blog/archives/318-guid.html">
	<title>Joachim Breitner: Openmoko User Meeting in Karlsruhe</title>
	<link>https://www.joachim-breitner.de/blog/archives/318-Openmoko-User-Meeting-in-Karlsruhe.html</link>
	<content:encoded>&lt;p&gt;About one hour ago we have finished the first &lt;a href=&quot;https://entropia.de/wiki/OpenMoko_User_Meet&quot;&gt;Openmoko user meeting&lt;/a&gt; in Karlsruhe. Twelve &lt;a href=&quot;http://wiki.openmoko.org/wiki/Neo_FreeRunner&quot;&gt;FreeRunner&lt;/a&gt; (and Neo1973) owners have gatherd in the rooms of &lt;a href=&quot;https://entropia.de/&quot;&gt;Entropia&lt;/a&gt; (the local &lt;a href=&quot;http://ccc.de/&quot;&gt;CCC&lt;/a&gt; club), and discussed the various distributions, learned aboutt the &lt;a href=&quot;http://www.freesmartphone.org/&quot;&gt;FSO&lt;/a&gt;-alternative &lt;a href=&quot;http://pyneo.org/&quot;&gt;PyNeo&lt;/a&gt;, which was advocated by Josh, compared GPS applications and talked about various other projects and issues.&lt;/p&gt;&lt;div align=&quot;center&quot;&gt;&lt;a href=&quot;https://entropia.de/wiki/Bild:Gta01_Freerunner_Massen.jpg&quot;&gt;&lt;img height=&quot;120&quot; border=&quot;0&quot; width=&quot;180&quot; src=&quot;https://entropia.de/wiki/images/thumb/a/a8/Gta01_Freerunner_Massen.jpg/180px-Gta01_Freerunner_Massen.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;I collected some statistics about Distribution usage. Most common was &lt;a href=&quot;http://shr-project.org/&quot;&gt;SHR&lt;/a&gt;, with five users, followed by &lt;a href=&quot;http://wiki.openmoko.org/wiki/Om_2008.12&quot;&gt;OM 2008.12 with&lt;/a&gt; three users. Single users had &lt;a href=&quot;http://wiki.debian.org/DebianOnFreeRunner&quot;&gt;Debian&lt;/a&gt;, OM testing from pre 2008.12, PyNeo, &lt;a href=&quot;http://www.emdebian.org/&quot;&gt;EmDebian&lt;/a&gt; and &lt;a href=&quot;http://wiki.openmoko.org/wiki/Om_2008.9&quot;&gt;OM 2008.9&lt;/a&gt; installed. Only counting those who use their FreeRunner as their day-to-day phone, three are using SHR, one OM 2008.12 and one OM testing. I conclude that SHR seems to be a good choice if you want to have a working phone.&lt;/p&gt;&lt;p&gt;Asked about their primary use case for the FreeRunner, almost all mentioned telephony and GPS. Half of the participants want to use it to browse the web, a little less think that games are important. Two people, who came from Stuttgart, see &lt;a href=&quot;http://wiki.openmoko.org/wiki/CellHunter&quot;&gt;CellHunter&lt;/a&gt; as an important use case&lt;/p&gt;&lt;p&gt;Considering that we filled three hours without running out of topics and the good feedback, we will likely have a sequel to this. A date has not been fixed yet, but will be discussed on the &lt;a href=&quot;http://lists.openmoko.org/mailman/listinfo/community&quot;&gt;openmoko-community&lt;/a&gt; mailing list.&lt;/p&gt;&lt;p&gt;BTW: I’m still planning to package the SHR applications for Debian as soon as possible. Only one dependency (libetk) is missing, but according to Lutin from the pkg-e team, it’s almost ready.&lt;/p&gt;</content:encoded>
	<dc:date>2009-02-11T23:12:58+00:00</dc:date>
	<dc:creator>nomeata</dc:creator>
</item>
<item rdf:about="https://www.joachim-breitner.de/blog/archives/317-guid.html">
	<title>Joachim Breitner: darcswatch uploaded to hackage</title>
	<link>https://www.joachim-breitner.de/blog/archives/317-darcswatch-uploaded-to-hackage.html</link>
	<content:encoded>&lt;p&gt;I just made my &lt;a href=&quot;http://hackage.haskell.org/cgi-bin/hackage-scripts/package/darcswatch&quot;&gt;first upload to hackage&lt;/a&gt; (not counting uploads I did during my work in Dresden). Don Steward repeatedly told me to package and upload &lt;a href=&quot;https://www.joachim-breitner.de/blog/archives/290-Announcing-DarcsWatch.html&quot;&gt;darcswatch&lt;/a&gt;, so I just did that. Thanks to Gwern Branwen to contribute the first cabal file.&lt;/p&gt;&lt;p&gt;There is little documentation on how to set up darcswatch yourself, so if you actually want to try it out, you most likely will have to get in touch with me. Note that you can just use the installation on &lt;a href=&quot;http://darcswatch.nomeata.de/&quot;&gt;http://darcswatch.nomeata.de/&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;If you, for some reason, feel like hacking on darcswatch, I’d be interested in memory reduction. I currently process 916 mails containing 1867 patches and 47MB, as well as 13 repositories, some of which are rather large, and the numbers are increasing.&lt;/p&gt;</content:encoded>
	<dc:date>2009-01-21T22:17:32+00:00</dc:date>
	<dc:creator>nomeata</dc:creator>
</item>
<item rdf:about="http://odzangba.wordpress.com/?p=194">
	<title>Odzangba Dake: Recover Deleted Files Using Linux</title>
	<link>http://odzangba.wordpress.com/2009/01/20/recover-deleted-files-using-linux/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;One of my neighbours came to me a couple of days ago with a problem&amp;#8230; he&amp;#8217;d lost his CV to a windows virus and had no backup. So I said I&amp;#8217;d try to recover the file for him. A quick google led me to &lt;a href=&quot;http://linux.die.net/man/1/foremost&quot; target=&quot;_blank&quot;&gt;Foremost&lt;/a&gt;. I chose foremost because it&amp;#8217;s small, fast and easy to use. Since this was a file recovery operation, I decided to minimize the risk of the deleted file being overwritten by creating a disk image of the pen drive. A quick&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;dd if=/dev/sdb of=recover.iso&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;did the trick.&lt;/p&gt;
&lt;p&gt;Then it was a simple matter of&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;sudo apt-get install foremost&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;to install foremost and then&amp;#8230;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;foremost -t doc recover.iso&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The &amp;#8216;-t doc&amp;#8217;  parameter tells foremost to look for only Microsoft Word files. About a minute later, the thing was done and the files were back. For what it&amp;#8217;s worth, if you accidentally delete a file, it&amp;#8217;s a very bad idea to continue using the computer. Shut down the pc or disconnect the drive immediately and look for a linux rescue cd. &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;/p&gt;
  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/odzangba.wordpress.com/194/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/odzangba.wordpress.com/194/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/odzangba.wordpress.com/194/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/odzangba.wordpress.com/194/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/odzangba.wordpress.com/194/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/odzangba.wordpress.com/194/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/odzangba.wordpress.com/194/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/odzangba.wordpress.com/194/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/odzangba.wordpress.com/194/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/odzangba.wordpress.com/194/&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=194&amp;subd=odzangba&amp;ref=&amp;feed=1&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2009-01-20T20:23:59+00:00</dc:date>
</item>
<item rdf:about="http://odzangba.wordpress.com/?p=185">
	<title>Odzangba Dake: openSUSE 11.1… sigh Pt.1</title>
	<link>http://odzangba.wordpress.com/2009/01/01/opensuse-111-sigh-pt1/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;I chose to stay up and install openSUSE rather than crash the crazy new year parties in Accra (or go to church as all of my neighbours did). It could have been such a great distro. Later in the day, the good and the bad about openSUSE.&lt;/p&gt;
  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/odzangba.wordpress.com/185/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/odzangba.wordpress.com/185/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/odzangba.wordpress.com/185/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/odzangba.wordpress.com/185/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/odzangba.wordpress.com/185/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/odzangba.wordpress.com/185/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/odzangba.wordpress.com/185/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/odzangba.wordpress.com/185/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/odzangba.wordpress.com/185/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/odzangba.wordpress.com/185/&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=185&amp;subd=odzangba&amp;ref=&amp;feed=1&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2009-01-01T10:55:33+00:00</dc:date>
</item>
<item rdf:about="https://www.joachim-breitner.de/blog/archives/316-guid.html">
	<title>Joachim Breitner: Handling explicit and implicit recusion in Haskell data</title>
	<link>https://www.joachim-breitner.de/blog/archives/316-Handling-explicit-and-implicit-recusion-in-Haskell-data.html</link>
	<content:encoded>&lt;p&gt;
For a while I have been pondering over a problem that arises when your functionally written program has some state with cross references – for example a list of users, each of which uses a number of computers, and a list of computers, each having an owner.
&lt;/p&gt;

&lt;h3&gt;Implicit referencing&lt;/h3&gt;
&lt;p&gt;
For doing queries on such data, it would be convenient if every reference is just the referenced object itself. Although we would visualize this as a graph, semantically, it is more like an infinite tree. This is possible in Haskell, due to laziness, and if you create the data structure cleverly, it even uses constant memory, no matter how “deep” you enter this infinite tree (&lt;a href=&quot;https://www.joachim-breitner.de/blog/archives/308-Infinite-loops-in-Haskell.html&quot;&gt;a recent post of mine talks about this&lt;/a&gt;). A possible data definition would be:
&lt;/p&gt;
&lt;pre&gt;data User = User {&lt;br /&gt;	userName :: String,&lt;br /&gt;	uses :: [Computer]&lt;br /&gt;	}&lt;br /&gt;data Computer = Computer {&lt;br /&gt;	computerName :: String,&lt;br /&gt;	owner :: User -- references the Users&lt;br /&gt;	}&lt;br /&gt;data State = State [User] [Computer]&lt;br /&gt;&lt;br /&gt;testState = let user = User &amp;quot;Conrad&amp;quot; [computer]&lt;br /&gt;                computer = Computer &amp;quot;Z3&amp;quot; user &lt;br /&gt;            in State [user] [computer]&lt;/pre&gt;

&lt;h3&gt;Explicit referencing&lt;/h3&gt;
&lt;p&gt;
But such a representation is very unsuitable for updates (at least I can’t think if a nice way of updating such a graph without breaking the internal cross-references) and serialization, which is a must for a &lt;a href=&quot;http://happs.org&quot;&gt;HAppS&lt;/a&gt; based application. So what one would probably start with is this data structure:
&lt;/p&gt;

&lt;pre&gt;data User = User {&lt;br /&gt;	userId :: Int,&lt;br /&gt;	userName :: String,&lt;br /&gt;	uses :: [Int] -- references the Computers&lt;br /&gt;	}&lt;br /&gt;data Computer = Computer {&lt;br /&gt;	computerId :: Int,&lt;br /&gt;	computerName :: String,&lt;br /&gt;	owner :: Int -- references the Users&lt;br /&gt;	}&lt;br /&gt;data State = State [User] [Computer]&lt;br /&gt;&lt;br /&gt;testState = State&lt;br /&gt;		[User 0 &amp;quot;Conrad&amp;quot; [1]]&lt;br /&gt;		[Computer 1 &amp;quot;Z3&amp;quot; 0]&lt;/pre&gt;

&lt;p&gt;I think the semantics of this are clear. Note that the referencing is currently not type-safe, but this can be provided by phantom types. Maybe I’ll write more about that later.
&lt;/p&gt;

&lt;p&gt;
Now imaging you want to display the information about the first computer with your web application. You extract the information with 
&lt;tt&gt;let State _ cs = testState in head cs&lt;/tt&gt; and pass that to your templating engine. But what if your template wants to display the name of the owner? It only has access to his &lt;tt&gt;userId&lt;/tt&gt;. You would either need to know what information the template will ever need, extract that from the state beforehand and pass it along, or give the template access to the whole state. In that case, though, there has to be lookup-logic in your output code, which is also not nice. 
&lt;/p&gt;

&lt;p&gt;Woudln’t it be nice if you could, in your application logic, work with the explicit references, which are easy to modify and store, but somehow turn that into the implicit referencing?&lt;/p&gt;

&lt;h3&gt;Duplicated representation&lt;/h3&gt;
&lt;p&gt;One way would be to have two unrelated sets of data structures, &lt;tt&gt;ExplicitState&lt;/tt&gt;, &lt;tt&gt;ExplicitUser&lt;/tt&gt;, &lt;tt&gt;ExplicitComputer&lt;/tt&gt;, which use explicit identifiers to reference each other, and &lt;tt&gt;ImplicitState&lt;/tt&gt;,... which are defined as the first representation of our state. It is then mostly trivial to write a function that converts &lt;tt&gt;ExplicitState&lt;/tt&gt; to &lt;tt&gt;ImplicitState&lt;/tt&gt;.
&lt;/p&gt;

&lt;p&gt;
The big disadvantage of this is that you have to maintain these two different hierarchies. It also means that every function on the state has to be defined twice, which often almost identical code. Clearly, this is not desirable.
&lt;/p&gt;

&lt;h3&gt;Annotated representation&lt;/h3&gt;
&lt;p&gt;
It would be more elegant if the state is stored in one data type that, controlled by a type parameter, comes in the one or the other representation. To do that, we need two types: One that contains a value, and one that contains just a reference:
&lt;/p&gt;
&lt;pre&gt;newtype Id v = Id v deriving (Show, Typeable, Data)&lt;br /&gt;newtype Ref v = Ref Int deriving (Show, Typeable, Data)&lt;/pre&gt;
&lt;p&gt;
Then we need to adjust our data definitions, to make use of these. (I’ll leave out the names, to keep the code smaller)&lt;/p&gt;
&lt;pre&gt;data User ref = User {&lt;br /&gt;	userId :: Int,&lt;br /&gt;	uses :: [ref (Computer ref)]&lt;br /&gt;	}&lt;br /&gt;data Computer ref = Computer {&lt;br /&gt;	computerId :: Int,&lt;br /&gt;	owner :: ref (User ref)&lt;br /&gt;	}&lt;br /&gt;data State ref = State [User ref] [Computer ref]&lt;/pre&gt;
&lt;p&gt;
Here we introduce a type parameter “ref”, which will later be either &lt;tt&gt;Id&lt;/tt&gt; or &lt;tt&gt;Ref&lt;/tt&gt;. Note that now a reference also states the object it is a reference for, which greatly increases type safety. Functions on these data types that don’t work with the references will be polymorphic in the “ref” type parameter, so only need to be written once. A &lt;tt&gt;User Id&lt;/tt&gt; is a complete user with all related data, while &lt;tt&gt;User Ref&lt;/tt&gt; is a user with only references. And a &lt;tt&gt;Ref (User Ref)&lt;/tt&gt; is reference to a user, which contains references...&lt;/p&gt;

&lt;h3&gt;Not so kind kinds&lt;/h3&gt;
&lt;p&gt;
Did you notice the lack of a deriving clause? Our data structures have the relatively peculiar kind (&lt;tt&gt;(* -&amp;gt; *) -&amp;gt; *&lt;/tt&gt;), which makes it hard for the compiler to derive instances for things like &lt;tt&gt;Show&lt;/tt&gt;. But we already know that we will only use &lt;tt&gt;Id&lt;/tt&gt; or &lt;tt&gt;Ref&lt;/tt&gt; for the type variable, so we can use ghc’s &lt;tt&gt;StandaloneDeriving&lt;/tt&gt; language extension and have these instances created:
&lt;/p&gt;
&lt;pre&gt;deriving instance Show (User Id)&lt;br /&gt;deriving instance Show (User Ref)&lt;br /&gt;deriving instance Show (Computer Id)&lt;br /&gt;deriving instance Show (Computer Ref)&lt;br /&gt;deriving instance Show (State Id)&lt;br /&gt;deriving instance Show (State Ref)&lt;/pre&gt;

&lt;h3&gt;Toggling a type parameter&lt;/h3&gt;
&lt;p&gt;
The next step is to write the conversion function. It will have type
&lt;/p&gt;&lt;pre&gt;unrefState :: State Ref -&amp;gt; State Id&lt;/pre&gt;
&lt;p&gt; For that, and for later, we need lookup functions:&lt;/p&gt;
&lt;pre&gt;unrefUserRef :: State Id -&amp;gt; Ref (User Ref) -&amp;gt; Id (User Id)&lt;br /&gt;unrefUserRef (State l _) (Ref i) = Id $ fromJust $&lt;br /&gt;	find (\u@(User i' _) -&amp;gt; i == i') l &lt;br /&gt;unrefComputerRef :: State Id -&amp;gt; Ref (Computer Ref) -&amp;gt; Id (Computer Id)&lt;br /&gt;unrefComputerRef (State _ l) (Ref i) = Id $ fromJust $&lt;br /&gt;	find (\u@(Computer i' _) -&amp;gt; i == i') l &lt;/pre&gt;
&lt;p&gt;
These expect a State (with implicit referencing) and a reference, and look up this reference. The function &lt;tt&gt;unrefState&lt;/tt&gt; then looks like this:
&lt;/p&gt;
&lt;pre&gt;unrefState :: State Ref -&amp;gt; State Id&lt;br /&gt;unrefState (State us cs) =&lt;br /&gt;	let unrefState = State (map (unrefUser unrefState) us)&lt;br /&gt;	                       (map (unrefComp unrefState) cs)&lt;br /&gt;	in unrefState&lt;br /&gt;  where unrefUser :: State Id -&amp;gt; User Ref -&amp;gt; User Id&lt;br /&gt;        unrefUser s (User i refs) = User i (map (unrefComputerRef s) refs)&lt;br /&gt;&lt;br /&gt;	unrefComp :: State Id -&amp;gt; Computer Ref -&amp;gt; Computer Id&lt;br /&gt;	unrefComp s (Computer i ref) = Computer i (unrefUserRef s ref)&lt;/pre&gt;
&lt;p&gt;
Note how we “tie the knot” in the &lt;tt&gt;let&lt;/tt&gt; expression. This is the trick that ensures constant memory consumption, because every reference points back to the same place in memory.
&lt;/p&gt;

&lt;h3&gt;Satisfied already?&lt;/h3&gt;
&lt;p&gt;
So what do we have? We have no duplication of data types, we can write general functions, and we can resolve the explicit referencing. We can also easily write functions like &lt;tt&gt;unrefUser :: State Ref -&amp;gt; User Ref -&amp;gt; User Id&lt;/tt&gt;, which transform just a part of the state.&lt;/p&gt;

&lt;p&gt;
But writing &lt;tt&gt;unrefState&lt;/tt&gt; is very tedious when the State becomes more complex. Each of the other &lt;tt&gt;unrefSomething&lt;/tt&gt; functions are very similar, but need to be written anyways. This is unsatisfactory. What we want, is a generic function, something like
&lt;/p&gt;
&lt;pre&gt;gunref :: State Ref -&amp;gt; a Ref -&amp;gt; a Id&lt;/pre&gt;
&lt;p&gt;
which, given a state with explicit references, replaces all explicit references in the first argument (which could be &lt;tt&gt;State Ref&lt;/tt&gt; or &lt;tt&gt;User Ref&lt;/tt&gt; or anything like that) with implicit ones. This function can not exist, because we would not know anything about &lt;tt&gt;a&lt;/tt&gt; and &lt;tt&gt;b&lt;/tt&gt;. But maybe we can do this:
&lt;/p&gt;
&lt;pre&gt;gunref :: (Data (a Id), Data (a Ref)) =&amp;gt;  State Ref -&amp;gt; a Ref -&amp;gt; a Id&lt;/pre&gt;

&lt;h3&gt;Typeable and Data&lt;/h3&gt;
&lt;p&gt;
Before being able to do so, we need to derive &lt;tt&gt;&lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Data-Data.html#t%3AData&quot;&gt;Data&lt;/a&gt;&lt;/tt&gt; for our types. We can start with
&lt;/p&gt;
&lt;pre&gt;deriving instance Data (User Id)&lt;br /&gt;deriving instance Data (User Ref)&lt;br /&gt;deriving instance Data (Computer Id)&lt;br /&gt;deriving instance Data (Computer Ref)&lt;br /&gt;deriving instance Data (State Id)&lt;br /&gt;deriving instance Data (State Ref&lt;/pre&gt;
&lt;p&gt;
but that will complain about missing &lt;tt&gt;&lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Data-Typeable.html#t%3ATypeable&quot;&gt;Typeable&lt;/a&gt;&lt;/tt&gt; instances. Unfortunately, ghc’s deriver for &lt;tt&gt;Typeable&lt;/tt&gt; (even the stand-alone-one), does not handle our peculiar kind, so we need to do it by hand. With some help from quicksilver on #haskell, I got it to work:
&lt;/p&gt;
&lt;pre&gt;instance Typeable1 ref =&amp;gt; Typeable (User ref) where&lt;br /&gt;	typeOf _ = mkTyConApp (mkTyCon &amp;quot;User&amp;quot;)     [typeOf1 (undefined :: ref ())]&lt;br /&gt;instance Typeable1 ref =&amp;gt; Typeable (Computer ref) where &lt;br /&gt;	typeOf _ = mkTyConApp (mkTyCon &amp;quot;Computer&amp;quot;) [typeOf1 (undefined :: ref ())]&lt;br /&gt;instance Typeable1 ref =&amp;gt; Typeable (State ref) where &lt;br /&gt;	typeOf _ = mkTyConApp (mkTyCon &amp;quot;State&amp;quot;)    [typeOf1 (undefined :: ref ())]&lt;/pre&gt;

&lt;h3&gt;&lt;tt&gt;everywhere&lt;/tt&gt; is not enough&lt;/h3&gt;
&lt;p&gt;Turning to the documentation of &lt;tt&gt;&lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/syb/Data-Generics.html&quot;&gt;Data.Generics&lt;/a&gt;&lt;/tt&gt;, I notice with some disappointment that there is no function that is able to &lt;em&gt;change&lt;/em&gt; a type – they all seem to replace a value by another value of the same type. But the functions &lt;tt&gt;&lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Data-Data.html#v%3Agfoldl&quot;&gt;gfoldl&lt;/a&gt;&lt;/tt&gt; and &lt;tt&gt;&lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Data-Data.html#v%3Agunfold&quot;&gt;gunfold&lt;/a&gt;&lt;/tt&gt; sounded like they could be used for this.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Warning:&lt;/strong&gt; What comes now is a very non-haskellish hack that subverts the type system, just to get the job done. Please read it with a healthy portion of distrust. If you know of a cleaner way of doing that, please tell me!&lt;/p&gt;

&lt;h3&gt;Wrapped Data&lt;/h3&gt;
&lt;p&gt;I want to do some heavy type hackery, so I need to disable haskell’s type system. There is &lt;tt&gt;&lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Data-Dynamic.html&quot;&gt;Data.Dynamic&lt;/a&gt;&lt;/tt&gt;, but not even that is enough, as we need to carry a type’s &lt;tt&gt;Data&lt;/tt&gt; instance around as well. So let’s wrap that up:
&lt;/p&gt;
&lt;pre&gt;data AData where AData :: Data a =&amp;gt; a -&amp;gt; AData&lt;br /&gt;instance Show AData where show (AData a) = &amp;quot;&amp;lt;&amp;quot; ++ show (typeOf a) ++ &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;&lt;br /&gt;fromADataE :: forall b. Data b =&amp;gt; AData -&amp;gt; b&lt;br /&gt;fromADataE (AData d) = case cast d of&lt;br /&gt;	Just v -&amp;gt; v&lt;br /&gt;	Nothing -&amp;gt; error $ &amp;quot;Type error, trying to convert &amp;quot; ++&lt;br /&gt;			   show (typeOf d) ++ &amp;quot; to  &amp;quot; ++&lt;br /&gt;			   show (typeOf (undefined :: b)) ++ &amp;quot;.&amp;quot;&lt;/pre&gt;
&lt;p&gt;There is also a function that converts an &lt;tt&gt;AData&lt;/tt&gt; back to a normal type, if possible. If it’s not possible, then there is a bug in our code, so we give an informative error message.
&lt;/p&gt;

&lt;h3&gt;AData transformers&lt;/h3&gt;
&lt;p&gt;
Similar to &lt;tt&gt;&lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/syb/Data-Generics-Schemes.html#v%3Aeverywhere&quot;&gt;everywhere&lt;/a&gt;&lt;/tt&gt;, we want to have transformers that combinable. They need to have the change to convert an arbitrary value, but also signal that they could not convert something (and this something has to be recursed into). I came up with this:
&lt;/p&gt;
&lt;pre&gt;type ADataT = AData -&amp;gt; Maybe AData&lt;br /&gt;&lt;br /&gt;extADT :: forall a b. (Data a, Data b) =&amp;gt; ADataT -&amp;gt; (a -&amp;gt; b) -&amp;gt; ADataT&lt;br /&gt;extADT at t a@(AData v) = case cast v of &lt;br /&gt;		Just x -&amp;gt;  Just (AData (t x))&lt;br /&gt;		Nothing -&amp;gt; at a&lt;br /&gt;&lt;br /&gt;doNothing :: ADataT&lt;br /&gt;doNothing = const Nothing&lt;/pre&gt;
&lt;p&gt;
&lt;tt&gt;ADataT&lt;/tt&gt; is the type for such a transformer. &lt;tt&gt;doNothing&lt;/tt&gt; will not transform anything, and &lt;tt&gt;extADT&lt;/tt&gt; can be used to add any function to the list of tried transformers, in the spirit of &lt;tt&gt;&lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/syb/Data-Generics-Aliases.html#v%3AextT&quot;&gt;extT&lt;/a&gt;&lt;/tt&gt;.
&lt;/p&gt;

&lt;h3&gt;The ugly part&lt;/h3&gt;
&lt;p&gt;
To apply such a transformer, I want to use this function, which I’ll describe in the code comments:
&lt;/p&gt;
&lt;pre&gt;everywhereADT :: forall a b. (Data a, Data b) =&amp;gt; ADataT -&amp;gt; a -&amp;gt; b&lt;br /&gt;&lt;br /&gt;-- first check if we can transform this value already&lt;br /&gt;everywhereADT f v = case f (AData v) of&lt;br /&gt;        -- if so, coerce it to the users’ requested type, which hopefully goes well&lt;br /&gt;	Just r -&amp;gt;  fromADataE r &lt;br /&gt;	-- if not, we need to recurse into the data structure&lt;br /&gt;	Nothing -&amp;gt; recursed&lt;br /&gt;&lt;br /&gt;	-- for that, we first need to figure out the arguments to the &lt;br /&gt;        -- constructor. We store them in the untyped list&lt;br /&gt;  where args :: [AData]&lt;br /&gt;        (Const args) = gfoldl k z v&lt;br /&gt;	-- gfoldl lets us have a look at each argument. We wrap it in AData&lt;br /&gt;        -- and append it to the list&lt;br /&gt;	k (Const args) arg = Const (AData arg : args)&lt;br /&gt;	z start = Const []&lt;br /&gt;&lt;br /&gt;	-- We need the data constructor of the input data type. If the user did not want&lt;br /&gt;        -- it to be transformed, it will be the same&lt;br /&gt;	c = toConstr v&lt;br /&gt;&lt;br /&gt;	-- To give better error messages, we make sure that the outmost type constructor&lt;br /&gt;        -- of the requested type actually has the data constructor we were given. Otherwise&lt;br /&gt;        -- gunfold will complain in a non-helpful way&lt;br /&gt;	input_type = dataTypeRep (constrType c)&lt;br /&gt;	output_type = dataTypeRep (dataTypeOf (undefined :: b))&lt;br /&gt;&lt;br /&gt;	recursed = if input_type /= output_type&lt;br /&gt;                   then error $ &amp;quot;Can not convert &amp;lt;&amp;quot; ++ show input_type ++ &amp;quot;&amp;gt;&amp;quot;++&lt;br /&gt;                                            &amp;quot; to &amp;lt;&amp;quot; ++ show output_type ++ &amp;quot;&amp;gt;.&amp;quot;&lt;br /&gt;	-- the types match, so we assemble the output type, using gunfold&lt;br /&gt;                   else snd (gunfold k' z' c)&lt;br /&gt;	k' :: forall b r . Data b =&amp;gt; ([AData], b -&amp;gt; r) -&amp;gt; ([AData],r)&lt;br /&gt;&lt;br /&gt;	-- we start by reversing the input list&lt;br /&gt;	z' start = (reverse args,start)&lt;br /&gt;	&lt;br /&gt;	-- then we call us recursively on the argument and feed the result&lt;br /&gt;        -- to the output constructor&lt;br /&gt;	k' ((AData a) : args, append) = (args, append (everywhereADT f a))&lt;br /&gt;&lt;br /&gt;-- Used for folding (we don’t need to retain the original constructor)&lt;br /&gt;data Const a b = Const a &lt;/pre&gt;
&lt;p&gt;
What a beast! But surprisingly, it works. Here are some examples. Note that I always have to specify the requested output type:
&lt;/p&gt;
&lt;pre&gt;bool2Int :: Bool -&amp;gt; Int&lt;br /&gt;bool2Int False = 0&lt;br /&gt;bool2Int True = 1&lt;br /&gt;&lt;br /&gt;*Main&amp;gt; everywhereADT (doNothing `extADT` bool2Int) True :: Int&lt;br /&gt;1&lt;br /&gt;*Main&amp;gt; everywhereADT (doNothing `extADT` bool2Int) True :: ()&lt;br /&gt;*** Exception: Type error, trying to convert Int to  ().&lt;br /&gt;*Main&amp;gt; everywhereADT (doNothing `extADT` bool2Int) (True,False) :: (Int,Int)&lt;br /&gt;(1,0)&lt;br /&gt;*Main&amp;gt; everywhereADT (doNothing `extADT` bool2Int) ([True,False],True,()) :: ([Int],Int,())&lt;br /&gt;([1,0],1,())&lt;br /&gt;*Main&amp;gt; everywhereADT (doNothing `extADT` bool2Int) ([True,False],True,()) :: [()]&lt;br /&gt;*** Exception: Can not convert  to .&lt;br /&gt;*Main&amp;gt; everywhereADT (doNothing `extADT` bool2Int) [True] :: [Bool]&lt;br /&gt;[*** Exception: Type error, trying to convert Int to  Bool.&lt;/pre&gt;
&lt;p&gt;
I hope this code does not inflict too much pain on any Haskell-loving reader. I know I violated the language, but I didn’t know how to do it better (at least not without using Template Haskell). I also know that this is not very good performance wide: Every single value in the input will be deconstructed, type-compared several times and re-assembled. If that is an issue, then this function should only be used for prototyping.
&lt;/p&gt;

&lt;h3&gt;Almost done&lt;/h3&gt;
&lt;p&gt;
To apply this to our state, we only need to glue it to our lookup functions from above:
&lt;/p&gt;
&lt;pre&gt;gunref :: (Data (a Id), Data (a Ref)) =&amp;gt;  State Ref -&amp;gt; a Ref -&amp;gt; a Id&lt;br /&gt;gunref s w = let unrefState = gunref' unrefState s&lt;br /&gt;             in gunref' unrefState w&lt;br /&gt;&lt;br /&gt;gunref' :: (Data (a Id), Data (a Ref)) =&amp;gt;  State Id -&amp;gt; a Ref -&amp;gt; a Id&lt;br /&gt;gunref' unrefState = everywhereADT unref'&lt;br /&gt;  where unref' = doNothing `extADT`&lt;br /&gt;		 unrefUserRef unrefState `extADT`&lt;br /&gt;		 unrefComputerRef unrefState&lt;/pre&gt;
&lt;p&gt;Now we have a generic unreferencer. I set the type a bit more specific than necessary, to make it safe to use (under the assumption that the list of lookup functions is complete and will not leave any &lt;tt&gt;Ref&lt;/tt&gt; in the output).
&lt;/p&gt;
&lt;pre&gt;*Main&amp;gt; testState &lt;br /&gt;State [User {userId = 0, uses = [Ref 1]}] [Computer {computerId = 1, owner = Ref 0}]&lt;br /&gt;*Main&amp;gt; gunref testState testState &lt;br /&gt;State [User {userId = 0, uses = [Id (Computer {computerId = 1, owner = Id (User {userId = 0,&lt;br /&gt;uses = [Id (Computer {computerId = 1, owner = Id (User {userId = 0, uses = ..&lt;/pre&gt;
&lt;p&gt;
Oh, and by the way, if you want to test this code, you’ll need at least:
&lt;/p&gt;
&lt;pre&gt;{-# LANGUAGE DeriveDataTypeable, FlexibleInstances, GADTs,&lt;br /&gt;             FlexibleContexts, StandaloneDeriving, ScopedTypeVariables #-}&lt;/pre&gt;</content:encoded>
	<dc:date>2008-12-31T15:21:28+00:00</dc:date>
	<dc:creator>nomeata</dc:creator>
</item>
<item rdf:about="http://odzangba.wordpress.com/?p=182">
	<title>Odzangba Dake: Meet The New Member Of The Family…</title>
	<link>http://odzangba.wordpress.com/2008/12/30/meet-the-new-member-of-the-family/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;The past month has been hectic for me. I&amp;#8217;ve been all over the country &amp;#8211; Tamale, Kumasi, Ho, Winneba&amp;#8230;. During one of my brief stopovers in Accra, I managed to build  a new pc. It&amp;#8217;s not excatly what I wanted but it&amp;#8217;s performing admirably. Rather than buy one of those grossly over-priced brand name machines, I bought all the components separately an assembled them myself&amp;#8230; a decision I feel pretty smug about. &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;  Here&amp;#8217; s the thing, a 2.53ghz Core 2 Duo, 2gb RAM, ASRock Wolfdale 1333-D667 motherboard, 40gb 7200 rpm internal hard disk + dvd writer costs something in the region of GHC 900 but I pulled it off with GHC 400 by avoiding a branded machine.  &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;  It&amp;#8217;s not that hard to assemble your own pc&amp;#8230; all you need is a screw driver. When I get a bit more time over the weekend, I&amp;#8217;ll write more about it.&lt;/p&gt;
  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/odzangba.wordpress.com/182/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/odzangba.wordpress.com/182/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/odzangba.wordpress.com/182/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/odzangba.wordpress.com/182/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/odzangba.wordpress.com/182/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/odzangba.wordpress.com/182/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/odzangba.wordpress.com/182/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/odzangba.wordpress.com/182/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/odzangba.wordpress.com/182/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/odzangba.wordpress.com/182/&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=182&amp;subd=odzangba&amp;ref=&amp;feed=1&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2008-12-30T20:45:55+00:00</dc:date>
</item>
<item rdf:about="https://www.joachim-breitner.de/blog/archives/314-guid.html">
	<title>Joachim Breitner: MuMer relaunch – preview online</title>
	<link>https://www.joachim-breitner.de/blog/archives/314-MuMer-relaunch-preview-online.html</link>
	<content:encoded>&lt;p&gt;A &lt;a href=&quot;https://www.joachim-breitner.de/blog/archives/71-Mundus-Mercaturae.html&quot;&gt;few&lt;/a&gt; &lt;a href=&quot;https://www.joachim-breitner.de/blog/archives/104-Mumer-nimmt-langsam-Gestalt-an.html&quot;&gt;years&lt;/a&gt; &lt;a href=&quot;https://www.joachim-breitner.de/blog/archives/261-Internet-Trading-Game-Idea.html&quot;&gt;ago&lt;/a&gt;, I had some ideas about a real-world trading game. In short, a combination of the game play of “&lt;a href=&quot;http://en.wikipedia.org/wiki/Settlers_of_Catan&quot;&gt;Settlers of Catan&lt;/a&gt;”, the cute pseudo-medieval world of “&lt;a href=&quot;http://en.wikipedia.org/wiki/The_Settlers&quot;&gt;The Settlers&lt;/a&gt;” (the computer game), which you can play in your every day live along, without having to sit in front of the computer for a long time. I then started some code, lost motivation and let it sit there for a while.&lt;/p&gt;&lt;p&gt;Recently, I re-developed interest in the idea and started from scratch, using &lt;a href=&quot;http://haskell.org/&quot;&gt;Haskell&lt;/a&gt; and &lt;a href=&quot;http://happs.org/&quot;&gt;HAppS&lt;/a&gt;. To avoid losing interest again, I’m now putting the code online and set up the server. I invite everyone to play around with it, maybe have a look at the code, send me patches or comments. As you can see, the web user interface is plain ugly HTML and could need some love. Some CSS is definitely needed, some AJAX would be nice.  Also, the resource tree is very small at the moment – there are a lot of things to work on, even if you don’t want to touch Haskell!&lt;/p&gt;&lt;p&gt;You can register at &lt;a href=&quot;http://mumer.net/&quot;&gt;http://mumer.net/&lt;/a&gt;. You will be either given a forest (a source for wood) or a source of stone. You can reap your source, and trade on the “Free Market”, which is where you can always trade online, at bad prices. The idea is that you find real trade partners, to get better prices.&lt;/p&gt;&lt;p&gt;For now, trading without physical contact is possible. You can create so-called issue ids, which represent stips of paper. You can then load resources on them, and give the paper (i.e. the number) to other players, who can then redeem them. Eventually, it is planned that these pieces of paper are provided centrally and (sufficiently) unforgeable, so that it is clear who owns a resource.&lt;/p&gt;&lt;p&gt;You can also bid on certain stuff, such as a sawmil, which allows you to turn wood into boards. It will regularily be re-leased to the highest bidder.&lt;/p&gt;&lt;p&gt;You can get the code (in a darcs repository) from &lt;a href=&quot;http://darcs.nomeata.de/mumer2/&quot;&gt;http://darcs.nomeata.de/mumer2&lt;/a&gt; and also &lt;a href=&quot;http://darcs.nomeata.de/cgi-bin/darcsweb.cgi?r=mumer2;a=summary&quot;&gt;browse the code&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;If you happen to be at the &lt;a href=&quot;http://events.ccc.de/congress/2008/&quot;&gt;CCC&lt;/a&gt; right now and would like to talk about it, please do so!&lt;/p&gt;</content:encoded>
	<dc:date>2008-12-28T12:33:42+00:00</dc:date>
	<dc:creator>nomeata</dc:creator>
</item>
<item rdf:about="https://www.joachim-breitner.de/blog/archives/313-guid.html">
	<title>Joachim Breitner: 19 months of laptop battery data</title>
	<link>https://www.joachim-breitner.de/blog/archives/313-19-months-of-laptop-battery-data.html</link>
	<content:encoded>&lt;p&gt;In June 2007, I bought a new 9-cell-battery for my ThinkPad notebook. Since then, I recorded, via a cron job, every five minutes these bits of information:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;time&lt;/li&gt;&lt;li&gt;design capacity&lt;/li&gt;&lt;li&gt;reported last full capacity&lt;/li&gt;&lt;li&gt;state (charging, discharging, charged)&lt;/li&gt;&lt;li&gt;(dis)charge rate&lt;/li&gt;&lt;li&gt;remaining capacity.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;I had planned to make some detailed analysis of this, but I haven’t gotten around to do more than &lt;a href=&quot;http://www.joachim-breitner.de/various/akkulog/akkugraph-otto.png&quot;&gt;this graph&lt;/a&gt; (warning, large), of which the following is a cut out. Since I now got a new laptop (with a new battery), I’ll share my records.&lt;/p&gt;
&lt;div align=&quot;center&quot;&gt;
&lt;a href=&quot;http://www.joachim-breitner.de/various/akkulog/akkugraph-otto.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;598&quot; width=&quot;800&quot; src=&quot;http://www.joachim-breitner.de/various/akkulog/akkugraph-otto-partial.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;I find it interesting that the last-full-state sometimes jumps up, closer to the design state. This could be re-calibration. Or the battery, after a while, re-scales iits output to appear less degraded. This might be checked by comparing the speed of discharge and charge at various points in time.&lt;/p&gt;&lt;p&gt;If you want to do some analysis of your own, you can download the &lt;a href=&quot;http://www.joachim-breitner.de/various/akkulog/akkulogfile.otto.anonym&quot;&gt;raw data&lt;/a&gt; (44354 data points). It has been anonymised by starting the time counter at zero, and shortening any gap of more than four hours to four hours. If you want to do some analysis in Haskell, you can take some code from &lt;a href=&quot;http://www.joachim-breitner.de/various/akkulog/akkuanonym.hs&quot;&gt;my anonymizer script&lt;/a&gt; to parse the data. If you happen to find something interesting, appropriate crediting is appreciated.&lt;/p&gt;</content:encoded>
	<dc:date>2008-12-24T13:52:00+00:00</dc:date>
	<dc:creator>nomeata</dc:creator>
</item>
<item rdf:about="https://www.joachim-breitner.de/blog/archives/312-guid.html">
	<title>Joachim Breitner: Good LaTeX Font Overview</title>
	<link>https://www.joachim-breitner.de/blog/archives/312-Good-LaTeX-Font-Overview.html</link>
	<content:encoded>&lt;p&gt;I just discovered the nice &lt;a href=&quot;http://ctan.tug.org/tex-archive/info/Free_Math_Font_Survey/survey.html&quot;&gt;Survey of Free Math Fonts for TeX and LaTeX&lt;/a&gt; (&lt;a href=&quot;http://ctan.tug.org/tex-archive/info/Free_Math_Font_Survey/survey.pdf&quot;&gt;PDF-Version&lt;/a&gt;) by Stephen G. Hartke – a good overview of the common font packages, with examples, useful for those who have seen enough Computer Modern by now.&lt;/p&gt;&lt;p&gt;What I’m still missing is a good style guide: When should I use Palatino, when is Utopia a good choice? What are good reasons to use a sans-serif font for the text, and when is that not a good idea? They all look nice to me, but I doubt that the professional typographist leave it all to personal preference.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2008-12-05T09:45:00+00:00</dc:date>
	<dc:creator>nomeata</dc:creator>
</item>
<item rdf:about="https://www.joachim-breitner.de/blog/archives/311-guid.html">
	<title>Joachim Breitner: Linux Journal on the Neo FreeRunner</title>
	<link>https://www.joachim-breitner.de/blog/archives/311-Linux-Journal-on-the-Neo-FreeRunner.html</link>
	<content:encoded>&lt;p&gt;A fellow lodger of my student dormatory just popped in and gave me the &lt;a href=&quot;http://www.linuxjournal.com/issue/176&quot;&gt;December issue of Linux Journal&lt;/a&gt; as a gift from his trip to the US  (thanks for that!). When I skimmed the front page, I immediatelly noticed the line “Reviewed: OpenMoko’s Neo FreeRunner.” The four page article by Cory Wright contains some general notes on the FreeRunner, a list of things he doesn’t like and – to my surprise – installation instructions for &lt;a href=&quot;http://wiki.debian.org/DebianOnFreeRunner&quot;&gt;Debian on the FreeRunner&lt;/a&gt;! It’s nice to see one’s work used in such public places. I especially liked the line “I must say, the Debian installers sure have improved a lot since the Potato days.” (Of course, the installer for the FreeRunner is mostly a dumb script that can not be compared to the great official &lt;a href=&quot;http://www.debian.org/devel/debian-installer/&quot;&gt;debian-installer&lt;/a&gt; that you can use on a PC.)&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2008-11-25T18:57:00+00:00</dc:date>
	<dc:creator>nomeata</dc:creator>
</item>
<item rdf:about="http://odzangba.wordpress.com/2008/11/25/reserve-a-zain-mobile-phone-number/">
	<title>Odzangba Dake: Reserve A Zain Number</title>
	<link>http://odzangba.wordpress.com/2008/11/25/reserve-a-zain-mobile-phone-number/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;Apparently &lt;a href=&quot;http://app.rancardmobility.com/final.zain/index.jsp&quot; target=&quot;_blank&quot;&gt;Zain&lt;/a&gt; is allowing potential customers in Ghana to reserve their cell phone numbers even before they become fully functional. It&amp;#8217;s not bad&amp;#8230; I reserved my current Kasapa number &amp;#8211; minus the 028 of course. Here&amp;#8217;s the link: http://app.rancardmobility.com/final.zain/&lt;/p&gt;
  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/odzangba.wordpress.com/166/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/odzangba.wordpress.com/166/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/odzangba.wordpress.com/166/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/odzangba.wordpress.com/166/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/odzangba.wordpress.com/166/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/odzangba.wordpress.com/166/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/odzangba.wordpress.com/166/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/odzangba.wordpress.com/166/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/odzangba.wordpress.com/166/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/odzangba.wordpress.com/166/&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=166&amp;subd=odzangba&amp;ref=&amp;feed=1&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2008-11-25T11:42:40+00:00</dc:date>
</item>
<item rdf:about="http://odzangba.wordpress.com/?p=161">
	<title>Odzangba Dake: Leash Runaway Applications</title>
	<link>http://odzangba.wordpress.com/2008/11/19/leash-runaway-applications/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;Often, firefox just hangs on me (when I&amp;#8217;m forced to use it) and sometimes brings the entire machine to a grinding halt. I&amp;#8217;d rather not start a rant about how bloated firefox is&amp;#8230; it&amp;#8217;s not worth the breathing exercises I&amp;#8217;d have to do. Usually, when an application becomes unreasonable, it&amp;#8217;s quite easy to kill it and get on with other things. My favorite method is to add the &lt;strong&gt;Force Quit&lt;/strong&gt; widget to the gnome panel. This way, all I have to do is click on the widget, click on the misbehaving  window and problem solved.&lt;/p&gt;

&lt;a href=&quot;http://odzangba.wordpress.com/2008/11/19/leash-runaway-applications/add-to/&quot; title=&quot;add-to&quot;&gt;&lt;img width=&quot;139&quot; height=&quot;148&quot; src=&quot;http://odzangba.files.wordpress.com/2008/11/add-to.png?w=139&amp;h=148&quot; class=&quot;attachment-thumbnail&quot; alt=&quot;&quot; title=&quot;add-to&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://odzangba.wordpress.com/2008/11/19/leash-runaway-applications/widgets/&quot; title=&quot;widgets&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;135&quot; src=&quot;http://odzangba.files.wordpress.com/2008/11/widgets.png?w=150&amp;h=135&quot; class=&quot;attachment-thumbnail&quot; alt=&quot;&quot; title=&quot;widgets&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://odzangba.wordpress.com/2008/11/19/leash-runaway-applications/tip/&quot; title=&quot;tip&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;28&quot; src=&quot;http://odzangba.files.wordpress.com/2008/11/tip.png?w=150&amp;h=28&quot; class=&quot;attachment-thumbnail&quot; alt=&quot;&quot; title=&quot;tip&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://odzangba.wordpress.com/2008/11/19/leash-runaway-applications/kill/&quot; title=&quot;kill&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;80&quot; src=&quot;http://odzangba.files.wordpress.com/2008/11/kill.png?w=150&amp;h=80&quot; class=&quot;attachment-thumbnail&quot; alt=&quot;&quot; title=&quot;kill&quot; /&gt;&lt;/a&gt;

&lt;p&gt;There&amp;#8217;s also the &lt;strong&gt;xkill&lt;/strong&gt; command. Hold down &lt;strong&gt;Alt + F2&lt;/strong&gt; to bring up the Run dialog, or bring up a terminal, type in &lt;strong&gt;xkill&lt;/strong&gt; ( the mouse pointer should turn into a skull and crossbones) and click on the offending window&amp;#8230; it should die immediately.&lt;/p&gt;
&lt;p&gt;There&amp;#8217;s always the trusty command line option. On a terminal, type&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;killall application_name &lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;To kill firefox this way, you&amp;#8217;d type&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;killall firefox &lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;The killall command is &amp;#8216;merciful&amp;#8217; as it allows the offending application to end gracefully. However, it doesn&amp;#8217;t always work &amp;#8230; some apps are really stubborn. To kill firefox without giving it a chance to clean up, try&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;kill -9 `pidof firefox` &lt;/strong&gt;(those are back ticks, people&amp;#8230; located on the ~ key)&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Of course you could go the long hard way: use the &lt;strong&gt;ps aux&lt;/strong&gt; command to find the pid of the app (let&amp;#8217;s say 6849) and do &lt;strong&gt;kill -9 6849&lt;/strong&gt; but I prefer the easier method. It&amp;#8217;s also possible to bring down the entire X server and hope the hung program will die too (in my experience, firefox is immune to this sometimes&amp;#8230; it becomes an &amp;#8220;uninterruptible&amp;#8221; service.) To restart the X Server:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;press &lt;strong&gt;Ctrl+Alt+Backspace&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I haven&amp;#8217;t used them before but the &lt;strong&gt;magic sysrq keys&lt;/strong&gt; are quite interesting. Apparently, if you get really desperate, you can talk directly to the kernel. This would be quite useful if your box totally stopped responding and none of the earlier methods worked. They have to be compiled into the kernel first though. To check if they are, do:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;cat /boot/config-`uname -r` | grep CONFIG_MAGIC_SYSRQ &lt;/strong&gt;(again, back ticks)&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;You should get something like this:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;CONFIG_MAGIC_SYSRQ=y&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Also, do:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;cat /proc/sys/kernel/sysrq&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;to make sure they are not disabled. You should get&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;To safely reboot your box without data loss during hangs, this is the method suggested on Wikipedia&amp;#8217;s &lt;span class=&quot;extiw&quot;&gt;&lt;a title=&quot;Wikipedia's Magic SysRq key page&quot; href=&quot;http://en.wikipedia.org/wiki/Magic_SysRq_key&quot; target=&quot;_blank&quot;&gt;Magic SysRq&lt;/a&gt; key&lt;/span&gt; page.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Press Ctrl+Alt+F2 to switch to a terminal window. Sometimes, this is not possible.&lt;/li&gt;
&lt;li&gt;Press Alt+SysRq+&lt;strong&gt;R&lt;/strong&gt; to get the keyboard&lt;/li&gt;
&lt;li&gt;If pressing Ctrl+Alt+F2 before failed, try it again now.&lt;/li&gt;
&lt;li&gt;Press Alt+SysRq+&lt;strong&gt;S&lt;/strong&gt; to sync your disks.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wait&lt;/strong&gt; for OK or Done message.&lt;/li&gt;
&lt;li&gt;Press Alt+SysRq+&lt;strong&gt;E&lt;/strong&gt; to term all processes.&lt;/li&gt;
&lt;li&gt;Press Alt+SysRq+&lt;strong&gt;I&lt;/strong&gt; to kill all processes.&lt;/li&gt;
&lt;li&gt;Press Alt+SysRq+&lt;strong&gt;U&lt;/strong&gt; to umount all disk drives.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wait&lt;/strong&gt; for OK or Done message.&lt;/li&gt;
&lt;li&gt;Press Alt+SysRq+&lt;strong&gt;B&lt;/strong&gt; to reboot.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Finally, if all else fails turn off the power to the computer and hope you don&amp;#8217;t do any permanent damage to the system. &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;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/odzangba.wordpress.com/161/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/odzangba.wordpress.com/161/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/odzangba.wordpress.com/161/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/odzangba.wordpress.com/161/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/odzangba.wordpress.com/161/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/odzangba.wordpress.com/161/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/odzangba.wordpress.com/161/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/odzangba.wordpress.com/161/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/odzangba.wordpress.com/161/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/odzangba.wordpress.com/161/&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=161&amp;subd=odzangba&amp;ref=&amp;feed=1&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2008-11-19T11:47:12+00:00</dc:date>
</item>
<item rdf:about="https://www.joachim-breitner.de/blog/archives/310-guid.html">
	<title>Joachim Breitner: My very first font</title>
	<link>https://www.joachim-breitner.de/blog/archives/310-My-very-first-font.html</link>
	<content:encoded>&lt;p&gt;For a project of mine I needed the pictograms for man and woman (as also known from toilette doors), in two different sizes, once filled and once as an outline. I coud not find these as a LaTeX symbol nor as a defined unicode character, so I searched the internet. I found some material as &lt;a href=&quot;http://www.aiga.org/content.cfm/symbol-signs&quot;&gt;vector graphics&lt;/a&gt; (EPS), which I was using first, imported into my LaTeX document as images. But it felt wrong to use images for something that’s a symbol in the text.&lt;/p&gt;&lt;p&gt;So I installed &lt;a href=&quot;http://fontforge.sourceforge.net/&quot;&gt;fontforge&lt;/a&gt;, the apparently usual tool for that, imported the EPS files and with surprisingly reasonable effort created a TrueType font with these nice eight glyphs:&lt;/p&gt;&lt;div align=&quot;center&quot;&gt;
&lt;img width=&quot;766&quot; height=&quot;237&quot; src=&quot;http://www.joachim-breitner.de/various/ManPictograms.png&quot; /&gt;&lt;/div&gt;
&lt;p&gt;Quite a while ago I wrote here &lt;a href=&quot;https://www.joachim-breitner.de/blog/archives/260-TTF-Glyph-in-pdflatex-output.html&quot;&gt;how to use single glyphs from a TrueType font in LaTeX&lt;/a&gt;. Based on that I created the neccessary files to use these in LaTex with these commands, in the order of the picture: &lt;tt&gt;\Mansym&lt;/tt&gt;, &lt;tt&gt;\mansym&lt;/tt&gt;, &lt;tt&gt;\Womansym&lt;/tt&gt;, &lt;tt&gt;\womansym&lt;/tt&gt;, &lt;tt&gt;\Boysym&lt;/tt&gt;, &lt;tt&gt;\boysym&lt;/tt&gt;, &lt;tt&gt;\Girlsym&lt;/tt&gt;, &lt;tt&gt;\girlsym&lt;/tt&gt;. &lt;/p&gt;&lt;p&gt;Here are the files: &lt;a href=&quot;http://svn.nomeata.de/wsvn/isaak-buch/fragebogen/ManPictograms.ttf?op=file&quot;&gt;ManPictograms.ttf&lt;/a&gt; &lt;a href=&quot;http://svn.nomeata.de/wsvn/isaak-buch/fragebogen/T1ManPictograms.fd?op=file&quot;&gt;T1ManPictograms.fd&lt;/a&gt; &lt;a href=&quot;http://svn.nomeata.de/wsvn/isaak-buch/fragebogen/ManPictograms.tfm?op=file&quot;&gt;ManPictograms.tfm&lt;/a&gt; &lt;a href=&quot;http://svn.nomeata.de/wsvn/isaak-buch/fragebogen/ManPictograms.enc?op=file&quot;&gt;ManPictograms.enc&lt;/a&gt; &lt;a href=&quot;http://svn.nomeata.de/wsvn/isaak-buch/fragebogen/ManPictograms.sty?op=file&quot;&gt;ManPictograms.sty&lt;/a&gt;. If anyone feels like turning them into a more proper LaTeX font package, they are welcome.&lt;/p&gt;</content:encoded>
	<dc:date>2008-11-13T00:25:44+00:00</dc:date>
	<dc:creator>nomeata</dc:creator>
</item>
<item rdf:about="http://ghanageek.wordpress.com/?p=199">
	<title>Kwasi Kwakwa: HE WON!!!!!</title>
	<link>http://ghanageek.wordpress.com/2008/11/05/he-won/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://ghanageek.files.wordpress.com/2008/11/_45175107_barack_family.jpg&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-200&quot; title=&quot;The next first family of the USA&quot; src=&quot;http://ghanageek.files.wordpress.com/2008/11/_45175107_barack_family.jpg?w=450&amp;h=289&quot; alt=&quot;The next first family of the USA&quot; width=&quot;450&quot; height=&quot;289&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Yes, I stayed up all night to watch the results come in. I&amp;#8217;m still not entirely sure it happened though.&lt;/p&gt;
&lt;p&gt;We are officially living in interesting times people. Lets see how it goes&lt;/p&gt;
  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/ghanageek.wordpress.com/199/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/ghanageek.wordpress.com/199/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/ghanageek.wordpress.com/199/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/ghanageek.wordpress.com/199/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/ghanageek.wordpress.com/199/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/ghanageek.wordpress.com/199/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/ghanageek.wordpress.com/199/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/ghanageek.wordpress.com/199/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/ghanageek.wordpress.com/199/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/ghanageek.wordpress.com/199/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=ghanageek.wordpress.com&amp;blog=474047&amp;post=199&amp;subd=ghanageek&amp;ref=&amp;feed=1&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2008-11-05T12:19:56+00:00</dc:date>
</item>
<item rdf:about="http://ghanageek.wordpress.com/?p=196">
	<title>Kwasi Kwakwa: *Hat tip*</title>
	<link>http://ghanageek.wordpress.com/2008/11/03/hat-tip/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;div id=&quot;attachment_195&quot; class=&quot;wp-caption alignnone&quot;&gt;&lt;a href=&quot;http://ghanageek.files.wordpress.com/2008/11/hamiltonempcs2210_468x597.jpg&quot;&gt;&lt;img class=&quot;size-full wp-image-195&quot; title=&quot;Hamilton&quot; src=&quot;http://ghanageek.files.wordpress.com/2008/11/hamiltonempcs2210_468x597.jpg?w=450&amp;h=574&quot; alt=&quot;H &amp; H&quot; width=&quot;450&quot; height=&quot;574&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;H &amp;amp; H&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Great race. And hopefully a good omen.&lt;/p&gt;
  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/ghanageek.wordpress.com/196/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/ghanageek.wordpress.com/196/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/ghanageek.wordpress.com/196/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/ghanageek.wordpress.com/196/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/ghanageek.wordpress.com/196/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/ghanageek.wordpress.com/196/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/ghanageek.wordpress.com/196/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/ghanageek.wordpress.com/196/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/ghanageek.wordpress.com/196/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/ghanageek.wordpress.com/196/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=ghanageek.wordpress.com&amp;blog=474047&amp;post=196&amp;subd=ghanageek&amp;ref=&amp;feed=1&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2008-11-03T10:55:29+00:00</dc:date>
</item>
<item rdf:about="http://odzangba.wordpress.com/?p=156">
	<title>Odzangba Dake: Ghana Telecom… arrgh*&amp;%$#!</title>
	<link>http://odzangba.wordpress.com/2008/10/30/ghana-telecom-arrgh/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;It&amp;#8217;s been almost a month since I applied for a broadband connection at home and  I still have to go to an internet cafe to blog! This totally sucks. I guess I was naive to expect better service from Ghana Telecom.&lt;/p&gt;
  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/odzangba.wordpress.com/156/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/odzangba.wordpress.com/156/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/odzangba.wordpress.com/156/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/odzangba.wordpress.com/156/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/odzangba.wordpress.com/156/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/odzangba.wordpress.com/156/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/odzangba.wordpress.com/156/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/odzangba.wordpress.com/156/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/odzangba.wordpress.com/156/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/odzangba.wordpress.com/156/&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=156&amp;subd=odzangba&amp;ref=&amp;feed=1&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2008-10-30T18:21:35+00:00</dc:date>
</item>
<item rdf:about="http://odzangba.wordpress.com/2008/10/25/using-ubuntu-without-x/">
	<title>Odzangba Dake: Using Ubuntu Without X</title>
	<link>http://odzangba.wordpress.com/2008/10/25/using-ubuntu-without-x/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;Hello, I haven&amp;#8217;t blogged in a long while&amp;#8230; my apologies for that. Lot&amp;#8217;s of interesting things have happened since my last blog post. For one, I dumped X and now use the console excusively. Yeah, I know it sounds a little extreme in this age of high speed multiple-core processors, video cards and fancy desktop compositing but let me remind you that I still use a very old Compaq Deskpro and yes, most cell phones come with faster processors than my 350Mhz Pentium II processor. I think it&amp;#8217;s enough to say, I don&amp;#8217;t exactly have much spare processing power. But I digress, using a console only system is not as terrifying as it sounds. There are some pretty easy to use and mature text based applications out there. I use my computer for everyday stuff &amp;#8211; music, television, radio, movies, reading, etc. I mess with applications like apache and samba only because I&amp;#8217;m curious&amp;#8230; nothing more, as in I don&amp;#8217;t depend on them for a living. So from any stand point, it really is an overkill to run X in the first place. I basically need the following apps: an audio player, a video player, radio and television apps, a web browser for offline web pages and a pdf reader. I chose MPD and ncmpc for my music management because here&amp;#8217;s what I need &amp;#8211; the application manages the music, I select what songs I want and click play. Some people like more control but I&amp;#8217;m basically a lazy person and I cannot be bothered by the petty details of managing individual audio files and folders. &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;Every morning, I wake up, stretch and yawn, and thank God for Mplayer. &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;  Seriously people, I do not know what I would do without this app. I use it for watching television and playing my video files. It can even double up as my fall back audio player and radio capture system but that&amp;#8217;d mean too much work for my lazy fingers. I use fmtools to listen to radio because it&amp;#8217;s simple&amp;#8230; all I have to do is type &amp;#8216;fm 101.3&amp;#8242; and I&amp;#8217;m listening to the BBC. In line with my industrious personality, I set up aliases so for example, I only have to type &amp;#8216;bbc&amp;#8217; to listen to the BBC&amp;#8230; sweet. &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;  Elinks works pretty well when I need to read pages I&amp;#8217;d already downloaded from the web or some HTML based documentation like the mplayer documentation. &lt;/p&gt;
&lt;p&gt;The only problem is the PDF reader. After searching all over the web, the one thing I can tell you is if there is a console based pdf reader for linux, no one is telling. Luckily, pdftohtml can convert pdfs to HTML so I can read them with elinks. The output can be crappy especially when images and complex frames are involved but I have very few of those ebooks. I like my console system, it is snappy, and it does what I tell it to do without much drama; besides it totally annoys the crap out of my siblings. &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;  I&amp;#8217;ll go into more details later this week. I have to run.&lt;/p&gt;
  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/odzangba.wordpress.com/155/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/odzangba.wordpress.com/155/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/odzangba.wordpress.com/155/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/odzangba.wordpress.com/155/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/odzangba.wordpress.com/155/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/odzangba.wordpress.com/155/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/odzangba.wordpress.com/155/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/odzangba.wordpress.com/155/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/odzangba.wordpress.com/155/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/odzangba.wordpress.com/155/&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=155&amp;subd=odzangba&amp;ref=&amp;feed=1&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2008-10-25T13:40:17+00:00</dc:date>
</item>
<item rdf:about="http://ghanageek.wordpress.com/?p=188">
	<title>Kwasi Kwakwa: Recent additions to the bookshelf</title>
	<link>http://ghanageek.wordpress.com/2008/10/15/recent-additions-to-the-bookshelf/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;One of the advantages of this past year has been a commute from the south of London to the center of the city daily that meant I had between 1 1/2 and 2 hours sitting or standing while waiting to get where I was going. Sometimes that went to reading academic papers for my masters, but a lot of the time it went to recreational reading. Add that to the fact that I got a library card as soon as I could(making this the sixth city on the third continent where I have paid library fines) and I was able to get through quite a few books. Well, considering that I was in school at the time.&lt;/p&gt;
&lt;p&gt;The highlight list includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Charles Stross: &lt;a href=&quot;http://www.amazon.com/Atrocity-Archives-Charles-Stross/dp/0441013651/ref=pd_bbs_3?ie=UTF8&amp;s=books&amp;qid=1224105694&amp;sr=8-3&quot; target=&quot;_blank&quot;&gt;The Laundry&lt;/a&gt; &lt;a href=&quot;http://www.amazon.com/Jennifer-Morgue-Charles-Stross/dp/1930846452/ref=pd_bbs_sr_1?ie=UTF8&amp;s=books&amp;qid=1224105766&amp;sr=8-1&quot; target=&quot;_blank&quot;&gt;novels&lt;/a&gt; and &lt;a href=&quot;http://www.amazon.com/Halting-State/dp/B000W9180A/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1224105918&amp;sr=1-1&quot;&gt;The Halting State&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Neil Gaiman&amp;#8217;s &lt;a href=&quot;http://www.amazon.com/American-Gods-Authors-Preferred-Text/dp/0755322819/ref=sr_1_2?ie=UTF8&amp;s=books&amp;qid=1224105968&amp;sr=1-2&quot; target=&quot;_blank&quot;&gt;American Gods&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Nicholas Hornsby&amp;#8217;s &lt;a href=&quot;http://www.amazon.com/High-Fidelity-Novel-Nick-Hornby/dp/1594481784/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1224106011&amp;sr=1-1&quot; target=&quot;_blank&quot;&gt;High Fidelity&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Peter F. Hamilton&amp;#8217;s &lt;a href=&quot;http://www.amazon.com/Reality-Dysfunction-Nights-Dawn/dp/0316021806/ref=sr_1_2?ie=UTF8&amp;s=books&amp;qid=1224106211&amp;sr=1-2&quot; target=&quot;_blank&quot;&gt;Night&amp;#8217;s&lt;/a&gt; &lt;a href=&quot;http://www.amazon.com/Neutronium-Alchemist-Nights-Dawn-Trilogy/dp/0330351435/ref=sr_1_3?ie=UTF8&amp;s=books&amp;qid=1224106283&amp;sr=1-3&quot; target=&quot;_blank&quot;&gt;Dawn&lt;/a&gt; &lt;a href=&quot;http://www.amazon.com/Naked-God-Nights-Dawn-Trilogy/dp/0333725034/ref=sr_1_2?ie=UTF8&amp;s=books&amp;qid=1224106069&amp;sr=1-2&quot; target=&quot;_blank&quot;&gt;Trilogy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Terry Pratchett&amp;#8217;s &lt;a href=&quot;http://www.amazon.com/Making-Money-Terry-Pratchett/dp/0061161659/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1224106325&amp;sr=1-1&quot; target=&quot;_blank&quot;&gt;Making Money&lt;/a&gt; and &lt;a href=&quot;http://www.amazon.com/Going-Postal-Terry-Pratchett/dp/0060502932/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1224106368&amp;sr=1-1&quot; target=&quot;_blank&quot;&gt;Going Postal&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Steven Barnes&amp;#8217; &lt;a href=&quot;http://www.amazon.com/Great-Sky-Woman-Steven-Barnes/dp/0345459024/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1224106534&amp;sr=1-1&quot; target=&quot;_blank&quot;&gt;Great Sky Woman&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Mark Law&amp;#8217;s &lt;a href=&quot;http://www.amazon.co.uk/Pyjama-Game-Journey-into-Judo/dp/1845130901&quot; target=&quot;_blank&quot;&gt;The Pyjama Game: A journey Into Judo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;#8217;s not a fully complete list, but those are most of the books I remember. Well, there&amp;#8217;s also a bunch of classic science fiction books, but I&amp;#8217;ll talk about those later&lt;/p&gt;
  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/ghanageek.wordpress.com/188/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/ghanageek.wordpress.com/188/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/ghanageek.wordpress.com/188/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/ghanageek.wordpress.com/188/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/ghanageek.wordpress.com/188/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/ghanageek.wordpress.com/188/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/ghanageek.wordpress.com/188/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/ghanageek.wordpress.com/188/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/ghanageek.wordpress.com/188/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/ghanageek.wordpress.com/188/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=ghanageek.wordpress.com&amp;blog=474047&amp;post=188&amp;subd=ghanageek&amp;ref=&amp;feed=1&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2008-10-15T21:46:53+00:00</dc:date>
</item>
<item rdf:about="https://www.joachim-breitner.de/blog/archives/308-guid.html">
	<title>Joachim Breitner: Infinite loops in Haskell</title>
	<link>https://www.joachim-breitner.de/blog/archives/308-Infinite-loops-in-Haskell.html</link>
	<content:encoded>&lt;p&gt;Just some small thoughts about cyclic lists in Haskell. Every Haskell beginner knows that you can use infinite lists, as long as you don’t fully evalute them. So, this is perfectly valid&lt;/p&gt;&lt;pre&gt;endless = [0..] -- All natural numbers!
main = print (endless !! 10)&lt;/pre&gt;&lt;p&gt;It will not crash, but print &amp;quot;10&amp;quot; as the list has not been fully used.&lt;/p&gt;&lt;p&gt;What happens if we take a piece of the list further down, let’s say at position 1000000000:&lt;/p&gt;&lt;pre&gt;endles = [0..]
main = print (endless !! (10^9) )&lt;/pre&gt;&lt;p&gt;If you try this at home, better run &amp;quot;&lt;tt&gt;ulimit -S -v 1000000&lt;/tt&gt;&amp;quot; before, because then you’ll get &amp;quot;&lt;tt&gt;test: out of memory (requested 1048576 bytes)&lt;/tt&gt;&amp;quot; instead of a sluggishly swapping machine. What happened? The long list will be evaluated, and fills the memory. &lt;/p&gt;&lt;p&gt;Does this mean that we can not use arbitrary long lists? Let’s try a special case: A list that is infinitely long, but repeating the same values all over again:&lt;/p&gt;&lt;pre&gt;list = &amp;quot;Oh, happy day! Oh, happy day. &amp;quot;&lt;br /&gt;cycle' list = list ++ cycle' list&lt;br /&gt;main = do let rlist = cycle' list&lt;br /&gt;          print ( rlist !! (10^9), rlist !! 0 )&lt;/pre&gt;&lt;p&gt;We repeat the (finite) list endlessly, and then try to pick the 1000000000th element. We also pick the first element again, to make sure the compiler does not cheat by forgetting the first 999999999 elements (It’s actually pretty nice that the compiler will forget these elements, but not what I want to demonstrate here). Running that code, sure enough, fills up the memory.&lt;/p&gt;&lt;p&gt;But maybe I was coding badly. At least I have re-implemented a function that already exists, which is bad practice. Let’s try with Haskell’s own &lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Data-List.html#v:cycle&quot;&gt;cycle&lt;/a&gt;:&lt;/p&gt;&lt;pre&gt;list = &amp;quot;Oh, happy day! Oh, happy day. &amp;quot;&lt;br /&gt;main = do let rlist = cycle list&lt;br /&gt;          print ( rlist !! (10^9), rlist !! 0 )&lt;/pre&gt;&lt;p&gt;Now it takes a while, but surprisingly, the memory gauge does not skyrocket, and in the end I’m told that the 1000000000th character in my infinite character string is 'd'. This leads me to the conclusion that the Haskell library uses black magic. Or does it? Here is the definition of cycle:&lt;/p&gt;&lt;pre&gt;cycle xs = xs' where xs' = xs ++ xs'&lt;/pre&gt;&lt;p&gt;What is the difference to our cycle'? Here, the result is given a name (&lt;tt&gt;xs'&lt;/tt&gt;), which is used again inside the function. So while our cycle' appends the list over and over again, filling up the RAM, their cycle ties a loop and makes the end of the list refer to it’s beginning. And my list lookup will no longer evaluate the list up to infinity, but just run around in, well, cycles until it has counted down from 1000000000. I could even ask for the last element of this list, and it will not use any more RAM than a small, finite list, while endlessly searching for the end of the list.&lt;/p&gt;&lt;p&gt;Despite Haskell being a very high level language, I sometimes wonder how my data will look like on the physical memory. And as you can see, it can make a difference. Some more thoughts on this were written down by &lt;a href=&quot;http://web.comlab.ox.ac.uk/people/Duncan.Coutts/papers/recursive_data_structures_in_haskell.pdf&quot;&gt;Duncan Coutts&lt;/a&gt;.&lt;/p&gt;</content:encoded>
	<dc:date>2008-10-15T21:04:59+00:00</dc:date>
	<dc:creator>nomeata</dc:creator>
</item>
<item rdf:about="http://ghanageek.wordpress.com/?p=186">
	<title>Kwasi Kwakwa: And its done (pretty much)</title>
	<link>http://ghanageek.wordpress.com/2008/10/10/and-its-done-pretty-much/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;So I am (semi) officially done with my Masters. Research is done, my thesis has been turned in and I have defended it. While my results still have to be ratified by the college(pretty much a formality) I can say that I have a Masters by Research in Bio, Nano and X-Ray Photonics from the Physics department of King&amp;#8217;s College London. Bit of a mouthful, I know.&lt;/p&gt;
&lt;p&gt;And so with that done it is time to move on to the next phase of my life. As soon as I know what that is, so will anyone actually still reading this blog(I&amp;#8217;d assume there is maybe one of you at this point)&lt;/p&gt;
&lt;p&gt;Until later people&lt;/p&gt;
  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/ghanageek.wordpress.com/186/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/ghanageek.wordpress.com/186/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/ghanageek.wordpress.com/186/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/ghanageek.wordpress.com/186/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/ghanageek.wordpress.com/186/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/ghanageek.wordpress.com/186/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/ghanageek.wordpress.com/186/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/ghanageek.wordpress.com/186/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/ghanageek.wordpress.com/186/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/ghanageek.wordpress.com/186/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=ghanageek.wordpress.com&amp;blog=474047&amp;post=186&amp;subd=ghanageek&amp;ref=&amp;feed=1&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2008-10-10T16:29:28+00:00</dc:date>
</item>
<item rdf:about="https://www.joachim-breitner.de/blog/archives/305-guid.html">
	<title>Joachim Breitner: Haskell work in Dresden</title>
	<link>https://www.joachim-breitner.de/blog/archives/305-Haskell-work-in-Dresden.html</link>
	<content:encoded>&lt;p&gt;Since Saturday, I’m in Dresden, to work for &lt;a href=&quot;http://wwwtcs.inf.tu-dresden.de/~voigt/&quot;&gt;Janis Voigtländer&lt;/a&gt; at the &lt;a href=&quot;http://tu-dresden.de/&quot;&gt;TU Dresden&lt;/a&gt; on some of his projects. I’m mostly working with his code from “&lt;a href=&quot;http://wwwtcs.inf.tu-dresden.de/~voigt/popl09-2.pdf&quot;&gt;Bidirectionalization for Free&lt;/a&gt;”: &lt;a href=&quot;http://hackage.haskell.org/cgi-bin/hackage-scripts/package/QuickCheck&quot;&gt;QuickCheck&lt;/a&gt;-Properties, statstics, a web interface. I’ll do this for just two weeks, and then return to Karlsruhe.&lt;/p&gt;&lt;p&gt;So if someone wants to meet me, maybe for some Keysigning (since DebConf8, I’m on &lt;a href=&quot;http://pgp.cs.uu.nl/stats/4743206C.html&quot;&gt;Rank 31&lt;/a&gt;, so it’s worth it :-)), just drop me a note.&lt;/p&gt;</content:encoded>
	<dc:date>2008-10-08T21:14:45+00:00</dc:date>
	<dc:creator>nomeata</dc:creator>
</item>
<item rdf:about="http://kdex.wordpress.com/?p=14">
	<title>Kofi Boakye: H E L P ??Need LinuxCD</title>
	<link>http://kdex.wordpress.com/2008/10/03/h-e-l-p-need-linuxcd/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;hello world ,&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m really pissed  off as i write this post.I never knew internet at my school, UCC in Cape Coast is so crappy.&lt;/p&gt;
&lt;p&gt;Sheesh&lt;/p&gt;
&lt;p&gt;I tried downloading the PCLinux 2008  Gnome LiveCD and later on the LinuxMint 5 distro.&lt;/p&gt;
&lt;p&gt;Over 3 hours and nothing??What the &amp;#8230;I mean come on !!I just wasted my money and time.&lt;/p&gt;
&lt;p&gt;ANYWAYZ I will like to know if anyone can send me The PCLinuxOS 2008 Gnome Version&lt;/p&gt;
&lt;p&gt;or the Linux Mint 5 or 6 edition.&lt;/p&gt;
&lt;p&gt;I really need it.Ubuntu 8.04 doesnt agree with my hardware at all.&lt;/p&gt;
&lt;p&gt;So world if anyone can help me whether in Ghana or not &amp;#8230;&lt;/p&gt;
&lt;p&gt;My email is donkdex@gmail.com&lt;/p&gt;
&lt;p&gt;Thanks&lt;/p&gt;
  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/kdex.wordpress.com/14/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/kdex.wordpress.com/14/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/kdex.wordpress.com/14/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/kdex.wordpress.com/14/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/kdex.wordpress.com/14/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/kdex.wordpress.com/14/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/kdex.wordpress.com/14/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/kdex.wordpress.com/14/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/kdex.wordpress.com/14/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/kdex.wordpress.com/14/&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=14&amp;subd=kdex&amp;ref=&amp;feed=1&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2008-10-03T06:05:03+00:00</dc:date>
</item>
<item rdf:about="http://odzangba.wordpress.com/?p=152">
	<title>Odzangba Dake: People, Software Freedom Day</title>
	<link>http://odzangba.wordpress.com/2008/09/10/people-software-freedom-day/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;Software Freedom Day is just around the corner and the atmosphere here in LinuxAccra is upbeat. We got some substantial donations this year so we&amp;#8217;re going all out with banners, flyers, radio ads&amp;#8230; For my Ghanaian readers, LinuxAccra will hold a SFD2008 event at the Advanced Information Technology Institute on Saturday, 20th Spetember. This link shows how to find AITI:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.aiti-kace.com.gh/?q=node/38&quot;&gt;http://www.aiti-kace.com.gh/?q=node/38&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ciao,&lt;br /&gt;
Odzangba&lt;/p&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/categories/odzangba.wordpress.com/152/&quot; /&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/tags/odzangba.wordpress.com/152/&quot; /&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/odzangba.wordpress.com/152/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/odzangba.wordpress.com/152/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/odzangba.wordpress.com/152/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/odzangba.wordpress.com/152/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/odzangba.wordpress.com/152/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/odzangba.wordpress.com/152/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/odzangba.wordpress.com/152/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/odzangba.wordpress.com/152/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/odzangba.wordpress.com/152/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/odzangba.wordpress.com/152/&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=152&amp;subd=odzangba&amp;ref=&amp;feed=1&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2008-09-10T18:09:21+00:00</dc:date>
</item>
<item rdf:about="http://egoleo.wordpress.com/?p=33">
	<title>George Gyau: How do I disable the ping response?</title>
	<link>http://egoleo.wordpress.com/2008/09/08/how-do-i-disable-the-ping-response/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;Usually a ping is used to check if a machine is up and to check the network status.&lt;/p&gt;
&lt;p&gt;It is a small network packet sent to the machine. If the machine is up, an answer will be sent. The time needed to get the answer is called ping time or round-trip time.&lt;/p&gt;
&lt;p&gt;The ping response from an IP indicates the machine is up.&lt;/p&gt;
&lt;p&gt;Unfortunately this can be used to quickly scan an IP-range for reachable hosts.&lt;/p&gt;
&lt;p&gt;This can be used to find potential hackable machines. If your machine doesn&amp;#8217;t answer to pings, your chance to be seen is reduced. (That doesn&amp;#8217;t mean your machine is more secure, the machine is just not that easy to be seen from the internet. Nothing more.)&lt;/p&gt;
&lt;p&gt;Add the following line to your init script for the network (the name depends on the distribution you use):&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;echo 1 &amp;gt;/proc/sys/net/ipv4/icmp_echo_ignore_all&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This disables ping responses.&lt;/p&gt;
&lt;p&gt;To reenable, use the following command:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;echo 0 &amp;gt;/proc/sys/net/ipv4/icmp_echo_ignore_all&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;To make this permanent set the following into /etc/sysctl.conf (if you have such a file)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;net.ipv4.conf.icmp_echo_ignore_all = 1&lt;/strong&gt;&lt;/p&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/categories/egoleo.wordpress.com/33/&quot; /&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/tags/egoleo.wordpress.com/33/&quot; /&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/egoleo.wordpress.com/33/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/egoleo.wordpress.com/33/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/egoleo.wordpress.com/33/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/egoleo.wordpress.com/33/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/egoleo.wordpress.com/33/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/egoleo.wordpress.com/33/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/egoleo.wordpress.com/33/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/egoleo.wordpress.com/33/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/egoleo.wordpress.com/33/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/egoleo.wordpress.com/33/&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=33&amp;subd=egoleo&amp;ref=&amp;feed=1&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2008-09-08T15:37:00+00:00</dc:date>
</item>
<item rdf:about="http://egoleo.wordpress.com/?p=28">
	<title>George Gyau: Custom teaser length by View using node.tpl.php</title>
	<link>http://egoleo.wordpress.com/2008/09/08/custom-teaser-length-by-view-using-nodetplphp/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;I have been working on this project, www.newsafrican.com which is a news site which focuses on everything african news. This project is been built on the &lt;a title=&quot;Drupal&quot; href=&quot;http://www.drupal.org&quot; target=&quot;_blank&quot;&gt;Drupal CMS&lt;/a&gt; which is very flexible arguably.&lt;/p&gt;
&lt;p&gt;I got into a situation where i have to customise the teaser length by &lt;a title=&quot;drupal views module&quot; href=&quot;http://drupal.org/project/views&quot; target=&quot;_blank&quot;&gt;View&lt;/a&gt; which happens to be one of the Drupal modules using node.tpl.php.&lt;/p&gt;
&lt;p&gt;One way to vary teaser lengths is to check the current View with a modified node.tpl.php modify the output based on this&lt;/p&gt;
&lt;p&gt;In this example a teaser of length 75 or 150 will be shown for the Views &amp;#8220;frontpage&amp;#8221; and &amp;#8220;ghana_page&amp;#8221; respectively.&lt;/p&gt;
&lt;p&gt;I worked on this for Drupal 5 with the help of the good guys in the drupal IRC rooms, my solution is below. But &lt;a title=&quot;Customising teaser length by view&quot; href=&quot;http://drupal.org/node/304062&quot; target=&quot;_blank&quot;&gt;this is a solution for Drupal 6&lt;/a&gt; by friends on the drupal-support channel of IRC.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;div class=&quot;node&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;print (&lt;/span&gt;&lt;span&gt;$sticky&lt;/span&gt;&lt;span&gt;) ? &lt;/span&gt;&lt;span&gt;&quot; sticky&quot; &lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&quot;&amp;gt;&lt;br /&gt;
&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;if (&lt;/span&gt;&lt;span&gt;$page &lt;/span&gt;&lt;span&gt;== &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;): &lt;/span&gt;&lt;span&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;else: &lt;/span&gt;&lt;span&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;print &lt;/span&gt;&lt;span&gt;$picture ?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&amp;lt;em class=&quot;info&quot;&amp;gt;&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;print &lt;/span&gt;&lt;span&gt;$submitted ?&amp;gt;&lt;/span&gt;&lt;/span&gt;&amp;lt;/em&amp;gt;&lt;br /&gt;
&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;endif; &lt;/span&gt;&lt;span&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;lt;?php&lt;br /&gt;
&lt;/span&gt;&lt;span&gt;global &lt;/span&gt;&lt;span&gt;$current_view&lt;/span&gt;&lt;span&gt;;&lt;br /&gt;
if(&lt;/span&gt;&lt;span&gt;$teaser&lt;/span&gt;&lt;span&gt;) {&lt;br /&gt;
if(&lt;/span&gt;&lt;span&gt;$current_view&lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;name &lt;/span&gt;&lt;span&gt;== &lt;/span&gt;&lt;span&gt;&amp;#8216;frontpage&amp;#8217;&lt;/span&gt;&lt;span&gt;)&lt;br /&gt;
{&lt;/span&gt;&lt;span&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;foreach ((array)&lt;/span&gt;&lt;span&gt;$node&lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;field_news_image &lt;/span&gt;&lt;span&gt;as &lt;/span&gt;&lt;span&gt;$item&lt;/span&gt;&lt;span&gt;) { &lt;/span&gt;&lt;span&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&amp;lt;div class=&amp;#8221;field-item&amp;#8221;&amp;gt;&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;print &lt;/span&gt;&lt;span&gt;$item&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;'view'&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;} &lt;/span&gt;&lt;span&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;&amp;lt;a href=&amp;#8221;&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;print &lt;/span&gt;&lt;span&gt;$node_url ?&amp;gt;&lt;/span&gt;&lt;/span&gt;&amp;#8221; title=&amp;#8221;&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;print &lt;/span&gt;&lt;span&gt;$title ?&amp;gt;&lt;/span&gt;&lt;/span&gt;&amp;#8220;&amp;gt;&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;print &lt;/span&gt;&lt;span&gt;$title ?&amp;gt;&lt;/span&gt;&lt;/span&gt;&amp;lt;/a&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;print &lt;/span&gt;&lt;span&gt;$node&lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;'body'&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;'#value'&lt;/span&gt;&lt;span&gt;];&lt;br /&gt;
}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;if(&lt;span&gt;$current_view&lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;name &lt;/span&gt;&lt;span&gt;== &lt;/span&gt;&lt;span&gt;&amp;#8216;ghana_page&amp;#8217;&lt;/span&gt;&lt;span&gt;)&lt;br /&gt;
{&lt;/span&gt;&lt;span&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;foreach ((array)&lt;/span&gt;&lt;span&gt;$node&lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;field_news_image &lt;/span&gt;&lt;span&gt;as &lt;/span&gt;&lt;span&gt;$item&lt;/span&gt;&lt;span&gt;) { &lt;/span&gt;&lt;span&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&amp;lt;div class=&amp;#8221;field-item&amp;#8221;&amp;gt;&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;print &lt;/span&gt;&lt;span&gt;$item&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;'view'&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;} &lt;/span&gt;&lt;span&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;&amp;lt;a href=&amp;#8221;&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;print &lt;/span&gt;&lt;span&gt;$node_url ?&amp;gt;&lt;/span&gt;&lt;/span&gt;&amp;#8221; title=&amp;#8221;&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;print &lt;/span&gt;&lt;span&gt;$title ?&amp;gt;&lt;/span&gt;&lt;/span&gt;&amp;#8220;&amp;gt;&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;print &lt;/span&gt;&lt;span&gt;$title ?&amp;gt;&lt;/span&gt;&lt;/span&gt;&amp;lt;/a&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;print &lt;/span&gt;&lt;span&gt;$node&lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;'body'&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;'#value'&lt;/span&gt;&lt;span&gt;];&lt;br /&gt;
}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;if(&lt;span&gt;$current_view&lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;name &lt;/span&gt;&lt;span&gt;== &lt;/span&gt;&lt;span&gt;&amp;#8216;africa_page&amp;#8217;&lt;/span&gt;&lt;span&gt;)&lt;br /&gt;
{&lt;/span&gt;&lt;span&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;foreach ((array)&lt;/span&gt;&lt;span&gt;$node&lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;field_news_image &lt;/span&gt;&lt;span&gt;as &lt;/span&gt;&lt;span&gt;$item&lt;/span&gt;&lt;span&gt;) { &lt;/span&gt;&lt;span&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&amp;lt;div class=&amp;#8221;field-item&amp;#8221;&amp;gt;&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;print &lt;/span&gt;&lt;span&gt;$item&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;'view'&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;} &lt;/span&gt;&lt;span&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;&amp;lt;a href=&amp;#8221;&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;print &lt;/span&gt;&lt;span&gt;$node_url ?&amp;gt;&lt;/span&gt;&lt;/span&gt;&amp;#8221; title=&amp;#8221;&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;print &lt;/span&gt;&lt;span&gt;$title ?&amp;gt;&lt;/span&gt;&lt;/span&gt;&amp;#8220;&amp;gt;&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;print &lt;/span&gt;&lt;span&gt;$title ?&amp;gt;&lt;/span&gt;&lt;/span&gt;&amp;lt;/a&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;print &lt;/span&gt;&lt;span&gt;$node&lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;'body'&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;'#value'&lt;/span&gt;&lt;span&gt;];&lt;br /&gt;
}&lt;br /&gt;
if(&lt;/span&gt;&lt;span&gt;$current_view&lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;name &lt;/span&gt;&lt;span&gt;== &lt;/span&gt;&lt;span&gt;&amp;#8216;business_page&amp;#8217;&lt;/span&gt;&lt;span&gt;)&lt;br /&gt;
{&lt;/span&gt;&lt;span&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;foreach ((array)&lt;/span&gt;&lt;span&gt;$node&lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;field_news_image &lt;/span&gt;&lt;span&gt;as &lt;/span&gt;&lt;span&gt;$item&lt;/span&gt;&lt;span&gt;) { &lt;/span&gt;&lt;span&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&amp;lt;div class=&amp;#8221;field-item&amp;#8221;&amp;gt;&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;print &lt;/span&gt;&lt;span&gt;$item&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;'view'&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;} &lt;/span&gt;&lt;span&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;&amp;lt;a href=&amp;#8221;&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;print &lt;/span&gt;&lt;span&gt;$node_url ?&amp;gt;&lt;/span&gt;&lt;/span&gt;&amp;#8221; title=&amp;#8221;&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;print &lt;/span&gt;&lt;span&gt;$title ?&amp;gt;&lt;/span&gt;&lt;/span&gt;&amp;#8220;&amp;gt;&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;print &lt;/span&gt;&lt;span&gt;$title ?&amp;gt;&lt;/span&gt;&lt;/span&gt;&amp;lt;/a&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;print &lt;/span&gt;&lt;span&gt;$node&lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;'body'&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;'#value'&lt;/span&gt;&lt;span&gt;];&lt;br /&gt;
}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;if(&lt;span&gt;$current_view&lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;name &lt;/span&gt;&lt;span&gt;== &lt;/span&gt;&lt;span&gt;&amp;#8216;gh1&amp;#8242; &lt;/span&gt;&lt;span&gt;|| &lt;/span&gt;&lt;span&gt;$current_view&lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;name &lt;/span&gt;&lt;span&gt;== &lt;/span&gt;&lt;span&gt;&amp;#8216;gh2&amp;#8242;&lt;/span&gt;&lt;span&gt;)&lt;br /&gt;
{&lt;/span&gt;&lt;span&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;foreach ((array)&lt;/span&gt;&lt;span&gt;$node&lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;field_news_image &lt;/span&gt;&lt;span&gt;as &lt;/span&gt;&lt;span&gt;$item&lt;/span&gt;&lt;span&gt;) { &lt;/span&gt;&lt;span&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&amp;lt;div class=&amp;#8221;field-item&amp;#8221;&amp;gt;&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;print &lt;/span&gt;&lt;span&gt;$item&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;'view'&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;} &lt;/span&gt;&lt;span&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;&amp;lt;a href=&amp;#8221;&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;print &lt;/span&gt;&lt;span&gt;$node_url ?&amp;gt;&lt;/span&gt;&lt;/span&gt;&amp;#8221; title=&amp;#8221;&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;print &lt;/span&gt;&lt;span&gt;$title ?&amp;gt;&lt;/span&gt;&lt;/span&gt;&amp;#8220;&amp;gt;&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;print &lt;/span&gt;&lt;span&gt;$title ?&amp;gt;&lt;/span&gt;&lt;/span&gt;&amp;lt;/a&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;print &lt;/span&gt;&lt;span&gt;substr&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$node&lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;'body'&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;'#value'&lt;/span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;90&lt;/span&gt;&lt;span&gt;). &lt;/span&gt;&lt;span&gt;&amp;#8216;&amp;amp;nbsp;&amp;#8217;&lt;/span&gt;&lt;span&gt;;&lt;br /&gt;
&lt;/span&gt;&lt;span&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&amp;lt;a href=&amp;#8221;&lt;span&gt;&lt;span&gt;&amp;lt;?php &lt;/span&gt;&lt;span&gt;print &lt;/span&gt;&lt;span&gt;$node_url ?&amp;gt;&lt;/span&gt;&lt;/span&gt;&amp;#8221; title=&amp;#8221;read more&amp;#8221;&amp;gt;read more&amp;lt;/a&amp;gt;&lt;span&gt;&lt;span&gt;&amp;lt;?php&lt;br /&gt;
&lt;/span&gt;&lt;span&gt;}&lt;br /&gt;
} else {&lt;br /&gt;
print &lt;/span&gt;&lt;span&gt;$content&lt;/span&gt;&lt;span&gt;;&lt;br /&gt;
}&lt;br /&gt;
&lt;/span&gt;&lt;span&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/categories/egoleo.wordpress.com/28/&quot; /&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/tags/egoleo.wordpress.com/28/&quot; /&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/egoleo.wordpress.com/28/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/egoleo.wordpress.com/28/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/egoleo.wordpress.com/28/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/egoleo.wordpress.com/28/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/egoleo.wordpress.com/28/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/egoleo.wordpress.com/28/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/egoleo.wordpress.com/28/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/egoleo.wordpress.com/28/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/egoleo.wordpress.com/28/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/egoleo.wordpress.com/28/&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=28&amp;subd=egoleo&amp;ref=&amp;feed=1&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2008-09-08T05:23:04+00:00</dc:date>
</item>
<item rdf:about="https://www.joachim-breitner.de/blog/archives/303-guid.html">
	<title>Joachim Breitner: vm.overcommit_memory = 2, vm.overcommit_ratio = 0</title>
	<link>https://www.joachim-breitner.de/blog/archives/303-vm.overcommit_memory-2,-vm.overcommit_ratio-0.html</link>
	<content:encoded>&lt;p&gt;Do you know this experience: A program, &lt;a href=&quot;http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=497953&quot;&gt;in my case subversion&lt;/a&gt;, has a bug and starts to eat memory. You can not interact with your system any more, only watch the memory and swap run full (if you have a display for that). Then it takes a while, while the kernel kills the (hopefully right) program. Things start to move again, until they are fully recovered from the swap and you can continue your work. Or the kernel does somehow not kill the right program, and you are screwed.&lt;/p&gt;&lt;p&gt;During regular work, though, your swap is hardy ever needed. Only after a while, a few megabytes of never-used RAM is swapped out, to make space for using the RAM as a file cache.&lt;/p&gt;&lt;p&gt;I’d like to see the kernel not give out more memory &lt;i&gt;to processes&lt;/i&gt; than there is physical memory, because that’s plenty for normal work, and if there is more requested, then that’s most likely wrong. But I still want the kernel to use the rest of the memory for caching files, and also move some unused RAM pages to the swap file.&lt;/p&gt;&lt;p&gt;Unfortunately, there does not seem to be a settings that achieves this directly. But if you happen to have the swap about the same size as your RAM, then these settings, when written to &lt;tt&gt;/etc/sysctl.d/vm.conf&lt;/tt&gt;, will do the job:&lt;/p&gt;&lt;pre&gt;vm.overcommit_memory = 2&lt;br /&gt;vm.overcommit_ratio = 0&lt;/pre&gt;&lt;p&gt;The first one is to make sure the kernel does not hand out more memory than you tell it to, and the second is to make sure that it only hands out (swap size + 0 * RAM size) to processes.&lt;/p&gt;&lt;p&gt;Beware that things go wrong if you happen to have no swap any more for some reason, beause then the kernel will hand out zero memory! Therefore, you need to make sure that these settings are applied &lt;i&gt;after&lt;/i&gt; swap was enabled. On a Debian machine, rename &lt;tt&gt;/etc/rcS.d/S30procps&lt;/tt&gt; to &lt;tt&gt;/etc/rcS.d/S37procps&lt;/tt&gt;. This would not be possible if you could also specify the ration of swap memory to be used. Then I could set that to zero and the RAM ratio to 100.&lt;/p&gt;&lt;p&gt;If anyone knows better ways to achieve this, I’m interested to hear them.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Update&lt;/b&gt;: For my qemu based armel package builder, this is not enough it seems. I’m now running it with overcommit_ratio = 50.&lt;/p&gt;</content:encoded>
	<dc:date>2008-09-05T17:06:44+00:00</dc:date>
	<dc:creator>nomeata</dc:creator>
</item>
<item rdf:about="http://egoleo.wordpress.com/?p=26">
	<title>George Gyau: S Leone president declares assets</title>
	<link>http://egoleo.wordpress.com/2008/09/02/s-leone-president-declares-assets/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;President Ernest Bai Koroma has become the first head of state in Sierra Leone to declare his assets to the country&amp;#8217;s Anti-Corruption Commission.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As i read this news item, i was wondering when all other African leaders will do follow this. Expecially in Ghana were there is been much talk about such a thing. We always here leaders saying i already had my money or wealth before i came to power.&lt;/p&gt;
&lt;p&gt;Koroma, i hope this will not be a nine day wonder, but to go beyond that let things work in S-Leone.&lt;/p&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/categories/egoleo.wordpress.com/26/&quot; /&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/tags/egoleo.wordpress.com/26/&quot; /&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/egoleo.wordpress.com/26/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/egoleo.wordpress.com/26/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/egoleo.wordpress.com/26/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/egoleo.wordpress.com/26/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/egoleo.wordpress.com/26/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/egoleo.wordpress.com/26/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/egoleo.wordpress.com/26/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/egoleo.wordpress.com/26/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/egoleo.wordpress.com/26/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/egoleo.wordpress.com/26/&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=26&amp;subd=egoleo&amp;ref=&amp;feed=1&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2008-09-02T05:11:28+00:00</dc:date>
</item>
<item rdf:about="http://egoleo.wordpress.com/?p=24">
	<title>George Gyau: Google launches internet browser</title>
	<link>http://egoleo.wordpress.com/2008/09/02/google-launches-internet-browser/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p class=&quot;first&quot;&gt;&lt;strong&gt;Google is launching an open source web browser to compete with Internet Explorer and Firefox.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The browser is designed to be lightweight and fast, and to cope with the next generation of web applications that rely on graphics and multimedia.&lt;/p&gt;
&lt;p&gt;Called Chrome, it will launch as a beta for Windows machines in 100 countries, with Mac and Linux versions to come.&lt;/p&gt;
&lt;p&gt;&amp;#8220;We realised&amp;#8230; we needed to completely rethink the browser,&amp;#8221; said Google&amp;#8217;s Sundar Pichai in a blog post. &lt;!-- E SF --&gt;&lt;/p&gt;
&lt;p&gt;The new browser will help Google take advantage of developments it is pushing online in rich web applications that are challenging traditional desktop programs.&lt;/p&gt;
&lt;p&gt;Just waiting to try it out. &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;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/categories/egoleo.wordpress.com/24/&quot; /&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/tags/egoleo.wordpress.com/24/&quot; /&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/egoleo.wordpress.com/24/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/egoleo.wordpress.com/24/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/egoleo.wordpress.com/24/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/egoleo.wordpress.com/24/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/egoleo.wordpress.com/24/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/egoleo.wordpress.com/24/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/egoleo.wordpress.com/24/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/egoleo.wordpress.com/24/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/egoleo.wordpress.com/24/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/egoleo.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=egoleo.wordpress.com&amp;blog=480684&amp;post=24&amp;subd=egoleo&amp;ref=&amp;feed=1&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2008-09-02T05:00:29+00:00</dc:date>
</item>
<item rdf:about="https://www.joachim-breitner.de/blog/archives/302-guid.html">
	<title>Joachim Breitner: Debian on the FreeRunner</title>
	<link>https://www.joachim-breitner.de/blog/archives/302-Debian-on-the-FreeRunner.html</link>
	<content:encoded>&lt;p&gt;I’ve been at DebConf for almost two week, but haven’t blogged a lot about it. It’s mostly because we’ve been working on getting Debian to run on the &lt;a href=&quot;http://wiki.openmoko.org/wiki/Freerunner&quot;&gt;OpenMoko FreeRunner&lt;/a&gt;. Today we finally sent out the &lt;a href=&quot;http://lists.linuxtogo.org/pipermail/smartphones-standards/2008-August/000232.html&quot;&gt;official annoucement&lt;/a&gt; for this, because it seems that the &lt;a href=&quot;http://wiki.debian.org/DebianOnFreeRunner&quot;&gt;installer script&lt;/a&gt; and packages seem to work so far.&lt;/p&gt;&lt;p&gt;Great thing about this is the sheer amount of software that’s now available on my phone. I already blogged about &lt;a href=&quot;https://www.joachim-breitner.de/blog/archives/300-Xmonad-on-my-mobile-phone.html&quot;&gt;running Xmonad&lt;/a&gt; on it, and I have also ran my &lt;a href=&quot;http://packages.debian.org/sid/sm&quot;&gt;screen-message&lt;/a&gt; program, on it, &lt;a href=&quot;https://gallery.debconf.org/v/debconf8/dc8-rhonda/dsc00694.jpg.html?g2_imageViewsIndex=1&quot;&gt;as can be seen here&lt;/a&gt;. I only did minimal testing of the phone features, because it would be relatively expensive here in Argentinia with my German SIM card, but it seems to work as well.&lt;/p&gt;</content:encoded>
	<dc:date>2008-08-15T18:01:51+00:00</dc:date>
	<dc:creator>nomeata</dc:creator>
</item>
<item rdf:about="http://ghanageek.wordpress.com/?p=183">
	<title>Kwasi Kwakwa: Not dead, missing or abandoned</title>
	<link>http://ghanageek.wordpress.com/2008/08/14/not-dead-missing-or-abandoned/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;Just working on getting this thesis done as well as I possibly can for my Masters. After its done expect a bunch of rants about the evils of Visual Studio, my love of Python, Numpy, iPython, Matplotlib, Mayavi2 and &lt;img src=&quot;http://s1.wordpress.com/latex.php?latex=%5CLaTeX&amp;bg=fff&amp;fg=1c1c1c&amp;s=0&quot; alt=&quot;\LaTeX&quot; title=&quot;\LaTeX&quot; class=&quot;latex&quot; /&gt;.&lt;/p&gt;
&lt;p&gt;Oh, and musings about my slow but steady infatuation with judo.&lt;/p&gt;
&lt;p&gt;In the meantime Wish me luck, &lt;img src=&quot;http://s2.wordpress.com/latex.php?latex=2+%5Cfrac%7B1%7D%7B2%7D&amp;bg=fff&amp;fg=1c1c1c&amp;s=0&quot; alt=&quot;2 \frac{1}{2}&quot; title=&quot;2 \frac{1}{2}&quot; class=&quot;latex&quot; /&gt; weeks  until I&amp;#8217;m done.&lt;/p&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/categories/ghanageek.wordpress.com/183/&quot; /&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/tags/ghanageek.wordpress.com/183/&quot; /&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/ghanageek.wordpress.com/183/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/ghanageek.wordpress.com/183/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/ghanageek.wordpress.com/183/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/ghanageek.wordpress.com/183/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/ghanageek.wordpress.com/183/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/ghanageek.wordpress.com/183/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/ghanageek.wordpress.com/183/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/ghanageek.wordpress.com/183/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/ghanageek.wordpress.com/183/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/ghanageek.wordpress.com/183/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=ghanageek.wordpress.com&amp;blog=474047&amp;post=183&amp;subd=ghanageek&amp;ref=&amp;feed=1&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2008-08-14T17:46:13+00:00</dc:date>
</item>
<item rdf:about="https://www.joachim-breitner.de/blog/archives/300-guid.html">
	<title>Joachim Breitner: Xmonad on my mobile phone</title>
	<link>https://www.joachim-breitner.de/blog/archives/300-Xmonad-on-my-mobile-phone.html</link>
	<content:encoded>&lt;p&gt;Here at &lt;a href=&quot;http://debconf8.debconf.org/&quot;&gt;DebConf 8&lt;/a&gt; in Argentinia, I’m working on getting Debian to work on the &lt;a href=&quot;http://wiki.openmoko.org/wiki/Freerunner&quot;&gt;OpenMoko Freerunner Smartphone&lt;/a&gt;. We are progressing quite nicely, soon having the same features as the official freesmartphone.org image. See the &lt;a href=&quot;http://wiki.debian.org/pkg-fso&quot;&gt;pkg-fso wiki page&lt;/a&gt; for more on that.&lt;/p&gt;&lt;p&gt; And why do we want to do that? Because we can use everything in the Debian archive on our phones!&lt;/p&gt;&lt;div align=&quot;center&quot;&gt;&lt;img height=&quot;640&quot; width=&quot;480&quot; src=&quot;http://www.joachim-breitner.de/various/xmonad-on-freerunner.png&quot; /&gt;&lt;/div&gt;&lt;p&gt;This is the &lt;a href=&quot;http://xmonad.org/&quot;&gt;xmonad&lt;/a&gt; window manager, programmed in Haskell and usually running on my Desktop, now on my mobile phone! And it’s almost usable. Only problem is that the screen keyboard, metacity-keyboard, gets the focus by xmonad, so I can’t actually type into other windows. This could be fixed by configuring xmonad, but for that, I need to install ghc and I do not have these 280MB left on my SD card...&lt;/p&gt;&lt;p&gt;&lt;b&gt;Update:&lt;/b&gt; I even made it on the front page of the &lt;a href=&quot;http://xmonad.org/&quot;&gt;xmonad home page&lt;/a&gt; with this image:&lt;/p&gt;&lt;div align=&quot;center&quot;&gt;&lt;a href=&quot;http://xmonad.org/images/openmoko-nomeata.jpg&quot;&gt;&lt;img height=&quot;192&quot; border=&quot;0&quot; width=&quot;256&quot; src=&quot;http://xmonad.org/images/openmoko-nomeata-thumb.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2008-08-09T14:46:00+00:00</dc:date>
	<dc:creator>nomeata</dc:creator>
</item>
<item rdf:about="https://www.joachim-breitner.de/blog/archives/299-guid.html">
	<title>Joachim Breitner: pam-dbus: authentication by bubbles</title>
	<link>https://www.joachim-breitner.de/blog/archives/299-pam-dbus-authentication-by-bubbles.html</link>
	<content:encoded>&lt;p&gt;Imagine you have a device, such as a linux phone, that allows login via ssh, e.g. when on a wireless network. You don’t want to set a password with the (limited) phone UI. On the other hand, you don’t want to allow passwordless root logins into your phone. But you do want the ability to login via ssh, after all that’s why you have bought a linux smartphone. This led me to the idea of a pam module and corresponding UI piece that asks the currently logged in user: „Hey, someone tries to login. Is that ok or not?“ This might also be useful for guest accounts on regular laptops. For more on that, see &lt;a href=&quot;https://www.joachim-breitner.de/blog/archives/298-Flow-control-with-pam-configuration.html&quot;&gt;my last blog post&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;So I hacked it together (actually twice, due to some unfortunate use of &lt;tt&gt;rm&lt;/tt&gt; at some point), invested most of the time in learning more about the python garbage collector vs. callbacks, explicitly marked global variables and proper automake stuff. In the end I got, well, just what I wanted. A simple pam module, dubbed &lt;tt&gt;pam-dbus&lt;/tt&gt; that sends a request via the dbus system bus and an autostart program (written in python for now, but I might re-implement it in C) that uses notification-daemon to get confirmation from the user.&lt;/p&gt;&lt;p&gt;You are welcome to try the &lt;a href=&quot;http://people.debian.org/~nomeata/pam-dbus/&quot;&gt;sources and binary debian packages&lt;/a&gt; or have a look at the darcs repository for &lt;a href=&quot;http://darcs.nomeata.de/pam-dbus.upstream/&quot;&gt;pam-dbus&lt;/a&gt; (with&lt;a href=&quot;http://darcs.nomeata.de/pam-dbus/&quot;&gt; debian/ directory&lt;/a&gt;, &lt;a href=&quot;http://darcs.nomeata.de/cgi-bin/darcsweb.cgi&quot;&gt;repository browser&lt;/a&gt;). This will end up in Debian later, I guess.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; Erik Johansson pointed out that if you want to use this with ssh, you need to set &lt;tt&gt;UsePAM yes&lt;/tt&gt; in &lt;tt&gt;/etc/ssh/ssd_config&lt;/tt&gt;.&lt;/p&gt;</content:encoded>
	<dc:date>2008-08-08T05:19:00+00:00</dc:date>
	<dc:creator>nomeata</dc:creator>
</item>
<item rdf:about="https://www.joachim-breitner.de/blog/archives/298-guid.html">
	<title>Joachim Breitner: Flow control with pam configuration</title>
	<link>https://www.joachim-breitner.de/blog/archives/298-Flow-control-with-pam-configuration.html</link>
	<content:encoded>&lt;p&gt;Usually, files in &lt;tt&gt;/etc/pam.d/&lt;/tt&gt; are simple, linear descriptions of how a user should be authenticated, e.g. „Try to authenticate him against ldap, and then against the local data base“. But sometimes, you want something more advanced, for example „If the user is called guest, please authenticate him with &lt;tt&gt;pam_dbus&lt;/tt&gt;, otherwise use regular &lt;tt&gt;pam_unix&lt;/tt&gt;.“ This is possible, and here I’ll note down how to do that.&lt;/p&gt;&lt;p&gt;There are actually two problems to solve: How to detect the username, and then how to do the flow control.&lt;/p&gt;&lt;p&gt;For the first problem, I recently discovered the &lt;a href=&quot;http://linux.die.net/man/8/pam_succeed_if&quot;&gt;&lt;tt&gt;pam_succeed_if&lt;/tt&gt;&lt;/a&gt; module, that allows for relatively advanced logic for checking uids, usernames, hostnames and group membership. For our case, the line would read&lt;/p&gt;&lt;pre&gt;auth ? pam_succeed_if.so quiet user = guest&lt;/pre&gt;&lt;p&gt;Now what next? If we just wanted to allow unrestricted access to guest, we could put „sufficient“ for the questionmark. But we need something like &lt;tt&gt;if..then..else&lt;/tt&gt;. Unfortunately (and I hope this will be fixed eventually), the only flow control available is „skip the next n lines“. So we can skip to &lt;tt&gt;pam_unix&lt;/tt&gt; when this module fails (i.e. the user was someone else but guest), and if we did not skip, we can run the guest-specific module and then skip over &lt;tt&gt;pam_unix&lt;/tt&gt;. So here is the complete snippet:&lt;/p&gt;&lt;pre&gt;auth [default=2 success=ignore] pam_succeed_if.so quiet user = guest&lt;br /&gt;auth [success=ok new_authtok_reqd=done ignore=ignore default=die] pam_dbus.so&lt;br /&gt;auth [default=1] pam_permit.so&lt;br /&gt;auth required pam_unix.so&lt;/pre&gt;&lt;p&gt;You can read more about this advanced configuration in the &lt;a href=&quot;http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/sag-configuration-file.html&quot;&gt;PAM Administration guide&lt;/a&gt;. And here is the corresponding configuration for gdm, where guest can always login:&lt;/p&gt;&lt;pre&gt;auth [default=2 success=ignore] pam_succeed_if.so quiet user = guest&lt;br /&gt;auth required pam_permit.so&lt;br /&gt;auth [default=1] pam_permit.so&lt;br /&gt;auth required pam_unix.so&lt;/pre&gt;&lt;p&gt;So I have a guest account with a locked password and I can allow ssh logins with a mouse click and use it directly with gdm. I probably should put the gdm configuration also in xscreensaver to not lock me out.&lt;/p&gt;</content:encoded>
	<dc:date>2008-08-08T04:20:22+00:00</dc:date>
	<dc:creator>nomeata</dc:creator>
</item>
<item rdf:about="http://egoleo.wordpress.com/?p=22">
	<title>George Gyau: Changing Server Timezone On Ubuntu</title>
	<link>http://egoleo.wordpress.com/2008/07/31/changing-server-timezone-on-ubuntu/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;Is amazing how sometimes such small issues on linux can frustrate a linux user. &lt;/p&gt;
&lt;p&gt;I&amp;#8217;m currently reconfiguring a machine on the other side of the globe, so I want to get it to work to IST instead of EST.&lt;/p&gt;
&lt;p&gt;A quick google brought up a rather complex way of doing it which sounded really complex to me, so I refined my query and found the same solution in the Ubuntu documentation.&lt;/p&gt;
&lt;p&gt;Simply run the following command as root (or using &amp;#8220;su&amp;#8221;):&lt;br /&gt;
&lt;strong&gt;sudo dpkg-reconfigure tzdata&lt;br /&gt;
&lt;/strong&gt;&lt;br /&gt;
And just follow the instructions.&lt;/p&gt;
&lt;p&gt;No silly reboots or other craziness required.&lt;/p&gt;
&lt;p&gt;To keep your server&amp;#8217;s time in sync with the rest of civilisation setup a cronjob to poll an ntp server once every 24 hours:&lt;br /&gt;
 /usr/sbin/ntpdate yourfavouritentpserveraddress&lt;/p&gt;
&lt;p&gt;Problem solved &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;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/categories/egoleo.wordpress.com/22/&quot; /&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/tags/egoleo.wordpress.com/22/&quot; /&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/egoleo.wordpress.com/22/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/egoleo.wordpress.com/22/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/egoleo.wordpress.com/22/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/egoleo.wordpress.com/22/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/egoleo.wordpress.com/22/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/egoleo.wordpress.com/22/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/egoleo.wordpress.com/22/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/egoleo.wordpress.com/22/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/egoleo.wordpress.com/22/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/egoleo.wordpress.com/22/&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=22&amp;subd=egoleo&amp;ref=&amp;feed=1&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2008-07-31T06:51:44+00:00</dc:date>
</item>
<item rdf:about="https://www.joachim-breitner.de/blog/archives/297-guid.html">
	<title>Joachim Breitner: One Week with an OpenMoko Freerunner</title>
	<link>https://www.joachim-breitner.de/blog/archives/297-One-Week-with-an-OpenMoko-Freerunner.html</link>
	<content:encoded>&lt;p&gt;About one week ago, I received my &lt;a href=&quot;http://wiki.openmoko.org/wiki/Freerunner&quot;&gt;OpenMoko Freerunner&lt;/a&gt;. This is an openly developed mobile phone that runs purely on Free Software. So this is what I have to tell about it.&lt;/p&gt;&lt;h3&gt;The hardware&lt;/h3&gt;&lt;p&gt;It was smaller than I thought, and is quite light. My girlfriend says it’s ugly, but I’m fine with the look of it. Besides being a GSM-phone, it comes with some nice gimmics: GPS, accelerometer, WLAN. The touchscreen works fine, although I don’t have anything to compare it with.&lt;/p&gt;&lt;h3&gt;The software&lt;/h3&gt;&lt;p&gt;The system it comes with, even after upgrading, is still very rough. It mostly works for doing phone calls and SMSs, but there are a number of unsolved quirks that prevent me from using the Freerunner as my sole phone for now. The suspend mode is left too often, resulting in a battery life of about eight hours, and there are issues with the audio for the conversation partners, who will hear static and echoes. But, as this is free software, there is hope that this will be fixed eventually.&lt;/p&gt;&lt;h3&gt;Development&lt;/h3&gt;&lt;p&gt;The OpenMoko distribution is based on &lt;a href=&quot;http://www.openembedded.org/&quot;&gt;Openembedded&lt;/a&gt;, which uses &lt;a href=&quot;http://bitbake.berlios.de/&quot;&gt;bitbake&lt;/a&gt; for building software. So if I got it right, and this is not sure, because documentation is rare and spread, there is the git repository at &lt;a href=&quot;http://git.openmoko.org/?p=openmoko.git;a=summary&quot;&gt;git.openmoko.org&lt;/a&gt;, which is a copy of the openembedded git repository. This contains bitbake recipies for all &lt;a href=&quot;http://git.openmoko.org/?p=openmoko.git;a=tree;f=packages;hb=org.openmoko.dev&quot;&gt;the packages&lt;/a&gt;, which includes where they can be downloaded, the package metadata (such as dependencies and version numbers) and sometimes patches. These recipies reference upstream tarballs or subversion URLs. For the “native” OpenMoko applications, the source is in the &lt;a href=&quot;http://svnweb.openmoko.org/trunk/src/target/OM-2007.2/applications/&quot;&gt;OpenMoko subversion repository&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;One of the suggested ways of compiling software for the FreeRunner is by using a “&lt;a href=&quot;http://wiki.openmoko.org/wiki/Toolchain&quot;&gt;toolchain&lt;/a&gt;” tarball, that can easily be extracted somewhere and used to build the software from the subversion repository, or other (hopefully autoconf’ed) software. This builds the binaries, but does not produce “proper” .ipk files, so no version number or dependencies.&lt;/p&gt;&lt;p&gt;The other way is the full openembedded setup, made easy using the &lt;a href=&quot;http://wiki.openmoko.org/wiki/MokoMakefile&quot;&gt;MokoMakefile&lt;/a&gt;. This, automatically, fetches and builds everything needed for the cross compiliation and all available packages, producing the same output as can be found on the openmoko servers. Setting this up requires about 6 gigabytes of storage and takes over a day the first time, but then hacking the phone is relatively painless, as it resolves dependencies and is self-contained.&lt;/p&gt;&lt;h3&gt;The community&lt;/h3&gt;&lt;p&gt;For a free software project, the state of the community is very important. The OpenMoko seems to suffer from a rush of interested people on the mailing lists, so it’s hard to follow real development in a mass of frequently asked questions and nice ideas from people who have neither an OpenMoko phone nor wil do any coding.&lt;/p&gt;&lt;p&gt;On the other hand, it’s not easy for new contributers. I have written some code that make sure the phone can handle numbers such as 0172/123 456 instead of the “official” +49172123456 in the phonebook and the SMS app, something that other users have &lt;a href=&quot;http://lists.openmoko.org/pipermail/community/2008-July/022625.html&quot;&gt;complained&lt;/a&gt; about &lt;a href=&quot;http://lists.openmoko.org/pipermail/community/2008-July/022770.html&quot;&gt;as well&lt;/a&gt;. But no one could tell me where and how I should submit my patches, and the &lt;a href=&quot;http://lists.openmoko.org/pipermail/devel/2008-July/000131.html&quot;&gt;mail to the mailing list&lt;/a&gt; with the patches and the &lt;a href=&quot;https://docs.openmoko.org/trac/ticket/1606&quot;&gt;bug report&lt;/a&gt; is unanswered. It is not clear, at least to me, who is responsible for what part of the project – quite different to what I’m used to from Debian, where there is a clear list of maintainers for each package, and a well known way of submitting patches (by going through bugs.debian.org).&lt;/p&gt;&lt;p&gt;For interested users, I have published my branch of the git repository at &lt;a href=&quot;http://git.nomeata.de/?p=openmoko.git;a=summary&quot;&gt;git.nomeata.de&lt;/a&gt;, and I will hopefully add more features and bugfixes later – at least when I find out how to properly contribute to OpenMoko.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2008-07-21T09:18:00+00:00</dc:date>
	<dc:creator>nomeata</dc:creator>
</item>
<item rdf:about="http://egoleo.wordpress.com/?p=20">
	<title>George Gyau: Adeona, free Laptop-Tracking System</title>
	<link>http://egoleo.wordpress.com/2008/07/15/adeona-free-laptop-tracking-system/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;Adeona is the first Open Source system for tracking the location of your lost or stolen laptop that does not rely on a proprietary, central service. This means that you can install Adeona on your laptop and go — there&amp;#8217;s no need to rely on a single third party. What&amp;#8217;s more, Adeona addresses a critical privacy goal different from existing commercial offerings. It is privacy-preserving. This means that no one besides the owner (or an agent of the owner&amp;#8217;s choosing) can use Adeona to track a laptop. Unlike other systems, users of Adeona can rest assured that no one can abuse the system in order to track where they use their laptop. &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://adeona.cs.washington.edu/index.html&quot;&gt;Adeona&lt;/a&gt;&lt;/p&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/categories/egoleo.wordpress.com/20/&quot; /&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/tags/egoleo.wordpress.com/20/&quot; /&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/egoleo.wordpress.com/20/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/egoleo.wordpress.com/20/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/egoleo.wordpress.com/20/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/egoleo.wordpress.com/20/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/egoleo.wordpress.com/20/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/egoleo.wordpress.com/20/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/egoleo.wordpress.com/20/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/egoleo.wordpress.com/20/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/egoleo.wordpress.com/20/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/egoleo.wordpress.com/20/&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=20&amp;subd=egoleo&amp;ref=&amp;feed=1&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2008-07-15T11:30:39+00:00</dc:date>
</item>
<item rdf:about="http://egoleo.wordpress.com/?p=19">
	<title>George Gyau: The server encountered an internal error or misconfiguration</title>
	<link>http://egoleo.wordpress.com/2008/07/14/the-server-encountered-an-internal-error-or-misconfiguration/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;I encountered the following error when I uploaded an existing site to a new server.&lt;/p&gt;
&lt;p&gt;    The server encountered an internal error or misconfiguration and was unable to complete your request.&lt;/p&gt;
&lt;p&gt;The problem was the .htaccess file. I deleted the .htaccess and the web server worked again.&lt;/p&gt;
&lt;p&gt;Subsequently, I recreated the file directly on the server using vim and the server still worked, I think therefore the problem was likely to be an issue with DOS carriage returns / line feeds versus what the Linux server expected.&lt;/p&gt;
&lt;p&gt;Several tools exist on the web to help create .htaccess files online, but generally any text editor will work. Do be sure to test your site thoroughly after making an adjustments to the .htaccess file.&lt;/p&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/categories/egoleo.wordpress.com/19/&quot; /&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/tags/egoleo.wordpress.com/19/&quot; /&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/egoleo.wordpress.com/19/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/egoleo.wordpress.com/19/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/egoleo.wordpress.com/19/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/egoleo.wordpress.com/19/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/egoleo.wordpress.com/19/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/egoleo.wordpress.com/19/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/egoleo.wordpress.com/19/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/egoleo.wordpress.com/19/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/egoleo.wordpress.com/19/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/egoleo.wordpress.com/19/&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=19&amp;subd=egoleo&amp;ref=&amp;feed=1&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2008-07-14T10:54:20+00:00</dc:date>
</item>
<item rdf:about="http://odzangba.wordpress.com/?p=143">
	<title>Odzangba Dake: The Hunt Continues…</title>
	<link>http://odzangba.wordpress.com/2008/07/01/the-hunt-continues/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;Since yesterday, I&amp;#8217;ve been looking for a collection manager for my videos. I want something similar to Amarok&amp;#8217;s functionality&amp;#8230; for video. I&amp;#8217;ve tried a few so-called &amp;#8216;collection managers&amp;#8217; but they simply did not fit my designs. Tellico. GcStar, Elisa&amp;#8230; nope. All of these require you to manually enter entries for each video file and only GcStar came close to allowing you to play the video from within the manager (technically, it called up mplayer but that&amp;#8217;s okay). I have tons of music videos, tv shows, movies&amp;#8230; and I want to just tell the app &amp;#8220;this is the folder in which all my videos live&amp;#8221; and let it handle the rest. Yeah I know, I&amp;#8217;m, lazy. &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;I especially want playlists for my music videos and I also want a ratings system&amp;#8230; sigh. I guess I&amp;#8217;ll just have to keep looking. I&amp;#8217;d really appreciate a few hints though. &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;/p&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/categories/odzangba.wordpress.com/143/&quot; /&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/tags/odzangba.wordpress.com/143/&quot; /&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/odzangba.wordpress.com/143/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/odzangba.wordpress.com/143/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/odzangba.wordpress.com/143/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/odzangba.wordpress.com/143/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/odzangba.wordpress.com/143/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/odzangba.wordpress.com/143/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/odzangba.wordpress.com/143/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/odzangba.wordpress.com/143/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/odzangba.wordpress.com/143/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/odzangba.wordpress.com/143/&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;amp;blog=438445&amp;amp;post=143&amp;amp;subd=odzangba&amp;amp;ref=&amp;amp;feed=1&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2008-07-01T10:38:54+00:00</dc:date>
</item>
<item rdf:about="http://odzangba.wordpress.com/2008/06/30/frustrations/">
	<title>Odzangba Dake: Frustrations…</title>
	<link>http://odzangba.wordpress.com/2008/06/30/frustrations/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;First, I am annoyed&amp;#8230; very annoyed. Now  on to why I am annoyed. I tried out the piece of crap encryption software called Conceal or something like that. It was supposed to provide one-click encryption. When I tried to encrypt something on Friday, it just showed me a progress bar for four hours and deleted almost all the files in my home folder. Luckily, I&amp;#8217;d done a backup the night before so no real damage was done. But enough damage was done to annoy me. I&amp;#8217;d mirrored about 8gb of the hardy repositories&amp;#8230; I lost that. So now I&amp;#8217;m gonna have to stay here in Winneba for another two weeks to re-download all those packages.&lt;/p&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/categories/odzangba.wordpress.com/141/&quot; /&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/tags/odzangba.wordpress.com/141/&quot; /&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/odzangba.wordpress.com/141/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/odzangba.wordpress.com/141/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/odzangba.wordpress.com/141/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/odzangba.wordpress.com/141/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/odzangba.wordpress.com/141/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/odzangba.wordpress.com/141/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/odzangba.wordpress.com/141/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/odzangba.wordpress.com/141/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/odzangba.wordpress.com/141/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/odzangba.wordpress.com/141/&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;amp;blog=438445&amp;amp;post=141&amp;amp;subd=odzangba&amp;amp;ref=&amp;amp;feed=1&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2008-06-30T07:56:46+00:00</dc:date>
</item>
<item rdf:about="http://odzangba.wordpress.com/?p=137">
	<title>Odzangba Dake: Synaptic proxy configuration problems</title>
	<link>http://odzangba.wordpress.com/2008/06/25/synaptic-proxy-configuration-problems/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;Synaptic gave me at least 15 minutes of pure unmitigated frustration this afternoon when it started choking with this piece of gibberish:&lt;/p&gt;
&lt;pre&gt;407 Proxy Authentication Required&lt;/pre&gt;
&lt;p&gt;I&amp;#8217;d already configured my proxy settings in &lt;em&gt;&lt;strong&gt;apt.conf&lt;/strong&gt;&lt;/em&gt; and my &lt;em&gt;&lt;strong&gt;bashrc&lt;/strong&gt;&lt;/em&gt; file, and had assigned the right values to the &lt;em&gt;&lt;strong&gt;http_proxy&lt;/strong&gt;&lt;/em&gt; and &lt;em&gt;&lt;strong&gt;ftp_proxy&lt;/strong&gt;&lt;/em&gt; variables, not to mention the fact that synaptic had been working okay earlier in the day with no problems so this came as a surprise. Just to make pin-point the problem, I dropped into the terminal and did a sudo apt-get update&amp;#8230; worked fine. Tried installing something with apt-get&amp;#8230; worked. Tried downloading something with wget&amp;#8230; worked fine. Yet synaptic would still not work.&lt;/p&gt;
&lt;p&gt;In the end, I tracked down the problem to gksu. When I launched synaptic like so&lt;/p&gt;
&lt;pre&gt;gksudo synaptic&lt;/pre&gt;
&lt;p&gt;The problem just disappears and synaptic works&amp;#8230; weird. So I used the &lt;em&gt;&lt;strong&gt;Alacarte&lt;/strong&gt;&lt;/em&gt; menu editor (right-click on the menu icon and select &amp;#8216;Edit Menus&amp;#8217;) to change the entry for synaptic package manager from&lt;/p&gt;
&lt;pre&gt;gksu /usr/sbin/synaptic&lt;/pre&gt;
&lt;p&gt;to&lt;/p&gt;
&lt;pre&gt;gksudo /usr/sbin/synaptic&lt;/pre&gt;
&lt;p&gt;I don&amp;#8217;t know what caused this problem and I probably should file a bug report somewhere&amp;#8230;&lt;/p&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/categories/odzangba.wordpress.com/137/&quot; /&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/tags/odzangba.wordpress.com/137/&quot; /&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/odzangba.wordpress.com/137/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/odzangba.wordpress.com/137/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/odzangba.wordpress.com/137/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/odzangba.wordpress.com/137/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/odzangba.wordpress.com/137/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/odzangba.wordpress.com/137/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/odzangba.wordpress.com/137/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/odzangba.wordpress.com/137/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/odzangba.wordpress.com/137/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/odzangba.wordpress.com/137/&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;amp;blog=438445&amp;amp;post=137&amp;amp;subd=odzangba&amp;amp;ref=&amp;amp;feed=1&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2008-06-25T18:25:12+00:00</dc:date>
</item>
<item rdf:about="http://odzangba.wordpress.com/?p=68">
	<title>Odzangba Dake: What to do when you lose your password</title>
	<link>http://odzangba.wordpress.com/2008/06/07/what-to-do-when-you-lose-your-password/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;Disclaimer: This how-to details procedures for gaining root access to linux boxes. If the linux box is not yours, get the (written) permission of the owner&amp;#8230; it&amp;#8217;ll save you a lot of trouble. I will not be responsible for anything illegal you do with the stuff you learn on this page. &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;/em&gt;&lt;/p&gt;
&lt;p&gt;Okay, so you lost your password? It&amp;#8217;s not the end of the world. But first you need physical access to the box.&lt;/p&gt;
&lt;p&gt;1. Boot the machine (and press escape at the GRUB menu loading stage if the menu is hidden).&lt;/p&gt;
&lt;p&gt;2. Select the correct entry for booting into your linux system -  it usually is the first item and is probably already selected -  and press &amp;#8220;e&amp;#8221; on your keyboard.&lt;/p&gt;
&lt;p&gt;3. Select the line that begins with &lt;em&gt;&lt;strong&gt;kernel&lt;/strong&gt;&lt;/em&gt; and press &amp;#8220;e&amp;#8221;on your keyboard to edit it.&lt;/p&gt;
&lt;p&gt;4. Now navigate to the end of this line, leave a space and type:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;rw single init=/bin/bash&lt;/strong&gt;&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;5. Press &amp;#8220;enter&amp;#8221; then &amp;#8220;b&amp;#8221; on your keyboard and wait for the system to boot and give you a command prompt.&lt;/p&gt;
&lt;p&gt;6. Now you need to use the passwd command to change your password. Do:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;passwd $user&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Replace $user with your username&lt;/p&gt;
&lt;p&gt;7. Enter and confirm a new password when prompted, and reboot the machine with the &lt;em&gt;&lt;strong&gt;reboot&lt;/strong&gt;&lt;/em&gt; command. I sometimes get an error message when I try to reboot; if you run into the same problem, just turn the pc off and back on. &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;8. That&amp;#8217;s it, you&amp;#8217;re good. &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;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/categories/odzangba.wordpress.com/68/&quot; /&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/tags/odzangba.wordpress.com/68/&quot; /&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/odzangba.wordpress.com/68/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/odzangba.wordpress.com/68/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/odzangba.wordpress.com/68/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/odzangba.wordpress.com/68/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/odzangba.wordpress.com/68/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/odzangba.wordpress.com/68/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/odzangba.wordpress.com/68/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/odzangba.wordpress.com/68/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/odzangba.wordpress.com/68/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/odzangba.wordpress.com/68/&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;amp;blog=438445&amp;amp;post=68&amp;amp;subd=odzangba&amp;amp;ref=&amp;amp;feed=1&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2008-06-07T17:41:08+00:00</dc:date>
</item>
<item rdf:about="http://odzangba.wordpress.com/?p=134">
	<title>Odzangba Dake: Re-building My Local Ubuntu Repository</title>
	<link>http://odzangba.wordpress.com/2008/06/02/re-building-my-local-ubuntu-repository/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;Hardy Heron was released about a month ago and I&amp;#8217;m still going through the painful process of mirroring the ubuntu servers. It&amp;#8217;s been slow going here and it might take me another month to get the major stuff on my hard disk. Then I&amp;#8217;ll make to full transitition to Ubuntu 8.04.&lt;/p&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/categories/odzangba.wordpress.com/134/&quot; /&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/tags/odzangba.wordpress.com/134/&quot; /&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/odzangba.wordpress.com/134/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/odzangba.wordpress.com/134/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/odzangba.wordpress.com/134/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/odzangba.wordpress.com/134/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/odzangba.wordpress.com/134/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/odzangba.wordpress.com/134/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/odzangba.wordpress.com/134/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/odzangba.wordpress.com/134/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/odzangba.wordpress.com/134/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/odzangba.wordpress.com/134/&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;amp;blog=438445&amp;amp;post=134&amp;amp;subd=odzangba&amp;amp;ref=&amp;amp;feed=1&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2008-06-02T13:43:31+00:00</dc:date>
</item>
<item rdf:about="http://egoleo.wordpress.com/?p=17">
	<title>George Gyau: Drupal Links</title>
	<link>http://egoleo.wordpress.com/2008/06/02/drupal-links/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;Drupal is a very powerful content management system (CMS). But it can be very confusing and fustrating to start with and get documentations.&lt;br /&gt;
I have been working on some drupal projects for the past 2 weeks. And i have really come a long way getting some documentation links on Drupal. So i have decided not to allow people also go through by parcelling all the documentation links i came across on the web and also got through the IRC.&lt;/p&gt;
&lt;p&gt;And i will be updating each time somthing new comes up &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;For Drupal Clean URLS&lt;br /&gt;
&lt;strong&gt;http://drupal.org/node/15365&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Flash Video in Drupal 5: A complete multimedia tutorial&lt;br /&gt;
&lt;strong&gt;http://www.travistidwell.com/flashvideo&lt;/strong&gt;&lt;/p&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/categories/egoleo.wordpress.com/17/&quot; /&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/tags/egoleo.wordpress.com/17/&quot; /&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/egoleo.wordpress.com/17/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/egoleo.wordpress.com/17/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/egoleo.wordpress.com/17/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/egoleo.wordpress.com/17/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/egoleo.wordpress.com/17/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/egoleo.wordpress.com/17/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/egoleo.wordpress.com/17/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/egoleo.wordpress.com/17/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/egoleo.wordpress.com/17/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/egoleo.wordpress.com/17/&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=17&amp;subd=egoleo&amp;ref=&amp;feed=1&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2008-06-02T10:05:14+00:00</dc:date>
</item>
<item rdf:about="http://egoleo.wordpress.com/?p=16">
	<title>George Gyau: How to zip files on linux</title>
	<link>http://egoleo.wordpress.com/2008/06/02/how-to-zip-files-on-linux/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;Ziping files on linux using shell is one of the most easy things to do&lt;br /&gt;
but today i got a bit confused when a friend asked me how to zip a file with&lt;br /&gt;
a different name.&lt;br /&gt;
example : normally i zip with the source and target name all been same.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;zip -r foobar foobar&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;which will result in &lt;/p&gt;
&lt;p&gt;foobar.zip&lt;/p&gt;
&lt;p&gt;but what my friend wanted was having a different name for the result.&lt;/p&gt;
&lt;p&gt;So i had to jump straight to the linux channel on IRC. below is what i learnt from there.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;zip -r foo.zip bar&lt;br /&gt;
&lt;/strong&gt;&lt;br /&gt;
which results in foo.zip&lt;/p&gt;
&lt;p&gt;what abt unziping too&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;unzip foo.zip&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;but what about unziping to have different name .&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;unzip foo.zip &amp;amp;&amp;amp; mv foo bar&lt;/strong&gt;&lt;/p&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/categories/egoleo.wordpress.com/16/&quot; /&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/tags/egoleo.wordpress.com/16/&quot; /&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/egoleo.wordpress.com/16/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/egoleo.wordpress.com/16/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/egoleo.wordpress.com/16/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/egoleo.wordpress.com/16/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/egoleo.wordpress.com/16/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/egoleo.wordpress.com/16/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/egoleo.wordpress.com/16/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/egoleo.wordpress.com/16/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/egoleo.wordpress.com/16/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/egoleo.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=egoleo.wordpress.com&amp;blog=480684&amp;post=16&amp;subd=egoleo&amp;ref=&amp;feed=1&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2008-06-02T09:55:40+00:00</dc:date>
</item>
<item rdf:about="http://egoleo.wordpress.com/?p=15">
	<title>George Gyau: Howto enable wireless on ACER 4520 on Ubuntu Hardy</title>
	<link>http://egoleo.wordpress.com/2008/06/02/howto-enable-wireless-on-acer-4520-on-ubuntu-hardy/</link>
	<content:encoded>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;Just today i had all my configurations for my wifi card which is&lt;br /&gt;
Atheros Communications Inc. AR242x 802.11abg Wireless PCI Express Adapter (rev 01) wiped of after a Hardy upgrade. So below i fixed it. But i used it also for the first time when installing Hardy fresh.&lt;/p&gt;
&lt;p&gt;1. Open you terminal&lt;/p&gt;
&lt;p&gt;2. Get this version of madwifi:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;wget -c http://snapshots.madwifi.org/special/madwifi-hal-0.10.5.6-r3698-20080604.tar.gz&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;3. Untar the downloaded package:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;tar xvf madwifi-ng-r2756+ar5007.tar.gz&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;4. Get inside the unpacked directory:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;cd madwifi-ng-r2756+ar5007&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;5. If you haven’t compiled anything from source before on your linux then you propably need the build essential package:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;sudo apt-get update &amp;amp;&amp;amp; sudo aptitude install build-essential&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;6. Now you can build your madwifi and install the modules:&lt;br /&gt;
make&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;sudo make install&lt;br /&gt;
sudo modprobe ath_pci&lt;br /&gt;
sudo modprobe wlan_scan_sta&lt;br /&gt;
&lt;/strong&gt;&lt;br /&gt;
The last 2 commands can cause some complications on some systems. If they do check your System &amp;gt;&amp;gt; Administration &amp;gt;&amp;gt; Restricted Drivers Manager and disable atheros here. Then try again.&lt;/p&gt;
&lt;p&gt;7. Now restart your computer and you should be able to see any aviable networks in your Network Manager.&lt;/p&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/categories/egoleo.wordpress.com/15/&quot; /&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/tags/egoleo.wordpress.com/15/&quot; /&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/egoleo.wordpress.com/15/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/egoleo.wordpress.com/15/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/egoleo.wordpress.com/15/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/egoleo.wordpress.com/15/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/egoleo.wordpress.com/15/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/egoleo.wordpress.com/15/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/egoleo.wordpress.com/15/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/egoleo.wordpress.com/15/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/egoleo.wordpress.com/15/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/egoleo.wordpress.com/15/&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=15&amp;subd=egoleo&amp;ref=&amp;feed=1&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2008-06-02T07:13:59+00:00</dc:date>
</item>

</rdf:RDF>
