<?xml version="1.0"?>
<rss version="2.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:yt="http://gdata.youtube.com/schemas/2007">
   <channel>
      <title>Benjamin Schweizer. Technology, Art and Culture.</title>
      <description>combined news feed for benjamin-schweizer.de/ and related sites.</description>
      <link>http://pipes.yahoo.com/pipes/pipe.info?_id=Uok7Jed73BGohcv8dbq02Q</link>
      <pubDate>Fri, 03 Sep 2010 13:22:00 +0000</pubDate>
      <generator>http://pipes.yahoo.com/pipes/</generator>
      <item>
         <title>Benjamin fährt Zug. Zum Kotzen. Ticket-Automat am Bahnhof kaputt und im Zug nimmt er nur Münzen. Zurück fahre ich Taxi. Basta.</title>
         <link>http://www.facebook.com/profile.php?id=813072776&amp;story_fbid=148368798514271</link>
         <description>fährt Zug. Zum Kotzen. Ticket-Automat am Bahnhof kaputt und im Zug nimmt er nur Münzen. Zurück fahre ich Taxi. Basta.</description>
         <author>Benjamin Schweizer</author>
         <guid isPermaLink="false">http://www.facebook.com/profile.php?id=813072776&amp;story_fbid=148368798514271</guid>
         <pubDate>Fri, 20 Aug 2010 17:34:00 +0000</pubDate>
      </item>
      <item>
         <title>Measuring Disk IO Performance</title>
         <link>http://benjamin-schweizer.de/measuring-disk-io-performance.html</link>
         <description>Hard disk drives have become larger and larger over the years, but their rotation speeds remain at nearly the same level since decades. This has lead to some odd trait: we have seen greatly improved transfer rates for sequential input/output, but random input/output remains at nearly the same level since ever. The reason for this [...]</description>
         <guid isPermaLink="false">http://benjamin-schweizer.de/?p=324</guid>
         <pubDate>Sat, 14 Aug 2010 11:01:27 +0000</pubDate>
         <content:encoded><![CDATA[<p>Hard disk drives have become larger and larger over the years, but their rotation speeds remain at nearly the same level since decades. This has lead to some odd trait: we have seen greatly improved transfer rates for sequential input/output, but random input/output remains at nearly the same level since ever.</p>
<p><img class="alignleft" style="margin-top:10px;margin-bottom:10px;" src="http://upload.wikimedia.org/wikipedia/commons/thumb/5/52/Hard_drive-en.svg/300px-Hard_drive-en.svg.png" alt="Diagram of a computer hard disk drive, (cc) Surachit" width="300" height="214"/>The reason for this is the physical build-up of hard disk drives: to read (or write) some random position on the magnetic layer, a drive needs to move its heads to a given track and <em>wait</em> until the requested sector arrives. Typical mean access times for this are in the range from 5ms to 15ms, resulting in 50-150 random <a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/IOPS">input/output operations per second</a> (IOPS).</p>
<p>In practice, there are some measures to deal with this constraint. Modern hard drives utilize native command queuing (NCQ) to optimize seek times, we use disk arrays to spread the io load on multiple spindles (RAID), various caching strategies reduce the amount of input/output operations that are issued to the drive and read-ahead/prefetching tries to load the data beforehand.</p>
<p>Though, the question arises: how many input/output operations can we actually perform with all these optimizations in place? Let&#8217;s benchmark this. One tool that we can use for this is <a rel="nofollow" target="_blank" href="http://benjamin-schweizer.de/files/iops/">iops(1)</a>, a benchmark utility that runs on Linux/FreeBSD/Mac OS X. Iops issues random read requests with increasing blocksizes:</p>
<pre>
$ sudo ./iops --num_threads 1 --time 2 /dev/md1
/dev/md1, 6.00 TB, 1 threads: 512 B blocks: 43.9 IO/s, 21.9 KiB/s (179.8 kbit/s) 1 KiB blocks: 46.7 IO/s, 46.7 KiB/s (382.9 kbit/s) 2 KiB blocks: 46.4 IO/s, 92.7 KiB/s (759.6 kbit/s) 4 KiB blocks: 37.5 IO/s, 150.0 KiB/s ( 1.2 Mbit/s) 8 KiB blocks: 33.6 IO/s, 268.5 KiB/s ( 2.2 Mbit/s) 16 KiB blocks: 29.5 IO/s, 471.4 KiB/s ( 3.9 Mbit/s) 32 KiB blocks: 26.0 IO/s, 833.3 KiB/s ( 6.8 Mbit/s) 64 KiB blocks: 24.0 IO/s, 1.5 MiB/s ( 12.6 Mbit/s) 128 KiB blocks: 24.1 IO/s, 3.0 MiB/s ( 25.3 Mbit/s) 256 KiB blocks: 20.1 IO/s, 5.0 MiB/s ( 42.1 Mbit/s) 512 KiB blocks: 18.5 IO/s, 9.3 MiB/s ( 77.6 Mbit/s) 1 MiB blocks: 16.9 IO/s, 16.9 MiB/s (142.0 Mbit/s) 2 MiB blocks: 11.7 IO/s, 23.3 MiB/s (195.7 Mbit/s) 4 MiB blocks: 9.2 IO/s, 36.6 MiB/s (307.3 Mbit/s) 8 MiB blocks: 5.1 IO/s, 41.0 MiB/s (343.6 Mbit/s) 16 MiB blocks: 3.8 IO/s, 60.8 MiB/s (510.2 Mbit/s) 32 MiB blocks: 3.1 IO/s, 100.6 MiB/s (843.7 Mbit/s) 64 MiB blocks: 2.0 IO/s, 127.2 MiB/s ( 1.1 Gbit/s) 128 MiB blocks: 1.1 IO/s, 141.7 MiB/s ( 1.2 Gbit/s) 256 MiB blocks: 0.5 IO/s, 136.1 MiB/s ( 1.1 Gbit/s)
</pre>
<p>In this example, the tested device is a Linux software raid5 with four 2 TB, 5.400rpm disks. We have started iops(1) with a single thread and a sampling time of two seconds for each block size. The results show that we reach about 45 IOPS for very small block sizes (or 22ms per IO request).</p>
<p>Now, let&#8217;s increase the number of threads and see how this affects overall performance:</p>
<pre>
$ sudo ./iops --num_threads 16 --time 2 /dev/md1
/dev/md1, 6.00 TB, 16 threads: 512 B blocks: 151.4 IO/s, 75.7 KiB/s (620.3 kbit/s) 1 KiB blocks: 123.7 IO/s, 123.7 KiB/s ( 1.0 Mbit/s) 2 KiB blocks: 117.0 IO/s, 234.1 KiB/s ( 1.9 Mbit/s) 4 KiB blocks: 97.7 IO/s, 390.6 KiB/s ( 3.2 Mbit/s) 8 KiB blocks: 78.6 IO/s, 629.1 KiB/s ( 5.2 Mbit/s) 16 KiB blocks: 60.7 IO/s, 970.7 KiB/s ( 8.0 Mbit/s)
caught ctrl-c, bye.
</pre>
<p>We see that concurrent requests increase the IO limit to 150 IOPS. This indicates that the requests are actually spread to multiple spindles or optimized by native command queuing. I guess it&#8217;s the spindles, but we could investigate further by benchmarking a single disk instead of the array. Though, this is beyond the scope of this blog post.</p>
<p>→ <a rel="nofollow" target="_blank" href="http://hg.sickos.org/iops/archive/tip.tar.bz2">get the latest source code</a><br />
→ <a rel="nofollow" target="_blank" href="https://wiki.sickos.org/iops">visit project page</a><br />
→ <a rel="nofollow" target="_blank" href="http://hg.sickos.org/iops">visit mercurial repository</a></p>]]></content:encoded>
      </item>
      <item>
         <title>b_e_n_j_a_m_i_n: New blog post: Measuring Disk IO Performance http://benjamin-schweizer.de/measuring-disk-io-performance.html</title>
         <link>http://twitter.com/b_e_n_j_a_m_i_n/statuses/21142004479</link>
         <description>b_e_n_j_a_m_i_n: New blog post: Measuring Disk IO Performance http://benjamin-schweizer.de/measuring-disk-io-performance.html</description>
         <guid isPermaLink="false">http://twitter.com/b_e_n_j_a_m_i_n/statuses/21142004479</guid>
         <pubDate>Sat, 14 Aug 2010 11:01:27 +0000</pubDate>
      </item>
      <item>
         <title>b_e_n_j_a_m_i_n: is preparing for #eth0 next week. In 2009, we had fun with #WPAD (http://301.sickos.org/5fbc15ed), this time is going to be even more fun;-)</title>
         <link>http://twitter.com/b_e_n_j_a_m_i_n/statuses/20539247847</link>
         <description>b_e_n_j_a_m_i_n: is preparing for #eth0 next week. In 2009, we had fun with #WPAD (http://301.sickos.org/5fbc15ed), this time is going to be even more fun;-)</description>
         <guid isPermaLink="false">http://twitter.com/b_e_n_j_a_m_i_n/statuses/20539247847</guid>
         <pubDate>Sat, 07 Aug 2010 09:03:51 +0000</pubDate>
      </item>
      <item>
         <title>b_e_n_j_a_m_i_n: @TabTwo http://timecapsuledead.org/now_what.html #timecapsule</title>
         <link>http://twitter.com/b_e_n_j_a_m_i_n/statuses/20370794465</link>
         <description>b_e_n_j_a_m_i_n: @TabTwo http://timecapsuledead.org/now_what.html #timecapsule</description>
         <guid isPermaLink="false">http://twitter.com/b_e_n_j_a_m_i_n/statuses/20370794465</guid>
         <pubDate>Thu, 05 Aug 2010 07:41:33 +0000</pubDate>
      </item>
      <item>
         <title>gopher closed issue 4 on ydkn/raki</title>
         <link>http://github.com/ydkn/raki/issues/4/find</link>
         <description>&lt;div class=&quot;details&quot;&gt;&lt;div class=&quot;message&quot;&gt;&lt;blockquote&gt;Automatisch generierte Sammlung der Userpages &lt;/blockquote&gt; &lt;/div&gt;
&lt;/div&gt;</description>
         <author>gopher</author>
         <guid isPermaLink="false">tag:github.com,2008:IssuesEvent/264887467</guid>
         <pubDate>Thu, 29 Jul 2010 03:03:45 +0000</pubDate>
         <media:thumbnail width="30" url="http://www.gravatar.com/avatar/8e5e2f87387730f9b1e73a6e30f7d520?s=30&amp;amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-140.png" height="30"/>
      </item>
      <item>
         <title>gopher pushed to master at ydkn/raki</title>
         <link>http://github.com/ydkn/raki/compare/83b1eabee8...319ef473f7</link>
         <description>&lt;div class=&quot;details&quot;&gt;&lt;div class=&quot;commits&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;&lt;span class='committer'&gt;Benjamin Schweizer&lt;/span&gt;&lt;/strong&gt; committed &lt;code&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://github.com/ydkn/raki/commit/319ef473f7606975df85b5fe7e8932c0c641ff32&quot;&gt;319ef47&lt;/a&gt;&lt;/code&gt; &lt;div class=&quot;message&quot;&gt; &lt;blockquote&gt;fixed link to user profile&lt;/blockquote&gt; &lt;/div&gt; &lt;/li&gt; &lt;/ul&gt; &lt;/div&gt; &lt;/div&gt;</description>
         <author>gopher</author>
         <guid isPermaLink="false">tag:github.com,2008:PushEvent/264874382</guid>
         <pubDate>Thu, 29 Jul 2010 02:46:16 +0000</pubDate>
         <media:thumbnail width="30" url="http://www.gravatar.com/avatar/8e5e2f87387730f9b1e73a6e30f7d520?s=30&amp;amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-140.png" height="30"/>
      </item>
      <item>
         <title>gopher closed issue 3 on ydkn/raki</title>
         <link>http://github.com/ydkn/raki/issues/3/find</link>
         <description>&lt;div class=&quot;details&quot;&gt;&lt;div class=&quot;message&quot;&gt;&lt;blockquote&gt;OpenID 2 &lt;/blockquote&gt; &lt;/div&gt;
&lt;/div&gt;</description>
         <author>gopher</author>
         <guid isPermaLink="false">tag:github.com,2008:IssuesEvent/263855987</guid>
         <pubDate>Wed, 28 Jul 2010 06:16:09 +0000</pubDate>
         <media:thumbnail width="30" url="http://www.gravatar.com/avatar/8e5e2f87387730f9b1e73a6e30f7d520?s=30&amp;amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-140.png" height="30"/>
      </item>
      <item>
         <title>gopher pushed to master at gopher/raki</title>
         <link>http://github.com/gopher/raki/compare/e4170cf0ab...bd4c6a7ddc</link>
         <description>&lt;div class=&quot;details&quot;&gt;&lt;div class=&quot;commits&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;&lt;span class='committer'&gt;Benjamin Schweizer&lt;/span&gt;&lt;/strong&gt; committed &lt;code&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://github.com/gopher/raki/commit/bd4c6a7ddcdd9eeab9f4b4b82622487648247575&quot;&gt;bd4c6a7&lt;/a&gt;&lt;/code&gt; &lt;div class=&quot;message&quot;&gt; &lt;blockquote&gt;fixed english locale&lt;/blockquote&gt; &lt;/div&gt; &lt;/li&gt; &lt;/ul&gt; &lt;/div&gt; &lt;/div&gt;</description>
         <author>gopher</author>
         <guid isPermaLink="false">tag:github.com,2008:PushEvent/263854892</guid>
         <pubDate>Wed, 28 Jul 2010 06:14:27 +0000</pubDate>
         <media:thumbnail width="30" url="http://www.gravatar.com/avatar/8e5e2f87387730f9b1e73a6e30f7d520?s=30&amp;amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-140.png" height="30"/>
      </item>
      <item>
         <title>gopher forked ydkn/raki</title>
         <link>http://github.com/gopher/raki/</link>
         <description>&lt;div class=&quot;details&quot;&gt;&lt;div class=&quot;message&quot;&gt;Forked repository is at &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://github.com/gopher/raki&quot;&gt;gopher/raki&lt;/a&gt; &lt;/div&gt;
&lt;/div&gt;</description>
         <author>gopher</author>
         <guid isPermaLink="false">tag:github.com,2008:ForkEvent/263723156</guid>
         <pubDate>Wed, 28 Jul 2010 03:54:38 +0000</pubDate>
         <media:thumbnail width="30" url="http://www.gravatar.com/avatar/8e5e2f87387730f9b1e73a6e30f7d520?s=30&amp;amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-140.png" height="30"/>
      </item>
      <item>
         <title>gopher opened issue 3 on ydkn/raki</title>
         <link>http://github.com/ydkn/raki/issues/3/find</link>
         <description>&lt;div class=&quot;details&quot;&gt;&lt;div class=&quot;message&quot;&gt;&lt;blockquote&gt;OpenID 2 &lt;/blockquote&gt; &lt;/div&gt;
&lt;/div&gt;</description>
         <author>gopher</author>
         <guid isPermaLink="false">tag:github.com,2008:IssuesEvent/262960821</guid>
         <pubDate>Tue, 27 Jul 2010 13:33:27 +0000</pubDate>
         <media:thumbnail width="30" url="http://www.gravatar.com/avatar/8e5e2f87387730f9b1e73a6e30f7d520?s=30&amp;amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-140.png" height="30"/>
      </item>
      <item>
         <title>b_e_n_j_a_m_i_n: New blog post: Building rsync3 on Mac OS X (Universal Binary) http://bit.ly/9FQBfq</title>
         <link>http://twitter.com/b_e_n_j_a_m_i_n/statuses/19585049948</link>
         <description>b_e_n_j_a_m_i_n: New blog post: Building rsync3 on Mac OS X (Universal Binary) http://bit.ly/9FQBfq</description>
         <guid isPermaLink="false">http://twitter.com/b_e_n_j_a_m_i_n/statuses/19585049948</guid>
         <pubDate>Mon, 26 Jul 2010 16:15:46 +0000</pubDate>
      </item>
      <item>
         <title>Building rsync3 on Mac OS X (Universal Binary)</title>
         <link>http://benjamin-schweizer.de/building-rsync3-on-mac-os-x-universal-binary.html</link>
         <description>Apple Mac OS X 10.4-10.6 ships with a modified version of rsync2 that has support for extended attributes and resource forks. Though, it &amp;#8220;does not perform as well as rsync 3.x, consumes more memory (especially for transfers of many files), and will copy unmodified resource forks every single time&amp;#8221; (Mike Bombich). Luckily, you can install [...]</description>
         <guid isPermaLink="false">http://benjamin-schweizer.de/?p=307</guid>
         <pubDate>Mon, 26 Jul 2010 16:15:21 +0000</pubDate>
         <content:encoded><![CDATA[<p>Apple Mac OS X 10.4-10.6 ships with a modified version of <a rel="nofollow" target="_blank" href="http://www.samba.org/rsync/">rsync2</a> that has support for extended attributes and resource forks. Though, it &#8220;does not perform as well as rsync 3.x, consumes more memory (especially for transfers of many files), and will copy unmodified resource forks every single time&#8221; (<a rel="nofollow" target="_blank" href="http://www.bombich.com/mactips/rsync.html">Mike Bombich</a>).</p>
<p>Luckily, you can install rsync3 from <a rel="nofollow" target="_blank" href="http://www.macports.org/">MacPorts</a>, using Mike&#8217;s <a rel="nofollow" target="_blank" href="http://www.bombich.com/ccc_features.html">Carbon Copy Cloner</a> (which ships with a mutilated binary) or compile it on your own. This is an receipt for building an rsync3 universal binary that runs on Mac OS X 10.4-10.6 ppc/x86/x86_64:</p>
<pre>
# 2010-07-07, benjamin: receipt for building rsync3 universal binary for
# mac os x 10.4+ ppc/i386/x86_64 on a build host running 10.6
# based upon http://www.bombich.com/mactips/rsync.html # install xcode from http://developer.apple.com/technologies/xcode.html # get sources
curl -O http://samba.anu.edu.au/ftp/rsync/rsync-3.0.7.tar.gz
curl -O http://samba.anu.edu.au/ftp/rsync/rsync-patches-3.0.7.tar.gz # optionally verify signatures
curl -O http://samba.anu.edu.au/ftp/rsync/rsync-3.0.7.tar.gz.asc
gpg --verify rsync-3.0.7.tar.gz.asc
curl -O http://samba.anu.edu.au/ftp/rsync/rsync-patches-3.0.7.tar.gz.asc
gpg --verify rsync-patches-3.0.7.tar.gz.asc # apply patches relevant for preserving Mac OS X metadata
tar xvzf rsync-3.0.7.tar.gz
tar xvzf rsync-patches-3.0.7.tar.gz
cd rsync-3.0.7/
patch -p1 &lt;patches/fileflags.diff
patch -p1 &lt;patches/crtimes.diff # build 10.4+ ppc binary
CC="gcc-4.0" LDFLAGS="-arch ppc" CFLAGS="-arch ppc -isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4" ./configure
make -j4
mv rsync rsync3.ppc # build 10.4+ x86 binary
CC="gcc-4.0" LDFLAGS="-arch i386" CFLAGS="-arch i386 -isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4" ./configure
make -j4
mv rsync rsync3.i386 # build 10.5+ x86_64 binary
CC="gcc-4.2" LDFLAGS="-arch x86_64" CFLAGS="-arch x86_64 -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5" ./configure
make -j4
mv rsync rsync3.x86_64 # combine platform specific binaries into an universal binary
lipo -create rsync3.ppc rsync3.i386 rsync3.x86_64 -output rsync3 # eof.</pre>
<p>You can find binaries, patches etc. in the download section below.</p>
<p>→ <a rel="nofollow" target="_blank" href="http://benjamin-schweizer.de/files/rsync3/">download binaries</a></p>]]></content:encoded>
      </item>
      <item>
         <title>Benjamin ist morgen ab 11oo Grillen an der Jagst...</title>
         <link>http://www.facebook.com/profile.php?id=813072776&amp;story_fbid=129737820397869</link>
         <description>ist morgen ab 11oo Grillen an der Jagst...</description>
         <author>Benjamin Schweizer</author>
         <guid isPermaLink="false">http://www.facebook.com/profile.php?id=813072776&amp;story_fbid=129737820397869</guid>
         <pubDate>Sat, 03 Jul 2010 20:24:13 +0000</pubDate>
      </item>
      <item>
         <title>b_e_n_j_a_m_i_n: New blog post: My First Week with an Android Phone http://benjamin-schweizer.de/my-first-week-with-an-android-phone.html</title>
         <link>http://twitter.com/b_e_n_j_a_m_i_n/statuses/17481855955</link>
         <description>b_e_n_j_a_m_i_n: New blog post: My First Week with an Android Phone http://benjamin-schweizer.de/my-first-week-with-an-android-phone.html</description>
         <guid isPermaLink="false">http://twitter.com/b_e_n_j_a_m_i_n/statuses/17481855955</guid>
         <pubDate>Thu, 01 Jul 2010 09:42:31 +0000</pubDate>
      </item>
      <item>
         <title>My First Week with an Android Phone</title>
         <link>http://benjamin-schweizer.de/my-first-week-with-an-android-phone.html</link>
         <description>After years of buying Nokia phones, I finally got my hands on a HTC Desire running Android 2.1. There are many reviews elsewhere but here are the impressions of my first week, written from the perspective of a Nokia E71 switcher. What I expected was a solid device that can handle all those telephony stuff [...]</description>
         <guid isPermaLink="false">http://benjamin-schweizer.de/?p=281</guid>
         <pubDate>Thu, 01 Jul 2010 09:42:30 +0000</pubDate>
         <content:encoded><![CDATA[<p><img class="alignleft" src="http://farm5.static.flickr.com/4003/4362329123_cc3c0c0df3_m.jpg" alt="HTC Desire, (cc) Louis Volant" width="135" height="240"/></p>
<p>After years of buying Nokia phones, I finally got my hands on a HTC Desire running Android 2.1. There are many reviews elsewhere but here are the impressions of my first week, written from the perspective of a Nokia E71 switcher. What I expected was a solid device that can handle all those telephony stuff as expected, paired with a good browser, email, maps, chat and an mp3 player.</p>
<p>After unboxing the device, I was presented with an empty home screen. I found myself exploring all those built-in apps and widgets and googled for other &#8220;essential android apps&#8221;. It took me some time to figure out what apps would serve my needs and what I can do beyond my imagination. I&#8217;ve ended up installing <a rel="nofollow" target="_blank" href="http://code.google.com/p/k9mail/">K9 Mail</a> for my business mails (because the built-in email app does not support IMAP IDLE). I&#8217;ve installed<a rel="nofollow" target="_blank" href="http://www.google.com/mobile/navigation/"> Google Maps + Navigation</a>, <a rel="nofollow" target="_blank" href="http://www.meebo.com/android/">Meebo IM</a> and <a rel="nofollow" target="_blank" href="http://www.jabbim.com/">Jabbim</a> for chat and <a rel="nofollow" target="_blank" href="http://listen.googlelabs.com/">Google Listen</a> as a podcasting client. Aside of this, I use Gmail + <a rel="nofollow" target="_blank" href="http://alexanderblom.se/gmail-unread-count/">Gmail unread count</a>, <a rel="nofollow" target="_blank" href="http://code.google.com/p/connectbot/">ConnectBot</a> and <a rel="nofollow" target="_blank" href="http://blog.dropbox.com/?p=439">Dropbox</a> (that should really upload my phone data automatically). And there is <a rel="nofollow" target="_blank" href="http://www.doubletwist.com/dt/Home/Index.dt">DoubleTwist</a>, a nice syncing tool that resembles iTunes.</p>
<p>I was pretty impressed by this device; from a technological perspective it outplays my Nokia E71. Seamless Facebook integration into the address book, a good browser, solid camera and a hacker-friendly operating system with tons of free apps are really great. Having a larger screen instead of a physical keyboard is no penalty and all connectors are standards based.</p>
<p>Though, there are some things that could be better&#8230; The external speaker is too quiet to listen to podcasts and gets disabled when earphones are plugged in. This is a problem if you expect to hear the alarm clock in the morning:) Further, the podcasting client does not stream audio to my car&#8217;s bluetooth adapter because it requires A2DP for streaming anything else than pure phone calls (though, that worked with my Nokia). Then, there&#8217;s a ground loop on the ear phones when the phone is connected to the charger; its not loud but I can hear it. And you have to charge the phone a lot: standby time is less than 24 hours. Thus I&#8217;ve disabled GPS and Bluetooth, and set Wifi to turn off after 15mins of screen blanking.</p>
<p>After all, I think the Desire is a good device and it fits my needs. There are design quirks that could be fixed and there&#8217;s software that needs to be written. But the status quo is quite impressive and I expect many new features and tools to arrive soon. There&#8217;s no strong vendor lock-in as it is with iPhones and the device is hacker-friendly. Someone needs an old Nokia?</p>]]></content:encoded>
      </item>
      <item>
         <title>b_e_n_j_a_m_i_n: wonders what #Knuth said at TUG2010 and why there's no buzz of this 'Earthshaking Announcement'?</title>
         <link>http://twitter.com/b_e_n_j_a_m_i_n/statuses/17481424223</link>
         <description>b_e_n_j_a_m_i_n: wonders what #Knuth said at TUG2010 and why there's no buzz of this 'Earthshaking Announcement'?</description>
         <guid isPermaLink="false">http://twitter.com/b_e_n_j_a_m_i_n/statuses/17481424223</guid>
         <pubDate>Thu, 01 Jul 2010 09:30:53 +0000</pubDate>
      </item>
      <item>
         <title>b_e_n_j_a_m_i_n: @shakalandy ich mag nen blog post aus den slides, kommt irgendwann im juli</title>
         <link>http://twitter.com/b_e_n_j_a_m_i_n/statuses/17430122733</link>
         <description>b_e_n_j_a_m_i_n: @shakalandy ich mag nen blog post aus den slides, kommt irgendwann im juli</description>
         <guid isPermaLink="false">http://twitter.com/b_e_n_j_a_m_i_n/statuses/17430122733</guid>
         <pubDate>Wed, 30 Jun 2010 17:32:50 +0000</pubDate>
      </item>
      <item>
         <title>b_e_n_j_a_m_i_n: gives a lecture &quot;Flashing up the LAMP&quot; at #cthn #bbq today, see http://301.sickos.org/b6fd3b46 #ccc #linux #apache #php #mysql #benchmark</title>
         <link>http://twitter.com/b_e_n_j_a_m_i_n/statuses/17316238024</link>
         <description>b_e_n_j_a_m_i_n: gives a lecture &quot;Flashing up the LAMP&quot; at #cthn #bbq today, see http://301.sickos.org/b6fd3b46 #ccc #linux #apache #php #mysql #benchmark</description>
         <guid isPermaLink="false">http://twitter.com/b_e_n_j_a_m_i_n/statuses/17316238024</guid>
         <pubDate>Tue, 29 Jun 2010 07:50:02 +0000</pubDate>
      </item>
      <item>
         <title>Benjamin fragt sich wo der Spam Button bei Facebook bleibt; jetzt spammen die mir auch schon an meine Wall...</title>
         <link>http://www.facebook.com/profile.php?id=813072776&amp;story_fbid=133613070001198</link>
         <description>fragt sich wo der Spam Button bei Facebook bleibt; jetzt spammen die mir auch schon an meine Wall...</description>
         <author>Benjamin Schweizer</author>
         <guid isPermaLink="false">http://www.facebook.com/profile.php?id=813072776&amp;story_fbid=133613070001198</guid>
         <pubDate>Mon, 28 Jun 2010 19:54:21 +0000</pubDate>
      </item>
      <item>
         <title>Benjamin Und Yoyo gehen morgen an die Jagst. Wer kommt mit?</title>
         <link>http://www.facebook.com/profile.php?id=813072776&amp;story_fbid=138173456193989</link>
         <description>Und Yoyo gehen morgen an die Jagst. Wer kommt mit?</description>
         <author>Benjamin Schweizer</author>
         <guid isPermaLink="false">http://www.facebook.com/profile.php?id=813072776&amp;story_fbid=138173456193989</guid>
         <pubDate>Fri, 25 Jun 2010 19:18:54 +0000</pubDate>
      </item>
      <item>
         <title>Visions on Responsible Leadership</title>
         <link>http://www.flickr.com/photos/gopher/4692864519/</link>
         <description>&lt;img src=&quot;http://farm5.static.flickr.com/4055/4692864519_118ece2798_m.jpg&quot;/&gt;</description>
         <author>nobody@flickr.com (gopher23)</author>
         <guid isPermaLink="false">tag:flickr.com,2004:/photo/4692864519</guid>
         <pubDate>Sat, 12 Jun 2010 14:52:13 +0000</pubDate>
         <media:content width="240" url="http://farm5.static.flickr.com/4055/4692864519_118ece2798_m.jpg" type="image/jpeg" height="180"/>
         <media:title>Visions on Responsible Leadership</media:title>
         <media:thumbnail width="75" url="http://farm5.static.flickr.com/4055/4692864519_118ece2798_s.jpg" height="75"/>
         <media:category>moblog day faculty heilbronn untergruppenbach ggs stettenfels</media:category>
         <media:credit>gopher23</media:credit>
      </item>
      <item>
         <title>b_e_n_j_a_m_i_n: und yoyo gehen jetzt in den #trappensee #biergarten.</title>
         <link>http://twitter.com/b_e_n_j_a_m_i_n/statuses/15790179499</link>
         <description>b_e_n_j_a_m_i_n: und yoyo gehen jetzt in den #trappensee #biergarten.</description>
         <guid isPermaLink="false">http://twitter.com/b_e_n_j_a_m_i_n/statuses/15790179499</guid>
         <pubDate>Wed, 09 Jun 2010 17:08:37 +0000</pubDate>
      </item>
      <item>
         <title>b_e_n_j_a_m_i_n: b_e_n_j_a_m_i_n suche zwei #rockamring karten mit camping #rar #karten #ticket, selbstabholung zwischen stuttgart und eiffel noch heute</title>
         <link>http://twitter.com/b_e_n_j_a_m_i_n/statuses/15322969927</link>
         <description>b_e_n_j_a_m_i_n: b_e_n_j_a_m_i_n suche zwei #rockamring karten mit camping #rar #karten #ticket, selbstabholung zwischen stuttgart und eiffel noch heute</description>
         <guid isPermaLink="false">http://twitter.com/b_e_n_j_a_m_i_n/statuses/15322969927</guid>
         <pubDate>Thu, 03 Jun 2010 12:55:49 +0000</pubDate>
      </item>
      <item>
         <title>Benjamin und Freunde sind noch im Hartmans. Für später ist Grillen in Schwaigern angesagt. Hat noch jemand Lust zu kommen?</title>
         <link>http://www.facebook.com/profile.php?id=813072776&amp;story_fbid=119420471431458</link>
         <description>und Freunde sind noch im Hartmans. Für später ist Grillen in Schwaigern angesagt. Hat noch jemand Lust zu kommen?</description>
         <author>Benjamin Schweizer</author>
         <guid isPermaLink="false">http://www.facebook.com/profile.php?id=813072776&amp;story_fbid=119420471431458</guid>
         <pubDate>Sun, 23 May 2010 11:26:15 +0000</pubDate>
      </item>
      <item>
         <title>Benjamin und Yoyo gehen ins Hartmans zum Frühstücken.</title>
         <link>http://www.facebook.com/profile.php?id=813072776&amp;story_fbid=124248934266397</link>
         <description>und Yoyo gehen ins Hartmans zum Frühstücken.</description>
         <author>Benjamin Schweizer</author>
         <guid isPermaLink="false">http://www.facebook.com/profile.php?id=813072776&amp;story_fbid=124248934266397</guid>
         <pubDate>Sun, 23 May 2010 09:38:09 +0000</pubDate>
      </item>
      <item>
         <title>gopher started following f0i</title>
         <link>http://github.com/f0i</link>
         <description>&lt;div class=&quot;details&quot;&gt;&lt;div class=&quot;message&quot;&gt;f0i has 0 public repos and 6 followers. &lt;/div&gt;
&lt;/div&gt;</description>
         <author>gopher</author>
         <guid isPermaLink="false">tag:github.com,2008:FollowEvent/210088586</guid>
         <pubDate>Fri, 21 May 2010 02:45:39 +0000</pubDate>
         <media:thumbnail width="30" url="http://www.gravatar.com/avatar/8e5e2f87387730f9b1e73a6e30f7d520?s=30&amp;amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-140.png" height="30"/>
      </item>
      <item>
         <title>b_e_n_j_a_m_i_n: @joerchb meins sollte morgen da sein :-) #desire</title>
         <link>http://twitter.com/b_e_n_j_a_m_i_n/statuses/14411427925</link>
         <description>b_e_n_j_a_m_i_n: @joerchb meins sollte morgen da sein :-) #desire</description>
         <guid isPermaLink="false">http://twitter.com/b_e_n_j_a_m_i_n/statuses/14411427925</guid>
         <pubDate>Fri, 21 May 2010 06:25:29 +0000</pubDate>
      </item>
      <item>
         <title>b_e_n_j_a_m_i_n: is looking for contributors for the #Python #ImageMagick bindings (python-magickwand), see http://301.sickos.org/ae057726</title>
         <link>http://twitter.com/b_e_n_j_a_m_i_n/statuses/14350468717</link>
         <description>b_e_n_j_a_m_i_n: is looking for contributors for the #Python #ImageMagick bindings (python-magickwand), see http://301.sickos.org/ae057726</description>
         <guid isPermaLink="false">http://twitter.com/b_e_n_j_a_m_i_n/statuses/14350468717</guid>
         <pubDate>Thu, 20 May 2010 09:25:33 +0000</pubDate>
      </item>
      <item>
         <title>b_e_n_j_a_m_i_n: geht heute zum #cthn treffen; cthn.de</title>
         <link>http://twitter.com/b_e_n_j_a_m_i_n/statuses/14214424732</link>
         <description>b_e_n_j_a_m_i_n: geht heute zum #cthn treffen; cthn.de</description>
         <guid isPermaLink="false">http://twitter.com/b_e_n_j_a_m_i_n/statuses/14214424732</guid>
         <pubDate>Tue, 18 May 2010 07:53:46 +0000</pubDate>
      </item>
      <item>
         <title>b_e_n_j_a_m_i_n: RT @insblog: #Denic DNS Problem seit 13:30 Uhr. Diverse .DE Zonen/Domains können nicht mehr aufgelöst werden. #epic #fail #dns #gau</title>
         <link>http://twitter.com/b_e_n_j_a_m_i_n/statuses/13847386535</link>
         <description>b_e_n_j_a_m_i_n: RT @insblog: #Denic DNS Problem seit 13:30 Uhr. Diverse .DE Zonen/Domains können nicht mehr aufgelöst werden. #epic #fail #dns #gau</description>
         <guid isPermaLink="false">http://twitter.com/b_e_n_j_a_m_i_n/statuses/13847386535</guid>
         <pubDate>Wed, 12 May 2010 12:09:56 +0000</pubDate>
      </item>
      <item>
         <title>Someone Parking</title>
         <link>http://www.flickr.com/photos/gopher/4548246705/</link>
         <description>&lt;img src=&quot;http://farm3.static.flickr.com/2464/4548246705_7fac0349a0_m.jpg&quot;/&gt;</description>
         <author>nobody@flickr.com (gopher23)</author>
         <guid isPermaLink="false">tag:flickr.com,2004:/photo/4548246705</guid>
         <pubDate>Sat, 24 Apr 2010 18:57:02 +0000</pubDate>
         <media:content width="240" url="http://farm3.static.flickr.com/2464/4548246705_7fac0349a0_m.jpg" type="image/jpeg" height="180"/>
         <media:title>Someone Parking</media:title>
         <media:thumbnail width="75" url="http://farm3.static.flickr.com/2464/4548246705_7fac0349a0_s.jpg" height="75"/>
         <media:category>moblog parking</media:category>
         <media:credit>gopher23</media:credit>
      </item>
      <item>
         <title>b_e_n_j_a_m_i_n: updated sources for the combined news for my website, see http://benjamin-schweizer.de/yahoo-pipes.html</title>
         <link>http://twitter.com/b_e_n_j_a_m_i_n/statuses/12575532917</link>
         <description>b_e_n_j_a_m_i_n: updated sources for the combined news for my website, see http://benjamin-schweizer.de/yahoo-pipes.html</description>
         <guid isPermaLink="false">http://twitter.com/b_e_n_j_a_m_i_n/statuses/12575532917</guid>
         <pubDate>Wed, 21 Apr 2010 13:15:10 +0000</pubDate>
      </item>
      <item>
         <title>gopher started watching hg-git/hg-git.github.com</title>
         <link>http://github.com/hg-git/hg-git.github.com</link>
         <description>&lt;div class=&quot;details&quot;&gt;&lt;div class=&quot;message&quot;&gt;hg-git.github.com's description: &lt;blockquote&gt; The official Hg-Git Mercurial plugin homepage &lt;/blockquote&gt; &lt;/div&gt;
&lt;/div&gt;</description>
         <author>gopher</author>
         <guid isPermaLink="false">tag:github.com,2008:WatchEvent/188958709</guid>
         <pubDate>Wed, 21 Apr 2010 05:39:01 +0000</pubDate>
         <media:thumbnail width="30" url="http://www.gravatar.com/avatar/8e5e2f87387730f9b1e73a6e30f7d520?s=30&amp;amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-140.png" height="30"/>
      </item>
      <item>
         <title>gopher opened issue 2 on hg-git/hg-git.github.com</title>
         <link>http://github.com/hg-git/hg-git.github.com/issues/2/find</link>
         <description>&lt;div class=&quot;details&quot;&gt;&lt;div class=&quot;message&quot;&gt;&lt;blockquote&gt;KeyError on /some/ github repos &lt;/blockquote&gt; &lt;/div&gt;
&lt;/div&gt;</description>
         <author>gopher</author>
         <guid isPermaLink="false">tag:github.com,2008:IssuesEvent/188958550</guid>
         <pubDate>Wed, 21 Apr 2010 05:37:56 +0000</pubDate>
         <media:thumbnail width="30" url="http://www.gravatar.com/avatar/8e5e2f87387730f9b1e73a6e30f7d520?s=30&amp;amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-140.png" height="30"/>
      </item>
      <item>
         <title>gopher started watching ydkn/raki</title>
         <link>http://github.com/ydkn/raki</link>
         <description>&lt;div class=&quot;details&quot;&gt;&lt;div class=&quot;message&quot;&gt;raki's description: &lt;blockquote&gt; Wiki written in Rails &lt;/blockquote&gt; &lt;/div&gt;
&lt;/div&gt;</description>
         <author>gopher</author>
         <guid isPermaLink="false">tag:github.com,2008:WatchEvent/188460814</guid>
         <pubDate>Tue, 20 Apr 2010 12:49:45 +0000</pubDate>
         <media:thumbnail width="30" url="http://www.gravatar.com/avatar/8e5e2f87387730f9b1e73a6e30f7d520?s=30&amp;amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-140.png" height="30"/>
      </item>
      <item>
         <title>Unix Terminals: Surviving the Encoding Hell</title>
         <link>http://benjamin-schweizer.de/unix-terminals-surviving-the-encoding-hell.html</link>
         <description>Every now and then, I see people using misconfigured text terminals. People show up in chatrooms and post gibberish or they leave broken umlauts in text, html and source files. This is mostly the case because they (or you) have a broken terminal configuration. In this post, I will try to explain how terminal encodings [...]</description>
         <guid isPermaLink="false">http://benjamin-schweizer.de/?p=255</guid>
         <pubDate>Thu, 15 Apr 2010 14:08:19 +0000</pubDate>
         <content:encoded><![CDATA[<p>Every now and then, I see people using misconfigured text terminals. People show up in chatrooms and post gibberish or they leave broken umlauts in text, html and source files. This is mostly the case because they (or you) have a broken terminal configuration. In this post, I will try to explain how terminal encodings work and how you can fix things.</p>
<p>Generally spoken, things break if you are using a different terminal encoding than your peers. When you enter text like umlauts and other international characters, it gets encoded using your local terminal encoding (something like latin1, utf-8 or cp850). If a different encoding is used to display this data, you are likely to see gibberish and other strange effects in your terminal. Thus, we need to define what encoding we want to use for a specific file, a chatroom or on a system-wide level. A good guess would be utf8 nowadays, but us-ascii/ascii7 is also pretty common.</p>
<p>First, let&#8217;s find out our actual terminal encoding. Just enter some umlauts like &#8220;äöü&#8221; and show the binary representation in hexadecimal:</p>
<pre>$ printf "äöü" | xxd
0000000: c3a4 c3b6 c3bc ......
</pre>
<p>In this example, we find &#8220;c3a4 c3b6 c3bc&#8221; which indicates that the umlauts got encoded into utf8. Other possible results would be &#8220;e4 f6 fc&#8221; for win1252 or &#8220;84 94 81&#8243; for cp850. You can lookup <a rel="nofollow" target="_blank" href="http://benjamin-schweizer.de/files/umlauts/umlauts.bin">some more encodings here</a>. (Of course, you can also check the manual for your terminal emulator).</p>
<p>Now that we know our actual terminal encoding, we need to tell this to the system libraries and other console software. This is done using <a rel="nofollow" target="_blank" href="http://linux.die.net/man/5/locale">locale(5)</a>, a standard that is used by almost any program that is capable of doing character encoding and not just passes dumb binary data. To do so, you can list all available encodings by running &#8220;locale -a&#8221; and pick an appropriate one:</p>
<pre>$ locale -a
C
de_DE.utf8
en_US.utf8
POSIX</pre>
<p>This list contains entries in the format location_language.encoding; additional locales can be created using tools like locale-gen(1). I use &#8220;en_US.utf-8 hence my terminal uses utf8 and I prefer English program output. This locale string should be set as $LC_ALL as environment variable (or LC_CTYPE if you want to ignore the language and location). Some terminals do this automatically, but we can also do this in our ~/.profile file which is sourced whenever a new terminal is started. For compatibility with older software, we also set $LANG to the same value:</p>
<pre>export LC_ALL=en_US.utf-8
export LANG="$LC_ALL"</pre>
<p>You can check the result in a new terminal by typing &#8220;locale&#8221;; if you see &#8220;C&#8221; instead of your locale string, something went wrong and the locales felt back to the default settings. Check that your locale string is in the list. When everything looks ok, you should see the utf8 line in my <a rel="nofollow" target="_blank" href="http://benjamin-schweizer.de/files/umlauts/umlauts.bin">umlauts test file</a> (just type &#8220;cat umlauts.bin&#8221;).</p>
<p>Now that we have checked the local terminal settings, we should do the same for hosts where we ssh into. Luckily, ssh can forward our locales settings, just append &#8220;SendEnv LANG LC_ALL&#8221; to ~/.ssh/config and check that your locale is also available on the remote host. Voila, you have a properly working terminal with defined locales.</p>
<p>If you still see malformed characters, it is likely that you use software that does not know about locales at all and just passes raw data. In theory, such software should fall back to us-ascii/ascii7 and strip or replace all other characters. If this fails, you can either use another program or you are forced to use a terminal program with the same binary encoding (or avoid umlauts if you are on IRC;-).</p>]]></content:encoded>
      </item>
      <item>
         <title>gopher started following ydkn</title>
         <link>http://github.com/ydkn</link>
         <description>&lt;div class=&quot;details&quot;&gt;&lt;div class=&quot;message&quot;&gt;ydkn has 2 public repos and 6 followers. &lt;/div&gt;
&lt;/div&gt;</description>
         <author>gopher</author>
         <guid isPermaLink="false">tag:github.com,2008:FollowEvent/184280266</guid>
         <pubDate>Wed, 14 Apr 2010 05:34:48 +0000</pubDate>
         <media:thumbnail width="30" url="http://www.gravatar.com/avatar/8e5e2f87387730f9b1e73a6e30f7d520?s=30&amp;amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-140.png" height="30"/>
      </item>
      <item>
         <title>gopher started following mezzomix</title>
         <link>http://github.com/mezzomix</link>
         <description>&lt;div class=&quot;details&quot;&gt;&lt;div class=&quot;message&quot;&gt;mezzomix has 0 public repos and 7 followers. &lt;/div&gt;
&lt;/div&gt;</description>
         <author>gopher</author>
         <guid isPermaLink="false">tag:github.com,2008:FollowEvent/177076317</guid>
         <pubDate>Sun, 04 Apr 2010 04:00:44 +0000</pubDate>
         <media:thumbnail width="30" url="http://www.gravatar.com/avatar/8e5e2f87387730f9b1e73a6e30f7d520?s=30&amp;amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-140.png" height="30"/>
      </item>
      <item>
         <title>gopher started following k-b</title>
         <link>http://github.com/k-b</link>
         <description>&lt;div class=&quot;details&quot;&gt;&lt;div class=&quot;message&quot;&gt;k-b has 9 public repos and 8 followers. &lt;/div&gt;
&lt;/div&gt;</description>
         <author>gopher</author>
         <guid isPermaLink="false">tag:github.com,2008:FollowEvent/175498831</guid>
         <pubDate>Thu, 01 Apr 2010 14:13:00 +0000</pubDate>
         <media:thumbnail width="30" url="http://www.gravatar.com/avatar/8e5e2f87387730f9b1e73a6e30f7d520?s=30&amp;amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-140.png" height="30"/>
      </item>
      <item>
         <title>gopher started following nougad</title>
         <link>http://github.com/nougad</link>
         <description>&lt;div class=&quot;details&quot;&gt;&lt;div class=&quot;message&quot;&gt;nougad has 6 public repos and 7 followers. &lt;/div&gt;
&lt;/div&gt;</description>
         <author>gopher</author>
         <guid isPermaLink="false">tag:github.com,2008:FollowEvent/175498297</guid>
         <pubDate>Thu, 01 Apr 2010 14:12:09 +0000</pubDate>
         <media:thumbnail width="30" url="http://www.gravatar.com/avatar/8e5e2f87387730f9b1e73a6e30f7d520?s=30&amp;amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-140.png" height="30"/>
      </item>
      <item>
         <title>gopher started following aaronmueller</title>
         <link>http://github.com/aaronmueller</link>
         <description>&lt;div class=&quot;details&quot;&gt;&lt;div class=&quot;message&quot;&gt;aaronmueller has 6 public repos and 10 followers. &lt;/div&gt;
&lt;/div&gt;</description>
         <author>gopher</author>
         <guid isPermaLink="false">tag:github.com,2008:FollowEvent/175498292</guid>
         <pubDate>Thu, 01 Apr 2010 14:12:08 +0000</pubDate>
         <media:thumbnail width="30" url="http://www.gravatar.com/avatar/8e5e2f87387730f9b1e73a6e30f7d520?s=30&amp;amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-140.png" height="30"/>
      </item>
      <item>
         <title>gopher started following TabTwo</title>
         <link>http://github.com/TabTwo</link>
         <description>&lt;div class=&quot;details&quot;&gt;&lt;div class=&quot;message&quot;&gt;TabTwo has 3 public repos and 6 followers. &lt;/div&gt;
&lt;/div&gt;</description>
         <author>gopher</author>
         <guid isPermaLink="false">tag:github.com,2008:FollowEvent/175498281</guid>
         <pubDate>Thu, 01 Apr 2010 14:12:05 +0000</pubDate>
         <media:thumbnail width="30" url="http://www.gravatar.com/avatar/8e5e2f87387730f9b1e73a6e30f7d520?s=30&amp;amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-140.png" height="30"/>
      </item>
      <item>
         <title>gopher pushed to trunk at gopher/pg8000</title>
         <link>http://github.com/gopher/pg8000/compare/4532efd85d...eb048b5bc5</link>
         <description>&lt;div class=&quot;details&quot;&gt;&lt;div class=&quot;commits&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;&lt;span class='committer'&gt;Benjamin Schweizer&lt;/span&gt;&lt;/strong&gt; committed &lt;code&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://github.com/gopher/pg8000/commit/eb048b5bc595cf7e3dc0c9227bcb54b8a866897c&quot;&gt;eb048b5&lt;/a&gt;&lt;/code&gt; &lt;div class=&quot;message&quot;&gt; &lt;blockquote&gt;fixed handling of server-side defined encodings (SQL_ASCII bug)&lt;/blockquote&gt; &lt;/div&gt; &lt;/li&gt; &lt;/ul&gt; &lt;/div&gt; &lt;/div&gt;</description>
         <author>gopher</author>
         <guid isPermaLink="false">tag:github.com,2008:PushEvent/175131361</guid>
         <pubDate>Thu, 01 Apr 2010 03:25:22 +0000</pubDate>
         <media:thumbnail width="30" url="http://www.gravatar.com/avatar/8e5e2f87387730f9b1e73a6e30f7d520?s=30&amp;amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-140.png" height="30"/>
      </item>
      <item>
         <title>gopher forked mfenniak/pg8000</title>
         <link>http://github.com/gopher/pg8000/</link>
         <description>&lt;div class=&quot;details&quot;&gt;&lt;div class=&quot;message&quot;&gt;Forked repository is at &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://github.com/gopher/pg8000&quot;&gt;gopher/pg8000&lt;/a&gt; &lt;/div&gt;
&lt;/div&gt;</description>
         <author>gopher</author>
         <guid isPermaLink="false">tag:github.com,2008:ForkEvent/175130638</guid>
         <pubDate>Thu, 01 Apr 2010 03:20:49 +0000</pubDate>
         <media:thumbnail width="30" url="http://www.gravatar.com/avatar/8e5e2f87387730f9b1e73a6e30f7d520?s=30&amp;amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-140.png" height="30"/>
      </item>
      <item>
         <title>More Fun with the Python Class Dispatcher</title>
         <link>http://benjamin-schweizer.de/more-fun-with-the-python-class-dispatcher.html</link>
         <description>In a recent post, I have demonstrated how to do prototype-style method injection in Python. Today, I&amp;#8217;ll show how you can have even more fun with the class dispatcher by changing the base class of an object during run-time. But first, let me illustrate a real-world problem where this proposed solution becomes handy&amp;#8230; Like many [...]</description>
         <guid isPermaLink="false">http://benjamin-schweizer.de/?p=224</guid>
         <pubDate>Fri, 26 Mar 2010 13:15:39 +0000</pubDate>
         <content:encoded><![CDATA[<p>In a recent post, I have demonstrated how to do <a rel="nofollow" target="_blank" href="http://benjamin-schweizer.de/fun-with-the-python-class-dispatcher.html">prototype-style method injection in Python</a>. Today, I&#8217;ll show how you can have even more fun with the class dispatcher by changing the base class of an object during run-time. But first, let me illustrate a real-world problem where this proposed solution becomes handy&#8230;</p>
<p>Like many others, I&#8217;ve jumped the distributed computing hype and spent a lot of time with nosql databases (I prefer <a rel="nofollow" target="_blank" href="http://www.mongodb.org/">Mongo</a>). Due to the document-based storage model, the actual document type is stored inside a given document. In example, imagine you have something like {&#8216;type&#8217;: &#8216;post&#8217;, &#8216;id&#8217;: 23, &#8230;} stored inside a collection, say it represents a blog post. When you load an object from the database, you cannot decide what type it is unless you have retrieved it from the database. If you want to represent the retrieved data as an object, you have to add a loader that fetches the raw data and decides what type of object it should create. So, it is likely that you end up with an interface like this:</p>
<pre>db = DB()
post = Post()
id = db.save(post)
same_post = db.get(id)
db.delete(id)
</pre>
<p>This is fairly ok, but you&#8217;ll end up splitting the interface into a db object and a post object. The db object appears reasonable because it can load the raw data and create objects of different types like Post or Comment, depending on the type variable. This is ok, but I think we can do better. Imagine an interface like this:</p>
<pre>post = Post()
id = post.save()
same_post = Post(id)
same_post.delete()
</pre>
<p>It feels more intuitive and reflects the way you would describe the actual task. You could have the database code in the same object (or a parent of it) and make things more explicit. Though, if you cannot determine the object type before you fetch it from the database, you cannot decide what type of object to create. So, if you invoke the constructor of a post object, but you find the actual type to be &#8220;comment&#8221;, how can you change the base class now? Like this:</p>
<pre>class Generic: def __init__(self, class_name=None): if not class_name: return classes = globals() if not class_name in classes: raise Exception("%s not found in global scope" % class_name) _class = classes[class_name] if not type(_class) == type(self.__class__): raise Exception("%s is not a class" % class_name) self.__class__ = _class class Specialized(Generic): pass c = Generic("Specialized")
print c # prints &lt;Specialized&gt;</pre>
<p>In this example,we run the constructor of class Generic and dependent on some contextual data (class_name here), we change the base class of our object after instantiation. What we get is an object of class Specialized even though we invoked the constructor of Generic. This methodology can easily be applied to our blog example, making the interface much cleaner and more expressive.</p>]]></content:encoded>
      </item>
      <item>
         <title>Samsung LED TV: The Good, The Bad, The Ugly</title>
         <link>http://benjamin-schweizer.de/samsung-led-tv-the-good-the-bad-the-ugly.html</link>
         <description>Recently, we&amp;#8217;ve bought a shiny new Samsung LED TV. It&amp;#8217;s a Series 6 model with a large screen and an integrated DVB-C decoder. The TV set is pretty fine, it runs a Linux-based firmware and has an integrated media player. After reading the tech specs, I&amp;#8217;ve found out about the differences of Series 6 and [...]</description>
         <guid isPermaLink="false">http://benjamin-schweizer.de/?p=203</guid>
         <pubDate>Wed, 24 Mar 2010 15:09:07 +0000</pubDate>
         <content:encoded><![CDATA[<p>Recently, we&#8217;ve bought a shiny new Samsung LED TV. It&#8217;s a Series 6 model with a large screen and an integrated DVB-C decoder. The TV set is pretty fine, it runs <a rel="nofollow" target="_blank" href="http://downloadcenter.samsung.com/content/UM/200910/20091012160308796/GNU_license-1113.pdf">a Linux-based firmware</a> and has an integrated media player.</p>
<p>After reading the tech specs, I&#8217;ve found out about the differences of Series 6 and Series 7 models and started worrying. The hardware is almost the same: Series 7 models have a CI+ interface and an additional USB port but this is not important for me. Both TV sets run the same firmware, but on Series 6 models, the integrated media player does not play movies. Hence the hardware is nearly the same, this limitation has no technical reasons.</p>
<p>So, I&#8217;ve investigated further&#8230; A friend suggested that we could patch the firmware and enable the movie playback there. I&#8217;ve contacted Samsung and requested a copy of the GPL-licensed source code. Though, their customer support never responded to my request. After this, I started to tinker with the firmware binary files, but I had to find that they are encrypted and digitally signed (using OpenSSL, lol).</p>
<p>This means, even if you get Samsung to hand over the source code, they won&#8217;t allow you to use it in the sense of correcting bugs on your own television. Bad karma; this is clearly not the will of the original software authors.</p>
<p style="text-align:center;"><img class="aligncenter" src="http://farm3.static.flickr.com/2640/4112072507_419f2bb68e.jpg" alt=""/></p>
<p>In spite of everything, there&#8217;s yet a simple solution &#8211; at least for the media player issue. The firmware holds <a rel="nofollow" target="_blank" href="http://www.flickr.com/photos/nk-h/4102072907/">a hidden service menu</a> that can be entered by pressing INFO-MENU-MUTE-POWER when the TV is in standby. From there, I was able to change the model number to a Series 7 model and reach the fully-featured media player (see <a rel="nofollow" target="_blank" href="http://www.smovs.dk/htpc/index.php?note=16&amp;subject=Samsung%20UE32B6050%20(6000%20series%20LED%20TV)%20movie%20mode">here</a>).</p>]]></content:encoded>
      </item>
      <item>
         <title>Designs, Lessons and Advice from Building Large Distributed Systems (pdf)</title>
         <link>http://www.cs.cornell.edu/projects/ladis2009/talks/dean-keynote-ladis2009.pdf</link>
         <description>As part of implementing the many products and services offered by Google, we have built a collection of systems and tools that simplify the storing and processing of large-scale data sets, and the construction of heavily-used public services based on these data sets. These systems are intended to work well in Google's computational environment, which consists of large numbers of commodity machines connected by commodity networking hardware. Our systems handle issues like storage reliability and availability in the face of machine failures, and our processing tools make it relatively easy to write robust computations that run reliably and efficiently on thousands of machines. In this talk I'll highlight some of the systems we have built, and discuss some challenges and future directions for new systems.</description>
         <guid isPermaLink="false"></guid>
         <pubDate>Mon, 08 Feb 2010 22:27:28 +0000</pubDate>
      </item>
      <item>
         <title>Panopticlick</title>
         <link>http://panopticlick.eff.org/</link>
         <description>Is your browser configuration rare or unique? If so, web sites may be able to track you, even if you limit or disable cookies.</description>
         <guid isPermaLink="false"></guid>
         <pubDate>Fri, 29 Jan 2010 20:38:56 +0000</pubDate>
      </item>
      <item>
         <title>Improved Python Traceback Module</title>
         <link>http://benjamin-schweizer.de/improved-python-traceback-module.html</link>
         <description>Like any modern language, Python comes along with a nice traceback module. This module gives you stack traces from the line of code where an exception is raised up to the next try-except clause. So, you can easily catch exceptions and write stack traces into a debug log. This debugging technique is pretty handy to [...]</description>
         <guid isPermaLink="false">http://benjamin-schweizer.de/?p=188</guid>
         <pubDate>Wed, 27 Jan 2010 21:39:50 +0000</pubDate>
         <content:encoded><![CDATA[<p>Like any modern language, Python comes along with a nice <a rel="nofollow" target="_blank" href="http://docs.python.org/library/traceback.html">traceback module</a>. This module gives you stack traces from the line of code where an exception is raised up to the next try-except clause. So, you can easily catch exceptions and write stack traces into a debug log. This debugging technique is pretty handy to drill down bugs and I use it a lot in prototyping.</p>
<p>Using the traceback module is straight forward for evident programming mistakes. However, real bugs are context-sensitive and they can hardly be reproduced without the actual data that was processed when an exception was raised. If you can reproduce a specific bug, you can add some logging code in front and inspect the variables the next time the bug is triggered. But if a bug occurs once in a blue moon, you&#8217;d be better in logging the data the first time an exception raises.</p>
<pre>import traceback def erroneous_function(): ham = u"unicode string with umlauts äöü." eggs = "binary string with umlauts äöü." i = 23 if i&gt;5: raise Exception("it's true!") try: erroneous_function()
except: print traceback.format_exc(with_vars=True)</pre>
<p>Here&#8217;s my solution; an improved Python traceback module the logs variables from the local scope next to the affected code. You can find a working copy in our Mercirual repository (see the below).</p>
<pre>Traceback (most recent call last): File "test.py", line 16, in &lt;module&gt; Local variables: erroneous_function = &lt;function erroneous_function at 0x7ff6d82b... __builtins__ = &lt;module '__builtin__' (built-in)&gt; __file__ = "test.py" traceback = &lt;module 'traceback' from '/srv/www/vhosts/dev.teamr... __name__ = "__main__" __doc__ = None erroneous_function() File "test.py", line 13, in erroneous_function Local variables: i = 23 eggs = "binary string with umlauts &#92;xc3&#92;xa4&#92;xc3&#92;xb6&#92;xc3&#92;xbc." ham = u"unicode string with umlauts ???." raise Exception("it's true!")
Exception: it's true!</pre>
<p>I am not sure if it is the &#8220;right&#8221; solution as sensitive information might be logged. This might have security implications for some real-world scenarios where webapps report stack traces to the end user (e.g. by using cgitb in production).</p>
<p>Credit: this code was inspired by <a rel="nofollow" target="_blank" href="http://code.activestate.com/recipes/52215/">format_exc_plus</a> by Bryn Keller.</p>
<p>2010-01-28: there&#8217;s an active discussion on <a rel="nofollow" target="_blank" href="http://thread.gmane.org/gmane.comp.python.devel/110326">python-dev</a>.</p>
<p>→ <a rel="nofollow" target="_blank" href="http://hg.sickos.org/python-traceback/archive/tip.tar.bz2">get latest source code</a><br />
→ <a rel="nofollow" target="_blank" href="http://hg.sickos.org/python-traceback/">visit mercurial repository</a></p>]]></content:encoded>
      </item>
      <item>
         <title>b_e_n_j_a_m_i_n: @TabTwo signiere den neuen mit dem alten und revoke ihn nicht sofort #pgp</title>
         <link>http://twitter.com/b_e_n_j_a_m_i_n/statuses/7824397659</link>
         <description>b_e_n_j_a_m_i_n: @TabTwo signiere den neuen mit dem alten und revoke ihn nicht sofort #pgp</description>
         <guid isPermaLink="false">http://twitter.com/b_e_n_j_a_m_i_n/statuses/7824397659</guid>
         <pubDate>Sat, 16 Jan 2010 11:59:53 +0000</pubDate>
      </item>
      <item>
         <title>Adding a Custom LDAP Schema to Open Directory on 10.5+</title>
         <link>http://benjamin-schweizer.de/adding-a-custom-ldap-schema-to-open-directory.html</link>
         <description>Open Directory is a key component of Mac OS X Server. It consists of OpenLDAP, MIT Kerberos, Password Server and a tool chain that enables GUI administration. Sadly, adding new ldap schemas to the directory server is not documented in the advanced administration guides and you have to tinker with the command line tools. I [...]</description>
         <guid isPermaLink="false">http://benjamin-schweizer.de/?p=183</guid>
         <pubDate>Fri, 15 Jan 2010 09:55:10 +0000</pubDate>
         <content:encoded><![CDATA[<p>Open Directory is a key component of Mac OS X Server. It consists of OpenLDAP, MIT Kerberos, Password Server and a tool chain that enables GUI administration. Sadly, adding new ldap schemas to the directory server is not documented in the <a rel="nofollow" target="_blank" href="http://www.apple.com/server/macosx/resources/documentation.html">advanced administration guides</a> and you have to tinker with the command line tools. I could not find any good documentation how you to add a custom LDAP schema, so I&#8217;ll show my solution here.</p>
<p>Mac OS X Server 10.5 ships with OpenLDAP 2.3. This release supports run-time configuration, which means that the LDAP schemas are stored within the directory server and you cannot simply put your new schema file in /etc/openldap/schema/; you have to convert it to an LDIF file and load this into the directory itself. This can be done during run-time but it breaks replication if you do so. So, instead you have to create a proper old-style config and run a manual conversion to the new run-time config.</p>
<p>To do so, you need to place the new schema file in /etc/openldap/schema/some-new.schema. This directory is copied to new replicas when you join them, so you won&#8217;t break the Apple tool chain. Then, you need to include the new schema file from /etc/openldap/slapd.conf; this has no direct effect but slaptest(1) uses this to re-create the run-time config. Finally, convert the old-style config to a new <a rel="nofollow" target="_blank" href="http://www.zytrax.com/books/ldap/ch6/slapd-config.html">run-time config using slaptest(1)</a> like &#8220;slaptest -f slapd.conf -F slapd.d&#8221; and restart slapd:</p>
<pre>cd /etc/openldap
cp some-new.schema schema/
cat &gt;&gt; slapd.conf &lt;&lt;HERE
include /etc/openldap/schema/some-new.schema
HERE
mv slapd.d slapd.d_bak
slaptest -f slapd.conf -F slapd.d
launchctl unload /System/Library/LaunchDaemons/org.openldap.slapd.plist
launchctl load /System/Library/LaunchDaemons/org.openldap.slapd.plist
</pre>
<p><strong>Beware</strong>: we are deleting the old run-time config here and create a new one from the static config. If you have changed the config without adopting the old-style config, you might loose modifications. So, check twice if all required schemas are included from slapd.conf. AFAIK, Kerio Mailserver is troublesome here as it is not adding the include lines to slapd.conf. Though, thise procedure is exactly what the Apple tool chain does on replication and I suggest you do it exactly this way. Good luck!</p>]]></content:encoded>
      </item>
      <item>
         <title>Eight Questions on Twitter</title>
         <link>http://benjamin-schweizer.de/eight-questions-on-twitter.html</link>
         <description>Why&amp;#8230; is it too slow for real-time communications (that is available on IRC since 1988)? can&amp;#8217;t #hashtags contain unicode? is there a length limit for my nickname? can&amp;#8217;t I sign on from multiple computers simultanously? does their web page no auto-refresh? is it always over capacity? didn&amp;#8217;t they register appropriate country TLDs like .de? have [...]</description>
         <guid isPermaLink="false">http://benjamin-schweizer.de/?p=158</guid>
         <pubDate>Thu, 07 Jan 2010 21:54:15 +0000</pubDate>
         <content:encoded><![CDATA[<p>Why&#8230;</p>
<ol>
<li>is it too slow for real-time communications (that is available on IRC since 1988)?</li>
<li>can&#8217;t #hashtags contain unicode?</li>
<li>is there a length limit for my nickname?</li>
<li>can&#8217;t I sign on from multiple computers simultanously?</li>
<li>does their web page no auto-refresh?</li>
<li>is it always over capacity?</li>
<li>didn&#8217;t they register appropriate country TLDs like .de?</li>
<li>have they shut down their Jabber interface?</li>
</ol>
<ol></ol>]]></content:encoded>
      </item>
      <item>
         <title>b_e_n_j_a_m_i_n: @BERT82 ich würde sagen wir machen mal eine Liste: http://etherpad.com/HxrpugbYkq #c3fixme</title>
         <link>http://twitter.com/b_e_n_j_a_m_i_n/statuses/7122178618</link>
         <description>b_e_n_j_a_m_i_n: @BERT82 ich würde sagen wir machen mal eine Liste: http://etherpad.com/HxrpugbYkq #c3fixme</description>
         <guid isPermaLink="false">http://twitter.com/b_e_n_j_a_m_i_n/statuses/7122178618</guid>
         <pubDate>Mon, 28 Dec 2009 13:12:55 +0000</pubDate>
      </item>
      <item>
         <title>b_e_n_j_a_m_i_n: ich werde so langsam hungrig, hat jemand Lust Pizza zu bestellen? #c3fixme</title>
         <link>http://twitter.com/b_e_n_j_a_m_i_n/statuses/7122005118</link>
         <description>b_e_n_j_a_m_i_n: ich werde so langsam hungrig, hat jemand Lust Pizza zu bestellen? #c3fixme</description>
         <guid isPermaLink="false">http://twitter.com/b_e_n_j_a_m_i_n/statuses/7122005118</guid>
         <pubDate>Mon, 28 Dec 2009 13:04:09 +0000</pubDate>
      </item>
      <item>
         <title>Dragons Everywhere!</title>
         <link>http://benjamin-schweizer.de/dragons-everywhere.html</link>
         <description>It&amp;#8217;s late December and like every year, hackers from accross Europe come together for the Chaos Communication Congress. The congress &amp;#8220;is the annual four-day conference organized by the Chaos Computer Club (CCC). It takes place at the bcc Berliner Congress Center in Berlin, Germany. The Congress offers lectures and workshops on a multitude of topics [...]</description>
         <guid isPermaLink="false">http://benjamin-schweizer.de/?p=85</guid>
         <pubDate>Sun, 27 Dec 2009 18:12:36 +0000</pubDate>
         <content:encoded><![CDATA[<p><img class="alignleft" title="26c3" src="http://benjamin-schweizer.de/files/blog/conference-128x128.png" alt="" width="128" height="128"/>It&#8217;s late December and like every year, hackers from accross Europe come together for the <a rel="nofollow" target="_blank" href="http://events.ccc.de/congress/2009/wiki/Welcome">Chaos Communication Congress</a>. The congress &#8220;is the annual four-day conference organized by the Chaos Computer Club (CCC). It takes place at the bcc Berliner Congress Center in Berlin, Germany. The Congress offers lectures and workshops on a multitude of topics and attracts a diverse audience of thousands of hackers, scientists, artists, and utopians from all around the world.&#8221;</p>
<p>What&#8217;s new this year: there are some <a rel="nofollow" target="_blank" href="http://events.ccc.de/congress/2009/wiki/index.php/Dragons_everywhere">off-site hackcenters</a> where people join the congress without being there in-real-life. &#8220;those unable to attend the Congress in Berlin [are invited] to celebrate their own Hack Center Experience, watch the streams, participate via twitter or chats, drink Tschunk, cook and have a good time.&#8221; This is exactly what some of us are going to do: <a rel="nofollow" target="_blank" href="http://sickos.org">we</a> will meet at the <a rel="nofollow" target="_blank" href="https://wiki.uugrn.org/UUGRN:Dragons_everywhere">UUGRN hackerspace</a> on Monday and join the congress events.</p>]]></content:encoded>
      </item>
      <item>
         <title>Negative Caching in Python httplib2</title>
         <link>http://code.google.com/p/httplib2/issues/detail?id=83</link>
         <description>I think it's not standards conform, but sometimes it is desireable to cache remote errors like 404 etc. Below is a runtime patch that wraps _entry_disposition() so that it uses the Cache-Control header also for errnous responses.</description>
         <guid isPermaLink="false"></guid>
         <pubDate>Wed, 23 Dec 2009 11:50:28 +0000</pubDate>
      </item>
      <item>
         <title>KVM and libvirt best practices</title>
         <link>http://dag.wieers.com/blog/kvm-and-libvirt-best-practices#comment-3758</link>
         <description>Dag is &quot;disappointed about the lack of best practices and standardization regarding KVM on GFS clustering. [...] Have you been setting up libvirt environments, share your best practices here ! If you found interesting links to information, let us know too. Let's fill this void.&quot;</description>
         <guid isPermaLink="false"></guid>
         <pubDate>Thu, 17 Dec 2009 12:58:52 +0000</pubDate>
      </item>
      <item>
         <title>Implementing Thread-safe Tree Structures in MongoDB</title>
         <link>http://groups.google.com/group/mongodb-user/browse_thread/thread/8ffe9065612e0c0e</link>
         <description>Using MongoDB to implement tree structures has some advantages, but as it lacks features that traditional RDBMSes have (like table locking and transactions), it is easy to create race conditions during simultanous operations. This is a pretty generic problem and I hope we can emphasize common problems and best practices on the implementation of thread-safe tree tables here.</description>
         <guid isPermaLink="false"></guid>
         <pubDate>Tue, 15 Dec 2009 17:48:44 +0000</pubDate>
      </item>
      <item>
         <title>b_e_n_j_a_m_i_n: sucht einen #Azubi (#Fachinformatiker #Systemintegration) in #Heilbronn. Mehr unter http://www.steinle.net/bewerbung #ausbildung #linux #mac</title>
         <link>http://twitter.com/b_e_n_j_a_m_i_n/statuses/6213612622</link>
         <description>b_e_n_j_a_m_i_n: sucht einen #Azubi (#Fachinformatiker #Systemintegration) in #Heilbronn. Mehr unter http://www.steinle.net/bewerbung #ausbildung #linux #mac</description>
         <guid isPermaLink="false">http://twitter.com/b_e_n_j_a_m_i_n/statuses/6213612622</guid>
         <pubDate>Mon, 30 Nov 2009 21:43:58 +0000</pubDate>
      </item>
      <item>
         <title>Network Interface Firmware Back door with Tigon2</title>
         <link>http://www.eeye.com/html/resources/newsletters/vice/VI20070425.html#vexposed</link>
         <description>The first time I saw details about the Tigon2, I came up with the idea that it could be used to make a back door, remote gdb stub or remote sniffer in the firmware. In this paper, I will explain a way to develop such firmware programs and also the associated security risks.</description>
         <guid isPermaLink="false"></guid>
         <pubDate>Mon, 23 Nov 2009 18:28:50 +0000</pubDate>
      </item>
      <item>
         <title>Should you go Beyond Relational Databases?</title>
         <link>http://carsonified.com/blog/dev/should-you-go-beyond-relational-databases/</link>
         <description>Relational databases, such as MySQL, PostgreSQL and various commercial products, have served us well for many years. Lately, however, there has been a lot of discussion on whether the relational model is reaching the end of its life-span, and what may come after it.</description>
         <guid isPermaLink="false"></guid>
         <pubDate>Mon, 02 Nov 2009 20:54:46 +0000</pubDate>
      </item>
      <item>
         <title>T-Mobile Sidekick Disaster: Danger’s Servers Crashed, And They Don’t Have A Backup</title>
         <link>http://www.techcrunch.com/2009/10/10/t-mobile-sidekick-disaster-microsofts-servers-crashed-and-they-dont-have-a-backup/</link>
         <description>Wow. T-Mobile and Danger, the Microsoft-owned subsidiary that makes the Sidekick, has just announced that they’ve likely lost all user data that was being stored on Microsoft’s servers due to a server failure. That means that any contacts, photos, calendars, or to-do lists that haven’t been locally backed up are gone.</description>
         <guid isPermaLink="false"></guid>
         <pubDate>Sun, 11 Oct 2009 10:24:22 +0000</pubDate>
      </item>
      <item>
         <title>DRAM error rates: Nightmare on DIMM street</title>
         <link>http://blogs.zdnet.com/storage/?p=638</link>
         <description>A two-and-a-half year study of DRAM on 10s of thousands Google servers found DIMM error rates are hundreds to thousands of times higher than thought — a mean of 3,751 correctable errors per DIMM per year. This is the world’s first large-scale study of RAM errors in the field. It looked at multiple vendors, DRAM densities and DRAM types including DDR1, DDR2 and FB-DIMM.</description>
         <guid isPermaLink="false"></guid>
         <pubDate>Wed, 07 Oct 2009 20:14:54 +0000</pubDate>
      </item>
      <item>
         <title>b_e_n_j_a_m_i_n: I've seen my first #ufo. Twelve, exactly. In fact, they looked like jet-afterburners but it is somewhat strange for the #heilbronn region.</title>
         <link>http://twitter.com/b_e_n_j_a_m_i_n/statuses/4583763256</link>
         <description>b_e_n_j_a_m_i_n: I've seen my first #ufo. Twelve, exactly. In fact, they looked like jet-afterburners but it is somewhat strange for the #heilbronn region.</description>
         <guid isPermaLink="false">http://twitter.com/b_e_n_j_a_m_i_n/statuses/4583763256</guid>
         <pubDate>Sat, 03 Oct 2009 17:55:26 +0000</pubDate>
      </item>
      <item>
         <title>Coders At Work: The Duct Tape Programmer</title>
         <link>http://www.joelonsoftware.com/items/2009/09/23.html</link>
         <description>Later, he wrote an email client at Netscape, but the team that was responsible for actually displaying the message never shipped their component. “There was just this big blank rectangle in the middle of the window where we could only display plain text. They were being extremely academic about their project. They were trying to approach it from the DOM/DTD side of things. ‘Oh, well, what we need to do is add another abstraction layer here, and have a delegate for this delegate for this delegate. And eventually a character will show up on the screen.’”</description>
         <guid isPermaLink="false"></guid>
         <pubDate>Thu, 24 Sep 2009 21:16:50 +0000</pubDate>
      </item>
      <item>
         <title>Chaos Computer Club Heilbronn</title>
         <link>http://www.cthn.de/Hauptseite</link>
         <description>To all hackers an script kiddies in the Heilbronn-region: Fabian and Robin are setting up a monthly CCC meeting. If you are good in breaking things, or better, if you are good in making things that do not break, this one might be for you. I'm looking forward to see some new faces next Tuesday!</description>
         <guid isPermaLink="false"></guid>
         <pubDate>Mon, 07 Sep 2009 12:47:14 +0000</pubDate>
      </item>
      <item>
         <title>Snakes on the Web</title>
         <link>http://jacobian.org/writing/snakes-on-the-web/</link>
         <description>It’s true: web development, at its worst, is difficult, repetitive, and boring. The tools we have suck. At best, they make web development slightly less painful, but we’re a long way from making web development awesome.</description>
         <guid isPermaLink="false"></guid>
         <pubDate>Sun, 06 Sep 2009 19:28:54 +0000</pubDate>
      </item>
      <item>
         <title>How to Make a Ghost Stool</title>
         <link>https://wiki.har2009.org/page/News:2009-08-18_GhostStoolHowTo</link>
         <description>&lt;img alt=&quot;&quot; src=&quot;https://wiki.har2009.org/w/images/thumb/6/64/GhostStool.JPG/500px-GhostStool.JPG&quot; border=&quot;0&quot; height=&quot;375&quot; width=&quot;500&quot;&gt;</description>
         <author>(author unknown)</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/f66a263d5f83c2d2</guid>
         <pubDate>Wed, 19 Aug 2009 21:43:45 +0000</pubDate>
      </item>
      <item>
         <title>HTML5 Canvas Experiment</title>
         <link>http://9elements.com/io/?p=153</link>
         <description>&lt;img title=&quot;html5 canvas experiment&quot; src=&quot;http://9elements.com/io/wp-content/uploads/2009/08/html5-canvas-particles2.png&quot; alt=&quot;html5 canvas experiment&quot; height=&quot;200&quot; width=&quot;546&quot;&gt;</description>
         <author>(author unknown)</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/f220b0e1df9f6c03</guid>
         <pubDate>Thu, 06 Aug 2009 07:29:34 +0000</pubDate>
      </item>
      <item>
         <title>Dive Into Python 3</title>
         <link>http://diveintopython3.org/</link>
         <description>&quot;Dive Into Python 3 covers Python 3 and its differences from Python 2. Compared to Dive Into Python, it’s about 20% revised and 80% new material. I am publishing drafts online as I go. Please send feedback. The final version will be published on paper by Apress. The book will remain online under the CC-BY-SA-3.0 license.&quot;</description>
         <guid isPermaLink="false"></guid>
         <pubDate>Tue, 28 Jul 2009 07:01:42 +0000</pubDate>
      </item>
      <item>
         <title>Twenty questions about the GPL</title>
         <link>http://jacobian.org/writing/gpl-questions/</link>
         <description>foo.py is a Python library released under the GPLv3. bar.py is a library distributed commercially. If bar contains import foo, must bar.py be released under the GPL?</description>
         <guid isPermaLink="false"></guid>
         <pubDate>Mon, 13 Jul 2009 20:56:51 +0000</pubDate>
      </item>
   </channel>
</rss>
<!-- fe1.pipes.ch1.yahoo.com uncompressed/chunked Fri Sep  3 13:22:00 GMT 2010 -->
