<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5091391029108520360</id><updated>2011-12-03T07:36:50.117-08:00</updated><category term='cpld'/><category term='wiki'/><category term='retro core'/><category term='funny'/><category term='google tech talks'/><category term='ikiwiki'/><category term='sony'/><category term='ttl'/><category term='freeeq'/><category term='playstation'/><category term='treasure'/><category term='bulletml'/><category term='lik sang'/><category term='tiled'/><category term='vii'/><category term='mapeditor'/><category term='dvd'/><category term='legend of the twin gems'/><category term='minecraft'/><category term='dreamcast'/><category term='collision detection'/><category term='python'/><category term='gamecube'/><category term='virtual console'/><category term='debian'/><category term='realtime'/><category term='video'/><category term='c++'/><category term='wiiware'/><category term='humor'/><category term='linux'/><category term='embedded'/><category term='g965'/><category term='maple bus'/><category term='math'/><category term='emacs'/><category term='rogueshooter'/><category term='java'/><category term='logic'/><category term='usb'/><category term='programming'/><category term='openssl'/><category term='ssh'/><category term='games'/><category term='wii'/><category term='lisp'/><category term='bash'/><category term='platformer'/><category term='electronics'/><category term='subsurfer'/><category term='microcontroller'/><category term='core 2 duo'/><category term='imports'/><category term='intel'/><category term='lxde'/><category term='unix'/><category term='xilinx'/><category term='pygame'/><category term='ubuntu'/><category term='atmel'/><category term='svn'/><category term='n64'/><title type='text'>henzenmann</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>55</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-8107190944266537110</id><published>2011-12-03T07:34:00.000-08:00</published><updated>2011-12-03T07:36:50.129-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='minecraft'/><title type='text'>Running the Minecraft demo in Linux</title><content type='html'>I always wanted to see how Minecraft would run on my machine, but unfortunately the only demo version available is &lt;a href="http://www.minecraftwiki.net/wiki/PC_Gamer_Minecraft_Demo"&gt;this old one for Windows&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Since the game is written in java, I wanted to see if I could get it to run under Linux anyways...&lt;br /&gt;&lt;br /&gt;First I ran the demo installer using Wine. &lt;br /&gt;&lt;br /&gt;The game itself is packaged as a Windows executable using the &lt;a href="http://launch4j.sourceforge.net/"&gt;Launch4J&lt;/a&gt;. It turns out that one can simply &lt;a href="http://stackoverflow.com/questions/2244321/does-compilng-java-code-to-exe-e-g-using-launch4java-ensure-code-cannot-be-re"&gt;unpack these Launch4J exe files using file-roller&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;After unpacking the exe file (in the same directory where I installed the demo), I found a bunch of obfuscated class files. I tried to start them all (ie "java a" etc.), until I found some suitable ones: hz.class and k.class (both seem to work, I don't know what the difference is).&lt;br /&gt;&lt;br /&gt;Both of these threw an exception because &lt;a href="http://lwjgl.org/"&gt;LWJGL&lt;/a&gt; could not be found.&lt;br /&gt;&lt;br /&gt;I downloaded the current release of LWJGL, and the game started, but got stuck on the logo screen (apparently during sound initialization?).&lt;br /&gt;&lt;br /&gt;I then installed the liblwjgl-java package from Debian and it finally worked.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://pastie.org/2960100"&gt;Here is the wrapper script&lt;/a&gt; I ended up with.&lt;br /&gt;&lt;br /&gt;The game (or at least this old version) is playable on my Intel G31 integrated graphics machine, but only on the lowest graphics settings :-/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-8107190944266537110?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/8107190944266537110/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=8107190944266537110' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/8107190944266537110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/8107190944266537110'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2011/12/running-minecraft-demo-in-linux.html' title='Running the Minecraft demo in Linux'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-3335150248356169623</id><published>2011-10-13T13:52:00.000-07:00</published><updated>2011-10-13T13:52:45.139-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><title type='text'>RIP Dennis Ritchie</title><content type='html'>RIP &lt;a href="http://en.wikipedia.org/wiki/Dennis_Ritchie"&gt;Dennis Ritchie&lt;/a&gt;...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-3335150248356169623?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/3335150248356169623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=3335150248356169623' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/3335150248356169623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/3335150248356169623'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2011/10/rip-dennis-ritchie.html' title='RIP Dennis Ritchie'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-7902763043626184133</id><published>2011-08-02T08:58:00.000-07:00</published><updated>2011-11-23T05:50:10.798-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><title type='text'>Installing Debian on a Thinkpad Edge E325</title><content type='html'>I just got a Lenovo Thinkpad Edge E325. I deliberately chose a version without Windows installed. I chose to install Debian/squeeze instead, and here are some notes on the process.&lt;br /&gt;&lt;br /&gt;I started with the official Debian/squeeze amd64 netinst ISO, &lt;a href="http://www.debian.org/releases/stable/amd64/ch04s03.html"&gt;installed on a USB stick&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;With the USB stick inserted, the laptop booted right into the Debian installer. Unfortunately, the kernel (2.6.32) did not recognize the Atheros ethernet adapter. &lt;br /&gt;&lt;br /&gt;Using a &lt;a href="http://kmuto.jp/debian/d-i/"&gt;backport of a more recent Installer&lt;/a&gt; (with kernel 2.6.38), I could get it to work. Unlike the official ISO, just "cat-ing" the alternative ISO to the USB stick does not seem to result in a bootable USB stick.&lt;br /&gt;&lt;br /&gt;Instead I set up the USB stick using the supplied the HD image:&lt;br /&gt;&lt;blockquote&gt;zcat boot-amd64-0710.img.gz &gt; /dev/sdc&lt;/blockquote&gt;Additionally, I had to copy the ISO image (squeeze-custom-amd64-0710.iso) onto the USB stick as well.&lt;br /&gt;&lt;br /&gt;After the installation, the display just showed random noise. I did not install an SSH server during the initial installation, so I had to boot from the USB stick again in rescue mode.&lt;br /&gt;&lt;br /&gt;I installed the &lt;a href="http://support.amd.com/de/gpudownload/linux/Pages/radeon_linux.aspx"&gt;proprietary ATI driver&lt;/a&gt; (fglrx), and was greeted by the GDM login screen after rebooting.&lt;br /&gt;&lt;br /&gt;I noticed that fullscreen video and 3D support were not availabe. The Xorg log complained about missing DRM support. I found out that the DRM kernel module (fglrx.ko) was not present on the system.&lt;br /&gt;&lt;br /&gt;I added the backports repository (/etc/apt/sources.list.d/squeeze-backports.list), and installed the headers for the 2.6.38 kernel.&lt;br /&gt;&lt;blockquote&gt;deb http://backports.debian.org/debian-backports squeeze-backports main&lt;br /&gt;deb-src http://backports.debian.org/debian-backports squeeze-backports main&lt;/blockquote&gt;&lt;br /&gt;Afterwards I un- and re-installed the ATI driver. 3D support works now and videos can be watched in full-screen.&lt;br /&gt;&lt;br /&gt;Unfortunately some 3D applications crash on exit, but that is not a big problem for now.&lt;br /&gt;&lt;br /&gt;The wireless adapter (RTL8188CE) did not work at fist. The logs indicated that the firmware could not be loaded. I downloaded the Linux driver package from the &lt;a href="http://www.realtek.com/downloads/downloadsView.aspx?Langid=1&amp;PNid=48&amp;PFid=48&amp;Level=5&amp;Conn=4&amp;DownTypeID=3&amp;GetDown=false&amp;Downloads=true#RTL8188CE"&gt;Realtek website&lt;/a&gt; and copied the "rtlwifi" folder to "/lib/firmware". After reboot, my wireless network imediately showed up in Network Manager.&lt;br /&gt;&lt;br /&gt;I could not get sound from any applications at first. It seems the default ALSA soundcard is the HDMI output while the "regular" sound chip is recognized as card 1. I created /etc/asoundrc to let ALSA know the correct default:&lt;br /&gt;&lt;blockquote&gt;defaults.ctl.card 1&lt;br /&gt;defaults.pcm.card 1&lt;br /&gt;defaults.timer.card 1&lt;/blockquote&gt;&lt;br /&gt;When closing the lid, the system went into some suspend mode and I could not bring it back to live. I changed the energy management settings to just turn off the display instead.&lt;br /&gt;&lt;br /&gt;The built-in webcam seems to work fine out of the box.&lt;br /&gt;&lt;br /&gt;The display brightness keys work fine out of the box. The volume keys are recognized (a volume control icon appears on screen), but they seem to be mapped the the wrong control, as they do nothing. I have not yet tried any of the other keys (microphone, camera, wireless and play/pause etc. keys).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Update:&lt;br /&gt;&lt;br /&gt;The media player keys (play, pause etc.) also work out of the box.&lt;br /&gt;&lt;br /&gt;The HDMI output works as well, but there seems to be no way to tell Totem (the default video player) which audio output to use.&lt;br /&gt;&lt;br /&gt;I used mplayer instead:&lt;br /&gt;&lt;blockquote&gt;mplayer -ao alsa:device=hw=0.3 ...&lt;/blockquote&gt;&lt;br /&gt;As previously mentioned, suspend-to-disk (S4) does not seem to work properly, but suspend-to-ram (S3) does.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Update 2:&lt;br /&gt;&lt;br /&gt;As mentioned earlier, the volume control keys were recognized out of the box, but&lt;br /&gt;they did not work properly. This seems to be a problem of the flavor of Gnome that is in Debian, which includes some changes to the sound system. The controls are not mapped to the proper mixer interface.&lt;br /&gt;&lt;br /&gt;Setting "/desktop/gnome/sound/default_mixer_device" to "alsamixer" in gconf-editor fixed this problem.&lt;br /&gt;&lt;br /&gt;I also ended up changing some other keyboard settings. In the BIOS I swapped the "left ctrl" and "Fn" keys - this way it is way easier to hit ctrl with my left pinky - very important for an Emacs user :-) I also set "Fn" to be on by default.&lt;br /&gt;&lt;br /&gt;Finally, in Gnome I unmapped the "print screen" key. Since it is located next to Alt-Gr, I kept hitting it by accident, making screen shots all the time...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Update 3:&lt;br /&gt;&lt;br /&gt;After installing some &lt;a href="http://www.phoronix.com/scan.php?page=news_item&amp;px=OTE5OA"&gt;missing firmware files&lt;/a&gt;, ie PALM* and SUMO* available &lt;a href="http://people.freedesktop.org/~agd5f/radeon_ucode/"&gt;here&lt;/a&gt;, the graphics now also work with the open source Xorg and Mesa drivers (at least with the versions from the squeeze-backports repository, I did not try it with the stock squeeze versions).&lt;br /&gt;&lt;br /&gt;Video playback performance seems to have greatly improved. With the proprietary fglrx driver, video playback was kind of jerky and fullscreen flash video (Youtube) was unwatchable. Now it runs okay.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-7902763043626184133?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/7902763043626184133/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=7902763043626184133' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/7902763043626184133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/7902763043626184133'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2011/08/installing-debian-on-thinkpad-edge-e325.html' title='Installing Debian on a Thinkpad Edge E325'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-6533738939675532683</id><published>2011-06-08T15:28:00.000-07:00</published><updated>2011-06-08T15:28:13.853-07:00</updated><title type='text'>ElsterOnline sucks ass...</title><content type='html'>ElsterOnline, the official German online tax service site, is a piece of incompatible, non-working shit.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-6533738939675532683?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/6533738939675532683/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=6533738939675532683' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/6533738939675532683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/6533738939675532683'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2011/06/elsteronline-sucks-ass.html' title='ElsterOnline sucks ass...'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-2357755854871191632</id><published>2011-05-22T12:24:00.000-07:00</published><updated>2011-05-22T12:24:42.946-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><title type='text'>Lullaby for the Old One...</title><content type='html'>The announcement of &lt;a href="http://henzenmann.blogspot.com/2011/05/dark-souls.html"&gt;Dark Souls&lt;/a&gt; was a reminder that I had some unfinshed business to attend to!&lt;br /&gt;&lt;br /&gt;Well, it is finally done:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-QqGjugMa2Pg/Tdlcdp6OXAI/AAAAAAAAAFw/3jI0ld5MMoM/s1600/oldone.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="240" width="320" src="http://4.bp.blogspot.com/-QqGjugMa2Pg/Tdlcdp6OXAI/AAAAAAAAAFw/3jI0ld5MMoM/s320/oldone.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Hope I can finish "new game plus" before october ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-2357755854871191632?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/2357755854871191632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=2357755854871191632' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/2357755854871191632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/2357755854871191632'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2011/05/lullaby-for-old-one.html' title='Lullaby for the Old One...'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-QqGjugMa2Pg/Tdlcdp6OXAI/AAAAAAAAAFw/3jI0ld5MMoM/s72-c/oldone.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-4095064659086794985</id><published>2011-05-14T08:17:00.000-07:00</published><updated>2011-05-14T08:20:16.127-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><title type='text'>Finally :-)</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-n-hgRzL7RRs/Tc6c66G0ueI/AAAAAAAAAFo/SjcQ9IzQ1vg/s1600/DSCF1888.JPG" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="240" width="320" src="http://4.bp.blogspot.com/-n-hgRzL7RRs/Tc6c66G0ueI/AAAAAAAAAFo/SjcQ9IzQ1vg/s320/DSCF1888.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-4095064659086794985?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/4095064659086794985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=4095064659086794985' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/4095064659086794985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/4095064659086794985'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2011/05/finally.html' title='Finally :-)'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-n-hgRzL7RRs/Tc6c66G0ueI/AAAAAAAAAFo/SjcQ9IzQ1vg/s72-c/DSCF1888.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-1520879654995056089</id><published>2011-05-11T08:19:00.000-07:00</published><updated>2011-05-14T08:21:44.447-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='sony'/><category scheme='http://www.blogger.com/atom/ns#' term='playstation'/><title type='text'>Dark Souls</title><content type='html'>Today I preordered &lt;a href="http://www.fromsoftware.jp/darksouls/"&gt;Dark Souls&lt;/a&gt;, sequel to the fantastic Demon's Souls. Lets hope PSN is back online by october ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-1520879654995056089?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/1520879654995056089/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=1520879654995056089' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/1520879654995056089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/1520879654995056089'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2011/05/dark-souls.html' title='Dark Souls'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-5701146003944116849</id><published>2011-04-24T06:52:00.000-07:00</published><updated>2011-04-24T06:52:34.427-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pygame'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='math'/><category scheme='http://www.blogger.com/atom/ns#' term='collision detection'/><title type='text'>AARect/AARect sweeped collision test in Python</title><content type='html'>The Gamasutra article &lt;a href="http://www.gamasutra.com/view/feature/3383/simple_intersection_tests_for_games.php?page=3"&gt;"Simple Intersection Tests For Games"&lt;/a&gt; contains an AARect/AARect sweeped collision test. Unfortunately, the presented implementation is incorrect: It always reports a collision when the relative velocitiy of the two rectangles is 0. &lt;br /&gt;&lt;br /&gt;I tried to come up with a corrected version and it seems to work fine so far. My implementation and test application using Python/pygame can be found &lt;a href="http://pastie.org/1828277"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-e2CVBuoYjmQ/TbQnO08p4cI/AAAAAAAAAFg/NqpAbsTs1AE/s1600/sweeptest.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="252" width="320" src="http://3.bp.blogspot.com/-e2CVBuoYjmQ/TbQnO08p4cI/AAAAAAAAAFg/NqpAbsTs1AE/s320/sweeptest.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The filled rectangles represent the start positions, the non-filled rectangles represent the destination positions. They can be dragged around the screen using the mouse.&lt;br /&gt;&lt;br /&gt;The highlighted filled rectangles represent the positions at the time of collision.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-5701146003944116849?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/5701146003944116849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=5701146003944116849' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/5701146003944116849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/5701146003944116849'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2011/04/aarectaarect-sweeped-collision-test-in.html' title='AARect/AARect sweeped collision test in Python'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-e2CVBuoYjmQ/TbQnO08p4cI/AAAAAAAAAFg/NqpAbsTs1AE/s72-c/sweeptest.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-4665980202600964509</id><published>2011-03-27T06:15:00.000-07:00</published><updated>2011-03-27T06:15:29.053-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lxde'/><category scheme='http://www.blogger.com/atom/ns#' term='bash'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><title type='text'>Proper color support in lxterminal</title><content type='html'>I'm currently using &lt;a href="http://lxde.org/"&gt;lxterminal&lt;/a&gt; as my terminal, and there does not seem to be a way to specify the terminal type. "$TERM" is always set to "xterm", which is the default of the underlying &lt;a href="http://library.gnome.org/devel/vte/"&gt;libvte&lt;/a&gt;. At least on Debian, the terminfo entry for "xterm" only allows for 16 colors.&lt;br /&gt;&lt;br /&gt;As a workaround, I added the following to my .bashrc.&lt;br /&gt;&lt;pre&gt;# Turn on 256 color support...&lt;br /&gt;if [ "x$TERM" = "xxterm" ]&lt;br /&gt;then&lt;br /&gt;    export TERM="xterm-256color"&lt;br /&gt;fi&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;With this I can now properly use &lt;a href="http://www.emacswiki.org/emacs/ColorTheme"&gt;color-theme&lt;/a&gt; in Emacs - before:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-QUY5qoph3gc/TY80PJiW96I/AAAAAAAAAFQ/61KusmhBWjA/s1600/lxterminal-emacs-xterm.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="224" width="320" src="http://4.bp.blogspot.com/-QUY5qoph3gc/TY80PJiW96I/AAAAAAAAAFQ/61KusmhBWjA/s320/lxterminal-emacs-xterm.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;... and after:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-ael3uY9xq-I/TY80PQ6ll9I/AAAAAAAAAFY/4CR3qIjjlbM/s1600/lxterminal-emacs-xterm-256color.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="224" width="320" src="http://4.bp.blogspot.com/-ael3uY9xq-I/TY80PQ6ll9I/AAAAAAAAAFY/4CR3qIjjlbM/s320/lxterminal-emacs-xterm-256color.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-4665980202600964509?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/4665980202600964509/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=4665980202600964509' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/4665980202600964509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/4665980202600964509'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2011/03/proper-color-support-in-lxterminal.html' title='Proper color support in lxterminal'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-QUY5qoph3gc/TY80PJiW96I/AAAAAAAAAFQ/61KusmhBWjA/s72-c/lxterminal-emacs-xterm.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-4027572404989333823</id><published>2011-03-24T15:40:00.000-07:00</published><updated>2011-03-24T15:40:34.696-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lisp'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><title type='text'>Hacking Lisp in Emacs...</title><content type='html'>After having used Emacs for years, I finally started to check out Lisp. The &lt;a href="http://www.gnu.org/software/emacs/emacs-lisp-intro/html_node/index.html"&gt;tutorial&lt;/a&gt; is excellent, especially when you use the &lt;a href="http://en.wikipedia.org/wiki/Texinfo"&gt;Texinfo&lt;/a&gt; version inside Emacs, which allows you to directly execute all the examples from the text :-)&lt;br /&gt;&lt;br /&gt;These are my first functions:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;(defun cxxcomment (pos0 pos1)&lt;br /&gt;  "Alternative commenting function for c++ code"&lt;br /&gt;  (interactive "r")&lt;br /&gt;  (let ((line0 (line-number-at-pos pos0))&lt;br /&gt;        (line1 (line-number-at-pos pos1)))&lt;br /&gt;    (save-excursion&lt;br /&gt;      (while (&lt;= line0 line1)&lt;br /&gt;        (goto-line line0)&lt;br /&gt;        (insert "//")&lt;br /&gt;        (setq line0 (+ line0 1 ))&lt;br /&gt;        )&lt;br /&gt;      )&lt;br /&gt;    )&lt;br /&gt;  )&lt;br /&gt;&lt;br /&gt;(defun cxxuncomment (pos0 pos1)&lt;br /&gt;  "Alternative uncommenting function for c++ code"&lt;br /&gt;  (interactive "r")&lt;br /&gt;  (let ((line0 (line-number-at-pos pos0))&lt;br /&gt;        (line1 (line-number-at-pos pos1)))&lt;br /&gt;    (save-excursion&lt;br /&gt;      (while (&lt;= line0 line1)&lt;br /&gt;        (goto-line line0)&lt;br /&gt;        (if (re-search-forward "^\\([ \t]*\\)//" (line-end-position) t)&lt;br /&gt;            (replace-match "\\1"))&lt;br /&gt;        (setq line0 (+ line0 1 ))&lt;br /&gt;        )&lt;br /&gt;      )&lt;br /&gt;    )&lt;br /&gt;  )&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Very basic stuff, but I already like this one better than the one built into c++-mode ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-4027572404989333823?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/4027572404989333823/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=4027572404989333823' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/4027572404989333823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/4027572404989333823'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2011/03/hacking-lisp-in-emacs.html' title='Hacking Lisp in Emacs...'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-8135822866065036957</id><published>2009-05-02T02:15:00.000-07:00</published><updated>2009-05-02T02:26:55.609-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wiiware'/><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='wii'/><title type='text'>Bit.Trip Beat...</title><content type='html'>... is awesome :-)&lt;br /&gt;&lt;br /&gt;Pong meets Guitar Hero meets Border Down meets Rez...&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/N6cjZF7m6fU&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/N6cjZF7m6fU&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Making of:&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/fpCG3xmqtn0&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/fpCG3xmqtn0&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-8135822866065036957?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/8135822866065036957/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=8135822866065036957' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/8135822866065036957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/8135822866065036957'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2009/05/bittrip-beat.html' title='Bit.Trip Beat...'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-7817144299884033723</id><published>2009-03-20T12:41:00.000-07:00</published><updated>2009-03-20T12:50:42.594-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='electronics'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><title type='text'>SheevaPlug...</title><content type='html'>I just found out about the &lt;a href="http://www.globalscaletechnologies.com/t-sheevaplugdetails.aspx#features"&gt;SheevaPlug&lt;/a&gt; via Martin Michelmayr's &lt;a href="http://www.cyrius.com/journal/2009/03/15/#nslu2-killer"&gt;blog&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I've been thinking about setting up a home server for a while, this would be the perfect device :-)&lt;br /&gt;&lt;br /&gt;More info &lt;a href="http://suihkulokki.blogspot.com/2009/02/not-slug-sheevaplug.html"&gt;here&lt;/a&gt; and &lt;a href="http://www.linuxdevices.com/news/NS9634061300.html"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-7817144299884033723?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/7817144299884033723/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=7817144299884033723' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/7817144299884033723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/7817144299884033723'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2009/03/sheevaplug.html' title='SheevaPlug...'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-3875299192280609253</id><published>2009-02-08T13:06:00.000-08:00</published><updated>2009-02-08T13:20:14.049-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wiiware'/><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='wii'/><category scheme='http://www.blogger.com/atom/ns#' term='platformer'/><title type='text'>The jelly devils in Mega Man 9...</title><content type='html'>...can kiss my ass.&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/zAAa4TjCu6Q&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/zAAa4TjCu6Q&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;I went back to playing Mega Man 9 this weekend, but could not get past this boss. After getting beaten several times, I wanted to go to the "shop" and buy some powerups... only to realize that you cannot save within the last three levels of the game.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-3875299192280609253?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/3875299192280609253/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=3875299192280609253' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/3875299192280609253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/3875299192280609253'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2009/02/jelly-devils-in-mega-man-9.html' title='The jelly devils in Mega Man 9...'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-5020709438432439519</id><published>2009-02-06T00:14:00.000-08:00</published><updated>2009-02-06T00:22:02.136-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='funny'/><title type='text'>base 2? - Oh, I get it!</title><content type='html'>I actually wrote code to help me get the joke on the lower right of &lt;a href="http://xkcd.com/540/"&gt;today's xkcd&lt;/a&gt; comic :-) &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/usr/bin/env/python&lt;br /&gt;import sys&lt;br /&gt;sentence = ""&lt;br /&gt;for word in sys.argv[1:]:&lt;br /&gt;    sentence += chr( int( word, 2 ) )&lt;br /&gt;print sentence&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-5020709438432439519?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/5020709438432439519/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=5020709438432439519' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/5020709438432439519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/5020709438432439519'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2009/02/base-2-oh-i-get-it.html' title='base 2? - Oh, I get it!'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-6797513930778314416</id><published>2009-01-09T07:51:00.000-08:00</published><updated>2009-02-23T23:54:02.907-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wii'/><category scheme='http://www.blogger.com/atom/ns#' term='vii'/><title type='text'>Magical box!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_mphPyo-9RXM/SWdzYS_7h4I/AAAAAAAAAEo/IFFCWMPenWg/s1600-h/tinyi-imgad.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 336px; height: 269px;" src="http://2.bp.blogspot.com/_mphPyo-9RXM/SWdzYS_7h4I/AAAAAAAAAEo/IFFCWMPenWg/s400/tinyi-imgad.gif" alt="" id="BLOGGER_PHOTO_ID_5289323148623972226" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;According to this ad, there is a magical converter that lets you play Tekken 5 on a &lt;a href="http://cn.engadget.com/2007/11/04/vii-first-open-box-video-shot/"&gt;"Vii"&lt;/a&gt; :-)&lt;br /&gt;&lt;br /&gt;The "Vii" is kind of interesting, because rather than all those NES clones it actually seems to be an original hardware platform of its own, with original games...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-6797513930778314416?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/6797513930778314416/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=6797513930778314416' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/6797513930778314416'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/6797513930778314416'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2009/01/magical-box.html' title='Magical box!'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_mphPyo-9RXM/SWdzYS_7h4I/AAAAAAAAAEo/IFFCWMPenWg/s72-c/tinyi-imgad.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-4580413279311693759</id><published>2008-12-29T01:59:00.000-08:00</published><updated>2009-02-23T23:54:30.592-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='dvd'/><title type='text'>Problems with libdvdcss...</title><content type='html'>I recently had problems watching some &lt;a href="http://en.wikipedia.org/wiki/Black_books"&gt;new&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/Spaced"&gt;DVDs&lt;/a&gt; I got. Even though I had &lt;a href="http://www.videolan.org/developers/libdvdcss.html"&gt;libdvdcss&lt;/a&gt; installed, they would not play properly/at all. Deleting $HOME/.dvdcss fixed the problem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-4580413279311693759?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/4580413279311693759/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=4580413279311693759' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/4580413279311693759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/4580413279311693759'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2008/12/problems-with-libdvdcss.html' title='Problems with libdvdcss...'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-1018903438677675208</id><published>2008-10-08T10:25:00.000-07:00</published><updated>2008-10-08T10:37:15.072-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='treasure'/><category scheme='http://www.blogger.com/atom/ns#' term='wii'/><title type='text'>Can't wait for Sin &amp; Punishment 2...</title><content type='html'>This looks so awesome:&lt;br /&gt;&lt;br /&gt;&lt;object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"  codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" id="gtembed" width="480" height="392"&gt; &lt;param name="allowScriptAccess" value="sameDomain" /&gt; &lt;param name="allowFullScreen" value="true" /&gt; &lt;param name="movie" value="http://www.gametrailers.com/remote_wrap.php?mid=40742"/&gt; &lt;param name="quality" value="high" /&gt; &lt;embed src="http://www.gametrailers.com/remote_wrap.php?mid=40742" swLiveConnect="true" name="gtembed" align="middle" allowScriptAccess="sameDomain" allowFullScreen="true" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="480" height="392"&gt;&lt;/embed&gt; &lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-1018903438677675208?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/1018903438677675208/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=1018903438677675208' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/1018903438677675208'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/1018903438677675208'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2008/10/cant-wait-for-sin-punishment-2.html' title='Can&apos;t wait for Sin &amp; Punishment 2...'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-4922220524841243284</id><published>2008-06-27T12:06:00.000-07:00</published><updated>2008-06-27T12:11:36.541-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='retro core'/><category scheme='http://www.blogger.com/atom/ns#' term='games'/><title type='text'>RetroCore is back!</title><content type='html'>&lt;a href="http://www.woyzek.net/"&gt;Typ&lt;/a&gt; just told me that &lt;a href="http://www.segagagadomain.com/RetroCorepage-main.htm"&gt;RetroCore&lt;/a&gt; is back, apparently already since April!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-4922220524841243284?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/4922220524841243284/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=4922220524841243284' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/4922220524841243284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/4922220524841243284'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2008/06/retrocore-is-back.html' title='RetroCore is back!'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-1822592017131077609</id><published>2008-06-07T11:09:00.000-07:00</published><updated>2008-06-07T11:20:39.652-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='n64'/><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='treasure'/><category scheme='http://www.blogger.com/atom/ns#' term='wii'/><category scheme='http://www.blogger.com/atom/ns#' term='virtual console'/><title type='text'>A Treasure kind of day...</title><content type='html'>Today I got myself "&lt;a href="http://en.wikipedia.org/wiki/Sin_and_Punishment:_Successor_of_the_Earth"&gt;Sin &amp;amp; Punishment&lt;/a&gt;" (N64) as well as "&lt;a href="http://en.wikipedia.org/wiki/Gunstar_Heroes"&gt;Gunstar Heroes&lt;/a&gt;" (Mega Drive) on Virtual Console - great stuff :)&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/pmG52VYcErg&amp;amp;hl=en"&gt;&lt;embed src="http://www.youtube.com/v/pmG52VYcErg&amp;amp;hl=en" type="application/x-shockwave-flash" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/xOCRCEAhluo&amp;amp;hl=en"&gt;&lt;embed src="http://www.youtube.com/v/xOCRCEAhluo&amp;amp;hl=en" type="application/x-shockwave-flash" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-1822592017131077609?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/1822592017131077609/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=1822592017131077609' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/1822592017131077609'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/1822592017131077609'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2008/06/treasure-kind-of-day.html' title='A Treasure kind of day...'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-3169762759478931979</id><published>2008-05-15T13:30:00.001-07:00</published><updated>2008-05-15T13:31:11.003-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='openssl'/><category scheme='http://www.blogger.com/atom/ns#' term='funny'/><title type='text'>Also...</title><content type='html'>&lt;a href="http://blog.rominet.net/2008/05/debianopenssl-debacle.html"&gt;DEBIAN CAT IZ LOOKING FOR ANTROPI&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-3169762759478931979?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/3169762759478931979/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=3169762759478931979' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/3169762759478931979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/3169762759478931979'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2008/05/also.html' title='Also...'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-544805497374869005</id><published>2008-05-15T12:00:00.000-07:00</published><updated>2008-05-15T12:08:04.538-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='ssh'/><category scheme='http://www.blogger.com/atom/ns#' term='openssl'/><title type='text'>My precious...</title><content type='html'>&lt;pre&gt;&lt;br /&gt;$ LANG=C ls -l ~/.ssh/id_rsa&lt;br /&gt;-rw------- 1 chenz chenz 951 May  6  2006 .ssh/id_rsa&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Seems to be &lt;a href="http://www.debian.org/security/2008/dsa-1571"&gt;old enough&lt;/a&gt; :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-544805497374869005?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/544805497374869005/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=544805497374869005' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/544805497374869005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/544805497374869005'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2008/05/my-precious.html' title='My precious...'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-5962640983281479887</id><published>2008-05-14T11:41:00.000-07:00</published><updated>2008-05-14T11:43:07.119-07:00</updated><title type='text'>I want to live in this town!</title><content type='html'>&lt;a href="http://www.kennethfejer.com/isocity/"&gt;http://www.kennethfejer.com/isocity/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-5962640983281479887?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/5962640983281479887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=5962640983281479887' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/5962640983281479887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/5962640983281479887'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2008/05/i-want-to-live-in-this-town.html' title='I want to live in this town!'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-4402047230273034879</id><published>2008-02-27T07:08:00.000-08:00</published><updated>2008-02-27T07:29:06.412-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wiki'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='ikiwiki'/><category scheme='http://www.blogger.com/atom/ns#' term='freeeq'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>ikiwiki</title><content type='html'>I have just ported the &lt;a href="http://home.gna.org/freeeq/"&gt;Freeeq homepage&lt;/a&gt; from plain HTML to &lt;a href="http://ikiwiki.info/"&gt;ikiwiki&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://gna.org/"&gt;GNA.org&lt;/a&gt; allows only static HTML hosting from a Subversion repository, so ikiwiki was an ideal candidate. The source for the wiki is at http://svn.gna.org/viewcvs/freeeq/website/ikiwiki-src/ and the generated content is at http://svn.gna.org/viewcvs/freeeq/website/ikiwiki/ .&lt;br /&gt;&lt;br /&gt;To automatically put the generated output into the repository, I wrote a Python script that checks out a working copy of the destination SVN location and then synchronizes it with the local directory containing the generated content.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/usr/bin/env python&lt;br /&gt;&lt;br /&gt;import filecmp&lt;br /&gt;import optparse&lt;br /&gt;import os&lt;br /&gt;import pysvn&lt;br /&gt;import shutil&lt;br /&gt;import stat&lt;br /&gt;import sys&lt;br /&gt;import tempfile&lt;br /&gt;&lt;br /&gt;"""&lt;br /&gt;svnsync.cfg format:&lt;br /&gt;===================&lt;br /&gt;&lt;br /&gt;# Comment&lt;br /&gt;localPath = /some/local/dir&lt;br /&gt;svnURL = https://some.svn.host/path&lt;br /&gt;checkin = true&lt;br /&gt;message = Log message&lt;br /&gt;"""&lt;br /&gt;&lt;br /&gt;class Config:&lt;br /&gt;&lt;br /&gt;   def __init__( self ):&lt;br /&gt;&lt;br /&gt;       self.keys = set( [ "localPath", "svnURL", "checkin", "message" ] )&lt;br /&gt;&lt;br /&gt;       self.localPath = ""&lt;br /&gt;       self.svnURL = ""&lt;br /&gt;       self.checkin = False&lt;br /&gt;       self.message = ""&lt;br /&gt;&lt;br /&gt;   def read( self, file ):&lt;br /&gt;&lt;br /&gt;       try:&lt;br /&gt;&lt;br /&gt;           for line in file.readlines():&lt;br /&gt;&lt;br /&gt;               line = line.split( '#' )[0].strip()&lt;br /&gt;               if line == "":&lt;br /&gt;                   continue&lt;br /&gt;&lt;br /&gt;               name, value = line.split( '=' )&lt;br /&gt;              &lt;br /&gt;               name = name.strip()&lt;br /&gt;               value = value.strip()&lt;br /&gt;&lt;br /&gt;               assert name in self.keys&lt;br /&gt;               assert value != ""&lt;br /&gt;          &lt;br /&gt;               self.__dict__[ name ] = value&lt;br /&gt;&lt;br /&gt;       except:&lt;br /&gt;         &lt;br /&gt;           print "Error parsing config file!"&lt;br /&gt;           sys.exit( 1 )&lt;br /&gt;&lt;br /&gt;   def getCheckin( self ):&lt;br /&gt;       return self.checkin == "yes" or self.checkin == "true"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;cfg = Config()&lt;br /&gt;if os.path.isfile( "svnsync.cfg" ):&lt;br /&gt;   print "Reading config file"&lt;br /&gt;   cfg.read( open( "svnsync.cfg" ) )&lt;br /&gt;&lt;br /&gt;op = optparse.OptionParser()&lt;br /&gt;&lt;br /&gt;op.add_option( "-l", "--local-path", dest = "localPath", default = "",&lt;br /&gt;              help = "Read from local directory DIR", metavar = "DIR" )&lt;br /&gt;&lt;br /&gt;op.add_option( "-s", "--svn-url", dest = "svnURL", default = "",&lt;br /&gt;              help = "Sync to svn repository at URL", metavar = "URL" )&lt;br /&gt;&lt;br /&gt;op.add_option( "-c", "--checkin", dest = "checkin", action = "store_true", default = False,&lt;br /&gt;              help = "Commit changes after synching" )&lt;br /&gt;&lt;br /&gt;op.add_option( "-m", "--message", dest = "message", default = "",&lt;br /&gt;              help = "Commit message" )&lt;br /&gt;&lt;br /&gt;(options, args) = op.parse_args()&lt;br /&gt;&lt;br /&gt;if options.localPath != "":&lt;br /&gt;   cfg.localPath = options.localPath&lt;br /&gt;&lt;br /&gt;if options.svnURL != "":&lt;br /&gt;   cfg.svnURL = options.svnURL&lt;br /&gt;&lt;br /&gt;if options.checkin:&lt;br /&gt;   cfg.checkin = "true"&lt;br /&gt;&lt;br /&gt;if options.message != "":&lt;br /&gt;   cfg.message = options.message&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if not os.path.isdir( cfg.localPath ):&lt;br /&gt;   print "Error: Invalid localPath"&lt;br /&gt;   sys.exit( 1 )&lt;br /&gt;&lt;br /&gt;if cfg.svnURL == "":&lt;br /&gt;   print "Error: No svnURL specified"&lt;br /&gt;   sys.exit( 1 )&lt;br /&gt;&lt;br /&gt;if cfg.getCheckin() and cfg.message == "":&lt;br /&gt;   print "Error: Empty commit message"&lt;br /&gt;   sys.exit( 1 )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;workingCopyDirName = tempfile.mkdtemp( "", "svnsync_", "." )&lt;br /&gt;&lt;br /&gt;client = pysvn.Client()&lt;br /&gt;&lt;br /&gt;client.checkout( cfg.svnURL, workingCopyDirName )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def doTree( localPath, workingCopyPath ):&lt;br /&gt;&lt;br /&gt;   dc = filecmp.dircmp( localPath, workingCopyPath, [".svn"] )&lt;br /&gt;&lt;br /&gt;   for f in dc.right_only:&lt;br /&gt;       print "Removing stale file/directory '%s'" % f&lt;br /&gt;       client.remove( "%s/%s" % ( workingCopyPath, f ) )&lt;br /&gt;&lt;br /&gt;   for f in dc.left_only:&lt;br /&gt;       print "Adding new file/directory '%s'" % f&lt;br /&gt;&lt;br /&gt;       src = "%s/%s" % ( localPath, f )&lt;br /&gt;&lt;br /&gt;       mode = os.stat( src )[ stat.ST_MODE ]&lt;br /&gt;&lt;br /&gt;       if stat.S_ISDIR( mode ):&lt;br /&gt;           shutil.copytree( src, "%s/%s" % ( workingCopyPath, f ) )&lt;br /&gt;&lt;br /&gt;       elif stat.S_ISREG( mode ):&lt;br /&gt;           shutil.copy( src, "%s/" % ( workingCopyPath ) )&lt;br /&gt;&lt;br /&gt;       else:&lt;br /&gt;           print "Ignoring '%s'" % src&lt;br /&gt;           continue&lt;br /&gt;&lt;br /&gt;       client.add( "%s/%s" % ( workingCopyPath, f ) )&lt;br /&gt;&lt;br /&gt;   for f in dc.diff_files:&lt;br /&gt;       print "Updating '%s'" % f&lt;br /&gt;       shutil.copy( "%s/%s" % ( localPath, f ), "%s/%s" % ( workingCopyPath, f ) )&lt;br /&gt;  &lt;br /&gt;   for f in dc.common_dirs:&lt;br /&gt;       doTree( "%s/%s" % ( localPath, f ), "%s/%s" % ( workingCopyPath, f ) )&lt;br /&gt;&lt;br /&gt;doTree( cfg.localPath, workingCopyDirName )&lt;br /&gt;&lt;br /&gt;print "Done synching"&lt;br /&gt;print "Working copy at '%s'" % workingCopyDirName&lt;br /&gt;  &lt;br /&gt;if cfg.getCheckin():&lt;br /&gt;   print "Commiting changes"&lt;br /&gt;   client.checkin( workingCopyDirName, cfg.message )&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-4402047230273034879?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/4402047230273034879/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=4402047230273034879' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/4402047230273034879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/4402047230273034879'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2008/02/ikiwiki.html' title='ikiwiki'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-7140743890151168854</id><published>2008-01-20T23:35:00.000-08:00</published><updated>2008-01-20T23:41:00.377-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>While writing Python programs is fun...</title><content type='html'>...running them is often not:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ cat terrain-python-time.txt&lt;br /&gt;188.88user 0.44system 3:11.25elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k&lt;br /&gt;0inputs+0outputs (0major+138477minor)pagefaults 0swaps&lt;br /&gt;&lt;br /&gt;$ cat terrain-cpp-time.txt&lt;br /&gt;0.29user 0.01system 0:00.31elapsed 97%CPU (0avgtext+0avgdata 0maxresident)k&lt;br /&gt;0inputs+0outputs (1major+7698minor)pagefaults 0swaps&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-7140743890151168854?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/7140743890151168854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=7140743890151168854' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/7140743890151168854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/7140743890151168854'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2008/01/while-writing-python-programs-is-fun.html' title='While writing Python programs is fun...'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-7360688977722819041</id><published>2007-12-02T18:12:00.000-08:00</published><updated>2007-12-02T18:28:41.725-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='subsurfer'/><category scheme='http://www.blogger.com/atom/ns#' term='platformer'/><title type='text'>Platform project video</title><content type='html'>&lt;object width="425" height="350"&gt; &lt;param name="movie" value="http://www.youtube.com/v/MoiYFxQjQ0g"&gt; &lt;/param&gt; &lt;embed src="http://www.youtube.com/v/MoiYFxQjQ0g" type="application/x-shockwave-flash" width="425" height="350"&gt; &lt;/embed&gt; &lt;/object&gt;&lt;br /&gt;&lt;br /&gt;An early look at my platform project, codenamed "Boing". Shown here is the booster mechanic, and you will also be able to shoot projectiles. The whole concept is obviously inspired by Yoshi's Island :-) The physics are still a bit rough. The platform is my usual libtmepp and libtmxpp C++ libraries, the content tool chest once again contains &lt;a href="http://gimp.org/"&gt;The Gimp&lt;/a&gt;, &lt;a href="http://mapeditor.org/"&gt;Tiled&lt;/a&gt; and &lt;a href="http://subsurfer.wiki.sourceforge.net/"&gt;Subsurfer&lt;/a&gt; for sprite indexing and animation. &lt;br /&gt;&lt;br /&gt;I took a couple of new &lt;a href="http://subsurfer.wiki.sourceforge.net/Screenshots"&gt;screenshots&lt;/a&gt; in the process. Subsurfer has seen some progress lately and it I will hopefully put out an official release before the year ends.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-7360688977722819041?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/7360688977722819041/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=7360688977722819041' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/7360688977722819041'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/7360688977722819041'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2007/12/platform-project-video.html' title='Platform project video'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-420859723101305619</id><published>2007-12-02T09:46:00.000-08:00</published><updated>2007-12-02T09:49:05.055-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='platformer'/><title type='text'>Hacking on a platform game</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_mphPyo-9RXM/R1Lv0KhWjxI/AAAAAAAAADE/s4VhZsf-jsY/s1600-R/boing02.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_mphPyo-9RXM/R1Lv0KhWjxI/AAAAAAAAADE/8VpAJpACsY4/s400/boing02.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5139433804239638290" /&gt;&lt;/a&gt;&lt;br /&gt;Yet another project :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-420859723101305619?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/420859723101305619/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=420859723101305619' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/420859723101305619'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/420859723101305619'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2007/12/hacking-on-platform-game.html' title='Hacking on a platform game'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_mphPyo-9RXM/R1Lv0KhWjxI/AAAAAAAAADE/8VpAJpACsY4/s72-c/boing02.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-5642630885271381854</id><published>2007-11-27T12:19:00.000-08:00</published><updated>2007-11-27T12:27:47.008-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><title type='text'>Akuji the Demon</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_mphPyo-9RXM/R0x9C0pJ2pI/AAAAAAAAACs/hCXfGGfJOyY/s1600-h/akuji01.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_mphPyo-9RXM/R0x9C0pJ2pI/AAAAAAAAACs/hCXfGGfJOyY/s400/akuji01.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5137618762367359634" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_mphPyo-9RXM/R0x9LUpJ2qI/AAAAAAAAAC0/YYRsf4HhB-c/s1600-h/akuji10.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_mphPyo-9RXM/R0x9LUpJ2qI/AAAAAAAAAC0/YYRsf4HhB-c/s400/akuji10.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5137618908396247714" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_mphPyo-9RXM/R0x9bEpJ2rI/AAAAAAAAAC8/FZ34bq3K71M/s1600-h/akuji11.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_mphPyo-9RXM/R0x9bEpJ2rI/AAAAAAAAAC8/FZ34bq3K71M/s400/akuji11.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5137619178979187378" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Akuji the Demon is another game from Buster, the creator of &lt;a href="http://henzenmann.blogspot.com/2007/10/guardian-of-paradise.html"&gt;Guardian of Paradise&lt;/a&gt;. This one is inspired by the "Metrovania" games and once more features very nice pixel art and gameplay. Download including english patch is available &lt;a href="http://www.the-underdogs.info/game.php?id=4160"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-5642630885271381854?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/5642630885271381854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=5642630885271381854' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/5642630885271381854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/5642630885271381854'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2007/11/akuji-demon.html' title='Akuji the Demon'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_mphPyo-9RXM/R0x9C0pJ2pI/AAAAAAAAACs/hCXfGGfJOyY/s72-c/akuji01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-2533632185144589380</id><published>2007-10-29T13:06:00.000-07:00</published><updated>2007-10-29T13:12:30.501-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><title type='text'>Guardian of Paradise</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_mphPyo-9RXM/RyY-OpScwVI/AAAAAAAAACk/CV_N1SKdGTo/s1600-h/guardian-of-paradise2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_mphPyo-9RXM/RyY-OpScwVI/AAAAAAAAACk/CV_N1SKdGTo/s400/guardian-of-paradise2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5126853647130214738" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_mphPyo-9RXM/RyY-FZScwUI/AAAAAAAAACc/bGMQeh2-uxw/s1600-h/guardian-of-paradise1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_mphPyo-9RXM/RyY-FZScwUI/AAAAAAAAACc/bGMQeh2-uxw/s400/guardian-of-paradise1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5126853488216424770" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I recently played this great little game. Another quality freeware title from Japan. The gameplay is very much Zelda-inspired, with a great unique element: over the length of the game you collect five spirits, and for each of those spirits you collect three abilities that help you to solve puzzles and fight enemies. This is a Windows game, but fortunately, like &lt;a href="http://en.wikipedia.org/wiki/Cave_story"&gt;Cave Story&lt;/a&gt;, it runs in Wine!&lt;br /&gt;&lt;br /&gt;English patch and download link are &lt;a href="http://agtp.romhack.net/project.php?id=rakuga"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-2533632185144589380?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/2533632185144589380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=2533632185144589380' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/2533632185144589380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/2533632185144589380'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2007/10/guardian-of-paradise.html' title='Guardian of Paradise'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_mphPyo-9RXM/RyY-OpScwVI/AAAAAAAAACk/CV_N1SKdGTo/s72-c/guardian-of-paradise2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-4387972864535374972</id><published>2007-08-01T16:35:00.000-07:00</published><updated>2007-08-01T16:51:56.227-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='google tech talks'/><title type='text'>Google talks</title><content type='html'>Some interesting Google Talks I have watched recently:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://video.google.com/videoplay?docid=-2077755378178864152"&gt;Compiling Dynamic Languages&lt;/a&gt; - about writing a Python compiler, using Ocaml as an intermediate language.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://video.google.com/videoplay?docid=2288395847791059857"&gt;The Implications of OpenID&lt;/a&gt; - A nice overview of what is possible with OpenID, a simple and elegant single-sign-on solution for web applications.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://video.google.com/videoplay?docid=9214177555401838409"&gt;Java Puzzlers, Episode VI&lt;/a&gt; - Very well presented talk/quiz highlighting some pitfalls in the Java language/APIs.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://video.google.com/videoplay?docid=1135114630744003385"&gt;Python for Programmers&lt;/a&gt; - A nice introduction to Python for people who already are familiar with other programming languages.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://video.google.com/videoplay?docid=-2199332044603874737"&gt;Linus Torvalds on git&lt;/a&gt; - Propaganda from the man himself :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-4387972864535374972?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/4387972864535374972/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=4387972864535374972' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/4387972864535374972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/4387972864535374972'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2007/08/google-talks.html' title='Google talks'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-5549969733269782056</id><published>2007-06-18T16:09:00.000-07:00</published><updated>2007-06-18T16:17:23.383-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='legend of the twin gems'/><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='freeeq'/><title type='text'>More videos...</title><content type='html'>I have been making some more videos of my game projects.&lt;br /&gt;&lt;br /&gt;Here is a first look at the battle system for "Legend of the Twin Gems":&lt;br /&gt;&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/qZWnsD0lVR4"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/qZWnsD0lVR4" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Also here are two of the newer levels from &lt;a href="http://home.gna.org/freeeq/"&gt;Freeeq&lt;/a&gt;:&lt;br /&gt;&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/7213iF7m0k0"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/7213iF7m0k0" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/ackkMaJfHvE"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/ackkMaJfHvE" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;To create the videos, I modified the SDL backend of libtmepp to save every seconds frame, using SDL_SaveBMP. I then encoded the individual frames using mencoder.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-5549969733269782056?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/5549969733269782056/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=5549969733269782056' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/5549969733269782056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/5549969733269782056'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2007/06/more-videos.html' title='More videos...'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-6159669170496048423</id><published>2007-06-15T12:40:00.000-07:00</published><updated>2007-12-02T11:52:32.666-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='dreamcast'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Hacking on an RPG...</title><content type='html'>I've always wanted to do an RGP, so I recently started working on one. It is called "Legend of the Twin Gems". The game will be heavily influenced by the &lt;a href="http://thalion.exotica.org.uk/games/amberstar/amberstar.html"&gt;legendary Amber series&lt;/a&gt;, created by &lt;a href="http://thalion.exotica.org.uk/index.html"&gt;Thalion&lt;/a&gt;, but also borrow some elements from the japanese school of RPGs.&lt;br /&gt;&lt;br /&gt;As usual, the game is programmed in C++ with &lt;a href="http://svn.gna.org/viewcvs/freeeq/trunk/libtmepp/"&gt;libtmepp&lt;/a&gt; and friends. Maps are created using &lt;a href="http://mapeditor.org"&gt;Tiled&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I am also doing some &lt;a href="http://eli-project.sourceforge.net/elionline4.4/index.html"&gt;code generation using Eli&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The game is currently running on GNU/Linux, with the usual Dreamcast and Windows ports planned.&lt;br /&gt;&lt;br /&gt;Here is an early look at the game:&lt;br /&gt;&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/zLBD8u6rBoI"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/zLBD8u6rBoI" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-6159669170496048423?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/6159669170496048423/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=6159669170496048423' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/6159669170496048423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/6159669170496048423'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2007/06/hacking-on-rpg.html' title='Hacking on an RPG...'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-8061376375427818167</id><published>2007-06-05T05:31:00.000-07:00</published><updated>2007-06-05T05:34:27.824-07:00</updated><title type='text'>Programming language humor</title><content type='html'>via &lt;a href="http://chistera.yi.org/~adeodato/blog/python_import_braces.html"&gt;Adeodato Simó&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    % python2.5 -c 'from __future__ import braces'&lt;br /&gt;      File "&lt;string&gt;", line 1&lt;br /&gt;    SyntaxError: not a chance&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-8061376375427818167?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/8061376375427818167/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=8061376375427818167' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/8061376375427818167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/8061376375427818167'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2007/06/programming-language-humor.html' title='Programming language humor'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-7839747037706575940</id><published>2007-05-19T10:15:00.000-07:00</published><updated>2007-05-19T11:23:17.068-07:00</updated><title type='text'>Playing with co-routines</title><content type='html'>I've been experimenting with various &lt;a href="http://en.wikipedia.org/wiki/Coroutines"&gt;co-routine&lt;/a&gt; implementations. I've been trying out a &lt;a href="http://www.codepost.org/browse/snippets/104"&gt;"switch(...)" based approach&lt;/a&gt;, the &lt;a href="http://www.akira.ruc.dk/%7Ekeld/research/COROUTINE/"&gt;COROUTINE C++ library&lt;/a&gt;, &lt;a href="http://plg.uwaterloo.ca/%7Eusystem/uC++.html"&gt;uC++&lt;/a&gt; (all C++ based), as well as &lt;a href="http://python.org/"&gt;Python&lt;/a&gt;, &lt;a href="http://www.lua.org/"&gt;Lua&lt;/a&gt; and &lt;a href="http://www.iolanguage.com/about/"&gt;Io&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;My test cases are programs that constructs 20000 counters and then call each one 300 times.&lt;br /&gt;&lt;br /&gt;First, here is a plain C++ program that I used as a reference:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; Counter {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="color: #800000;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; i;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  Counter() { i = &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;; }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="color: #800000;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; run() {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="font-style: italic;color: #808080;"&gt;// printf( "%d\n", i );&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;    i++;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #800000;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; main( &lt;/span&gt;&lt;span style="color: #800000;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; argc, &lt;/span&gt;&lt;span style="color: #800000;"&gt;char&lt;/span&gt;&lt;span style="color: #000000;"&gt;** argv ) {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  Counter counters[ &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;20000&lt;/span&gt;&lt;span style="color: #000000;"&gt; ];&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt;( &lt;/span&gt;&lt;span style="color: #800000;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; i = &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;; i &amp;lt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;60&lt;/span&gt;&lt;span style="color: #000000;"&gt; * &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;5&lt;/span&gt;&lt;span style="color: #000000;"&gt;; i++ ) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt;( &lt;/span&gt;&lt;span style="color: #800000;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; j = &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;; j &amp;lt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;20000&lt;/span&gt;&lt;span style="color: #000000;"&gt;; j++ ) {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;      counters[i].run();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This is the C++ program using the "switch" statements via preprocessor macros:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;color: #808080;"&gt;// new macro's&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;#define cr_context   int __s;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;#define cr_init()    __s = 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;#define cr_start()   switch (__s) { case 0:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;#define cr_return(x) { __s = __LINE__; return x; case __LINE__: ; }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;#define cr_end()     { break; default: for (;;) ; } } __s = 0; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; Counter {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  cr_context;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="color: #800000;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; i;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  Counter() { cr_init(); }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="color: #800000;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;operator&lt;/span&gt;&lt;span style="color: #000000;"&gt;() () {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;    cr_start();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;while&lt;/span&gt;&lt;span style="color: #000000;"&gt;( &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt; ) {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;      &lt;/span&gt;&lt;span style="font-style: italic;color: #808080;"&gt;// printf( "%d\n", i );&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;      i++;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;      cr_return();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;    cr_end();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #800000;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; main( &lt;/span&gt;&lt;span style="color: #800000;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; argc, &lt;/span&gt;&lt;span style="color: #800000;"&gt;char&lt;/span&gt;&lt;span style="color: #000000;"&gt;** argv ) {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  Counter counters[ &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;20000&lt;/span&gt;&lt;span style="color: #000000;"&gt; ];&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt;( &lt;/span&gt;&lt;span style="color: #800000;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; i = &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;; i &amp;lt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;60&lt;/span&gt;&lt;span style="color: #000000;"&gt; * &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;5&lt;/span&gt;&lt;span style="color: #000000;"&gt;; i++ ) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt;( &lt;/span&gt;&lt;span style="color: #800000;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; j = &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;; j &amp;lt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;20000&lt;/span&gt;&lt;span style="color: #000000;"&gt;; j++ ) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;      counters[ i ]();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The benefits of this approach are the very easy implementation as well as the performance. The main drawback is that you cannot use the stack, so the variables and objects the co-routine uses have to be declared as class members ("i" in this example).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The third C++ program uses the COROUTINE library:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;#include "coroutine.h"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; Counter : &lt;/span&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; Coroutine {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="color: #800000;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Routine() {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #800000;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; i;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;while&lt;/span&gt;&lt;span style="color: #000000;"&gt;( &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt; ) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;      &lt;/span&gt;&lt;span style="font-style: italic;color: #808080;"&gt;// printf( "%d\n", i );&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;      i++;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;      Detach();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;Coroutine* counters[ &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;20000&lt;/span&gt;&lt;span style="color: #000000;"&gt; ];&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #800000;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; DoMain() {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt;( &lt;/span&gt;&lt;span style="color: #800000;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; i = &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;; i &amp;lt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;20000&lt;/span&gt;&lt;span style="color: #000000;"&gt;; i++ )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;    counters[i] = &lt;/span&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; Counter;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt;( &lt;/span&gt;&lt;span style="color: #800000;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; i = &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;; i &amp;lt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;60&lt;/span&gt;&lt;span style="color: #000000;"&gt; * &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;5&lt;/span&gt;&lt;span style="color: #000000;"&gt;; i++ ) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt;( &lt;/span&gt;&lt;span style="color: #800000;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; j = &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;; j &amp;lt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;20000&lt;/span&gt;&lt;span style="color: #000000;"&gt;; j++ ) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;      Resume( counters[i] );&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #800000;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; main( &lt;/span&gt;&lt;span style="color: #800000;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; argc, &lt;/span&gt;&lt;span style="color: #800000;"&gt;char&lt;/span&gt;&lt;span style="color: #000000;"&gt;** argv )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  Sequencing( DoMain() )&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The COROUTINE library comes with two implementation, copy-stack and share-stack. The copy-stack implementation is way slower than the share-stack one for this example (see below).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The fourth program uses uC++:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;#include &amp;lt;u++/uC++.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;_Coroutine Counter {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="color: #800000;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; main() {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #800000;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; i = &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;while&lt;/span&gt;&lt;span style="color: #000000;"&gt;( &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt; ) {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;      &lt;/span&gt;&lt;span style="font-style: italic;color: #808080;"&gt;// printf( "%d\n", i );&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;      i++;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;      uSuspend;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  Counter() {}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="color: #800000;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; run() {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;    uResume;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;Counter counters[ &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;20000&lt;/span&gt;&lt;span style="color: #000000;"&gt; ];&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #800000;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; uMain::main() {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt;( &lt;/span&gt;&lt;span style="color: #800000;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; j = &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;; j &amp;lt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;60&lt;/span&gt;&lt;span style="color: #000000;"&gt; * &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;5&lt;/span&gt;&lt;span style="color: #000000;"&gt;; j++ )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt;( &lt;/span&gt;&lt;span style="color: #800000;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; i = &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;; i &amp;lt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;20000&lt;/span&gt;&lt;span style="color: #000000;"&gt;; i++ )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;      counters[i].run();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;uC++ translates the code above into a C++ program and provides a runtime library to link to. The implementation seems to be similar to the COROUTINE library's copy-stack implementation, resulting in the same poor performance for this example.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The Python program:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="font-style: italic;color: #808080;"&gt;#!/usr/bin/env python&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;def&lt;/span&gt;&lt;span style="color: #000000;"&gt; Counter&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;():&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;    i &lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;0&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;while&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;(&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;True&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;):&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;        i &lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;+=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;        &lt;/span&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;yield&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;counters &lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;[]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;        &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt; i &lt;/span&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800000;"&gt;range&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;20000&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;):&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;    counters.append&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;(&lt;/span&gt;&lt;span style="color: #000000;"&gt; Counter&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;()&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt; j &lt;/span&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800000;"&gt;range&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;(&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;60&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;*&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;5&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;):&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt; i &lt;/span&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800000;"&gt;range&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;20000&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;):&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;        counters&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;[&lt;/span&gt;&lt;span style="color: #000000;"&gt;i&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;]&lt;/span&gt;&lt;span style="color: #000000;"&gt;.next&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The Python example uses generators and was tested with standard Python 2.4.4. It would be interesting to see how the performance compares to other implementations such as &lt;a href="http://stackless.com/"&gt;Stackless Python&lt;/a&gt;. I might check it out later :-)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The Lua program:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;function&lt;/span&gt;&lt;span style="color: #000000;"&gt; Counter()&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;   &lt;/span&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;local&lt;/span&gt;&lt;span style="color: #000000;"&gt; i = &lt;/span&gt;&lt;span style="color: #008080;"&gt;0&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;   &lt;/span&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;while&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt; &amp;gt; &lt;/span&gt;&lt;span style="color: #008080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;do&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;      &lt;/span&gt;&lt;span style="font-style: italic;color: #808080;"&gt;-- print( i )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;      i = i + &lt;/span&gt;&lt;span style="color: #008080;"&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;      coroutine.yield()&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;   &lt;/span&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;counters = {}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt; i = &lt;/span&gt;&lt;span style="color: #008080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;, &lt;/span&gt;&lt;span style="color: #008080;"&gt;19999&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;do&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;   counters[ i ] = coroutine.create( Counter )&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt; i = &lt;/span&gt;&lt;span style="color: #008080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;, &lt;/span&gt;&lt;span style="color: #008080;"&gt;60&lt;/span&gt;&lt;span style="color: #000000;"&gt; * &lt;/span&gt;&lt;span style="color: #008080;"&gt;5&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;do&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;   &lt;/span&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt; j = &lt;/span&gt;&lt;span style="color: #008080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;, &lt;/span&gt;&lt;span style="color: #008080;"&gt;19999&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;do&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;      coroutine.resume( counters[ j ] )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;   &lt;/span&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;color: #000000;"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And finally the Io program:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;Counter := Object clone do (&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  newSlot( "coroutine" )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  newSlot( "nextCoroutine" )&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  init := method( &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;    coroutine = coroDo (&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;      pause&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;      i := 0&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;      while( 1 &amp;gt; 0,&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;        // i println&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;        i = i + 1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;        nextCoroutine resume&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;      )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;    )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  )&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  run := method( &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;    nextCoroutine = Coroutine currentCoro&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;    coroutine resume&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;counters := List clone&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;20000 repeat(&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  counters append( Counter clone )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;( 60 * 5 ) repeat (&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  counters foreach( c,&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;    c run&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;  )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Unfortunately, the Io interpreter/VM encountered a massive memory leak or garbage collection failure with this example. I had to Ctrl-C out of it after it ate all of my 1GB RAM and the computer started swapping manically :-( But Io seems to be a very interesting Language, so I will try again once that problem gets solved.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Performance:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Implementation                  Time (s)&lt;br /&gt;===========================================&lt;br /&gt;Function calls (for reference)  0.03&lt;br /&gt;Switch macros                   0.06&lt;br /&gt;Library (shared stack)          0.75&lt;br /&gt;Python 2.4.4 (generators)       4.01&lt;br /&gt;Lua 5                           4.07&lt;br /&gt;uC++                            4.82&lt;br /&gt;Library (copied stack)          4.87&lt;br /&gt;Io                              Memory leak&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_mphPyo-9RXM/Rk80CSU0g6I/AAAAAAAAACU/vzIhpSAHJVw/s1600-h/coroutine-results1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_mphPyo-9RXM/Rk80CSU0g6I/AAAAAAAAACU/vzIhpSAHJVw/s400/coroutine-results1.png" alt="" id="BLOGGER_PHOTO_ID_5066325319698645922" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-7839747037706575940?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/7839747037706575940/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=7839747037706575940' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/7839747037706575940'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/7839747037706575940'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2007/05/playing-with-co-routines.html' title='Playing with co-routines'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_mphPyo-9RXM/Rk80CSU0g6I/AAAAAAAAACU/vzIhpSAHJVw/s72-c/coroutine-results1.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-5820591039428627242</id><published>2007-05-13T09:50:00.000-07:00</published><updated>2007-05-13T09:55:25.342-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='retro core'/><category scheme='http://www.blogger.com/atom/ns#' term='games'/><title type='text'>Retro Core 32 - The Final</title><content type='html'>Yakumo has made Retro Core Volume 32 &lt;a href="http://www.archive.org/details/RetroCore_Volume32-The_Final"&gt;available for download&lt;/a&gt;.&lt;br /&gt;He says that this is the final episode since he has become a father and can't spend the time on Retro Core any more. Well, congratulations to him and thanks for all the episodes and specials so far!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-5820591039428627242?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/5820591039428627242/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=5820591039428627242' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/5820591039428627242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/5820591039428627242'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2007/05/retro-core-32-final.html' title='Retro Core 32 - The Final'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-6226486462391605934</id><published>2007-04-10T11:37:00.000-07:00</published><updated>2007-04-10T11:39:01.269-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='retro core'/><category scheme='http://www.blogger.com/atom/ns#' term='games'/><title type='text'>Retro Core 31...</title><content type='html'>It's that time of month again :-)&lt;br /&gt;&lt;br /&gt;Retro Core 31 is &lt;a href="http://www.archive.org/details/Retro_Core_Volume_31"&gt;available for download&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-6226486462391605934?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/6226486462391605934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=6226486462391605934' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/6226486462391605934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/6226486462391605934'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2007/04/retro-core-31.html' title='Retro Core 31...'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-8339000736014773261</id><published>2007-03-19T07:08:00.000-07:00</published><updated>2007-03-19T07:11:05.943-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='retro core'/><category scheme='http://www.blogger.com/atom/ns#' term='games'/><title type='text'>Retro Core 30...</title><content type='html'>Retro Core Volume 30 is &lt;a href="http://www.archive.org/details/Retro_Core_Volume_30"&gt;available for download&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-8339000736014773261?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/8339000736014773261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=8339000736014773261' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/8339000736014773261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/8339000736014773261'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2007/03/retro-core-30.html' title='Retro Core 30...'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-4241398023114032219</id><published>2007-03-19T06:51:00.000-07:00</published><updated>2007-03-19T07:28:20.274-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='bulletml'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Hacking on a shmup/STG</title><content type='html'>I wanted to check out &lt;a href="http://www.asahi-net.or.jp/~cs8k-cyu/bulletml/index_e.html"&gt;BulletML&lt;/a&gt; some more, so I started hacking on a shmup. It uses &lt;a href="http://shinh.skr.jp/libbulletml/index_en.html"&gt;libbulletml&lt;/a&gt; for processing the BulletML scripts, and my usual &lt;a href="http://svn.gna.org/viewcvs/freeeq/trunk/libtmepp/"&gt;libtmepp&lt;/a&gt; as the platform (made some changes that I will merge soon).&lt;br /&gt;&lt;br /&gt;Here are some screenshots:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_mphPyo-9RXM/Rf6Yq8VtZdI/AAAAAAAAAB4/5VIQH8vg-P4/s1600-h/collectmode_shot_002.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_mphPyo-9RXM/Rf6Yq8VtZdI/AAAAAAAAAB4/5VIQH8vg-P4/s400/collectmode_shot_002.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5043636496220644818" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_mphPyo-9RXM/Rf6Y1cVtZeI/AAAAAAAAACA/6ptxFcF_Kd4/s1600-h/collectmode_shot_003.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_mphPyo-9RXM/Rf6Y1cVtZeI/AAAAAAAAACA/6ptxFcF_Kd4/s400/collectmode_shot_003.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5043636676609271266" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_mphPyo-9RXM/Rf6Y-MVtZfI/AAAAAAAAACI/XR4qy7MNFHE/s1600-h/collectmode_shot_004.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_mphPyo-9RXM/Rf6Y-MVtZfI/AAAAAAAAACI/XR4qy7MNFHE/s400/collectmode_shot_004.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5043636826933126642" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-4241398023114032219?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/4241398023114032219/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=4241398023114032219' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/4241398023114032219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/4241398023114032219'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2007/03/hacking-on-shmupstg.html' title='Hacking on a shmup/STG'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_mphPyo-9RXM/Rf6Yq8VtZdI/AAAAAAAAAB4/5VIQH8vg-P4/s72-c/collectmode_shot_002.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-5544949314002622875</id><published>2007-02-14T16:20:00.000-08:00</published><updated>2007-02-14T17:07:58.763-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='realtime'/><title type='text'>hrtimers</title><content type='html'>I &lt;a href="http://kerneltrap.org/node/7699"&gt;recently read&lt;/a&gt; that the &lt;a href="http://www.tglx.de/hrtimers.html"&gt;hrtimers patches&lt;/a&gt; are finally gonna be merged into the official Linux tree soon.&lt;br /&gt; &lt;br /&gt;To see how this will benefit realtime related programming, I wrote a little benchmark. The code basically tries to wake up every 1/85 seconds and then measures the delay between ideal and actual wakeup time. The code was run once as a normal user, once as root with SCHED_FIFO scheduling. All values are in nanoseconds.&lt;br /&gt;&lt;br /&gt;These are the results:&lt;br /&gt;&lt;br /&gt;&lt;table border="1"&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td colspan="2"&gt;2.6.19rc6 vanilla&lt;/td&gt;&lt;td colspan="2"&gt;2.6.20-hrt-dynticks1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;user&lt;/td&gt;&lt;td&gt;root (SCHED_FIFO)&lt;/td&gt;&lt;td&gt;user&lt;/td&gt;&lt;td&gt;root (SCHED_FIFO)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;min&lt;/td&gt;&lt;td&gt;2809853&lt;/td&gt;&lt;td&gt;2331812&lt;/td&gt;&lt;td&gt;2939&lt;/td&gt;&lt;td&gt;2803&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;max&lt;/td&gt;&lt;td&gt;10877151&lt;/td&gt;&lt;td&gt;10091750&lt;/td&gt;&lt;td&gt;393117&lt;/td&gt;&lt;td&gt;226885&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;avg&lt;/td&gt;&lt;td&gt;6862276&lt;/td&gt;&lt;td&gt;6208266&lt;/td&gt;&lt;td&gt;37788&lt;/td&gt;&lt;td&gt;30500&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_mphPyo-9RXM/RdOozZBltqI/AAAAAAAAABg/N48ON0v4QhM/s1600-h/linux-wakeup-latencies-hrtimers_sheet2_html_m57fb2c7f.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_mphPyo-9RXM/RdOozZBltqI/AAAAAAAAABg/N48ON0v4QhM/s400/linux-wakeup-latencies-hrtimers_sheet2_html_m57fb2c7f.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5031550809547323042" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_mphPyo-9RXM/RdOozZBltrI/AAAAAAAAABo/bz9NBQ0lurI/s1600-h/linux-wakeup-latencies-hrtimers_sheet3_html_676070c7.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_mphPyo-9RXM/RdOozZBltrI/AAAAAAAAABo/bz9NBQ0lurI/s400/linux-wakeup-latencies-hrtimers_sheet3_html_676070c7.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5031550809547323058" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As you can see, the latencies are greatly reduced. From a worst case of about 10 milliseconds without hrtimers to a worst case of about 0.4 milliseconds with the patch. The average latency even goes down from about 6 milliseconds to 0.04 milliseconds.&lt;br /&gt;&lt;br /&gt;Here is the code (remember to compile with -lrt):&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#include &lt;sched.h&gt;&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;#include &lt;stdlib.h&gt;&lt;br /&gt;#include &lt;time.h&gt;&lt;br /&gt;#include &lt;unistd.h&gt;&lt;br /&gt;&lt;br /&gt;#define FREQUENCY 85&lt;br /&gt;#define PERIOD ( 1000000000 / FREQUENCY )&lt;br /&gt;#define ITERATIONS ( FREQUENCY * 10 )&lt;br /&gt;&lt;br /&gt;int64_t timespec_to_nsec( struct timespec* ts ) { &lt;br /&gt;&lt;br /&gt;  return (int64_t)ts-&gt;tv_sec * 1000000000LL + (int64_t)ts-&gt;tv_nsec;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int main( int argc, char** argv ) {&lt;br /&gt;&lt;br /&gt;  int err;&lt;br /&gt;  struct timespec t;&lt;br /&gt;  int i;&lt;br /&gt;  int64_t errors[ ITERATIONS ];&lt;br /&gt;  &lt;br /&gt;  struct sched_param sp;&lt;br /&gt;  &lt;br /&gt;  memset( &amp;sp, 0, sizeof( sp ) );&lt;br /&gt;  sp.sched_priority = 99;&lt;br /&gt;  &lt;br /&gt;  err = sched_setscheduler( getpid(), SCHED_FIFO, &amp;sp );&lt;br /&gt;  if( err != 0 ) perror( "sched_setscheduler" );&lt;br /&gt;&lt;br /&gt;  err = clock_gettime( CLOCK_MONOTONIC, &amp;t );&lt;br /&gt;  if( err != 0 ) { perror( "clock_gettime" ); exit( 1 ); }&lt;br /&gt;  &lt;br /&gt;  for( i = 0; i &lt; ITERATIONS; i++ ) {&lt;br /&gt;&lt;br /&gt;    struct timespec t2;&lt;br /&gt;&lt;br /&gt;    t.tv_nsec += PERIOD;&lt;br /&gt;    &lt;br /&gt;    while( t.tv_nsec &gt;= 1000000000 ) {&lt;br /&gt;      &lt;br /&gt;      t.tv_sec += 1;&lt;br /&gt;      t.tv_nsec -= 1000000000;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    err = clock_nanosleep( CLOCK_MONOTONIC, TIMER_ABSTIME, &amp;t, 0 );&lt;br /&gt;    if( err != 0 ) { perror( "clock_nanosleep" ); exit( 1 ); }&lt;br /&gt;&lt;br /&gt;    err = clock_gettime( CLOCK_MONOTONIC, &amp;t2 );&lt;br /&gt;    if( err != 0 ) { perror( "clock_gettime" ); exit( 1 ); }&lt;br /&gt;&lt;br /&gt;    errors[ i ] = timespec_to_nsec( &amp;t2 ) - timespec_to_nsec( &amp;t );&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  int64_t min = 1000000000;&lt;br /&gt;  int64_t max = 0;&lt;br /&gt;  int64_t acc = 0;&lt;br /&gt;&lt;br /&gt;  for( i = 0; i &lt; ITERATIONS; i++ ) {&lt;br /&gt;&lt;br /&gt;    int64_t e = errors[ i ];&lt;br /&gt;&lt;br /&gt;    printf( "  %lld\n", e );&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    if( e &gt; max ) max = e;&lt;br /&gt;    if( e &lt; min ) min = e;&lt;br /&gt;    acc += e;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  acc /= ITERATIONS;&lt;br /&gt;&lt;br /&gt;  printf( "min: %lld\n", min );&lt;br /&gt;  printf( "max: %lld\n", max );&lt;br /&gt;  printf( "avg: %lld\n", acc );&lt;br /&gt;&lt;br /&gt;  return 0;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-5544949314002622875?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/5544949314002622875/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=5544949314002622875' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/5544949314002622875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/5544949314002622875'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2007/02/hrtimers.html' title='hrtimers'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_mphPyo-9RXM/RdOozZBltqI/AAAAAAAAABg/N48ON0v4QhM/s72-c/linux-wakeup-latencies-hrtimers_sheet2_html_m57fb2c7f.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-4573323102704535372</id><published>2007-02-10T15:19:00.000-08:00</published><updated>2007-02-01T04:07:26.438-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='retro core'/><category scheme='http://www.blogger.com/atom/ns#' term='games'/><title type='text'>Retro Core 29</title><content type='html'>&lt;a href="http://segagagadomain.com/RetroCorepage-main.htm"&gt;Retro Core&lt;/a&gt; Volume 29 is &lt;a href="http://www.archive.org/details/Retro_Core_Volume_29"&gt;available for download&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-4573323102704535372?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/4573323102704535372/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=4573323102704535372' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/4573323102704535372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/4573323102704535372'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2007/02/retro-core-29.html' title='Retro Core 29'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-9002012581054798126</id><published>2007-02-01T04:04:00.000-08:00</published><updated>2007-02-01T04:07:26.486-08:00</updated><title type='text'>Never Forget!!!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_mphPyo-9RXM/RcHXdCHKQOI/AAAAAAAAABU/jiQYJnGLSo0/s1600-h/never-forget-376236399_a5636e8579_o.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_mphPyo-9RXM/RcHXdCHKQOI/AAAAAAAAABU/jiQYJnGLSo0/s400/never-forget-376236399_a5636e8579_o.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5026535552905265378" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;via &lt;a href="http://www.makezine.com/blog/archive/2007/02/boston_moonimit.html"&gt;Make&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-9002012581054798126?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/9002012581054798126/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=9002012581054798126' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/9002012581054798126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/9002012581054798126'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2007/02/never-forget.html' title='Never Forget!!!'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_mphPyo-9RXM/RcHXdCHKQOI/AAAAAAAAABU/jiQYJnGLSo0/s72-c/never-forget-376236399_a5636e8579_o.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-9058904950962217903</id><published>2007-01-10T10:23:00.000-08:00</published><updated>2007-01-10T10:56:04.103-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='rogueshooter'/><title type='text'>Yet another project...</title><content type='html'>One of these days I should really finish some of my projects :)&lt;br /&gt;&lt;br /&gt;Meanwhile, here are some screenshots of a new project I have been working on &lt;br /&gt;though my christmas vacation. Working title: "Rogueshooter". The general concept can be described as "Diablo meets Ikari Warriors", with some Metroidish elements thrown in. You explore an abandoned space station, blasting away at evil aliens, finding keys and power-ups, secret doors etc. I am re-using the tile/sprite "engine" from &lt;a href="http://home.gna.org/freeeq/"&gt;freeeq&lt;/a&gt;. The game is still in an early state. Not much of the actual gameplay is implemented yet.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_mphPyo-9RXM/RaUxSOWLaoI/AAAAAAAAAAY/yuhQcJhYAt4/s1600-h/probe01.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_mphPyo-9RXM/RaUxSOWLaoI/AAAAAAAAAAY/yuhQcJhYAt4/s400/probe01.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5018471548932811394" /&gt;&lt;/a&gt;&lt;br /&gt;First prototype of the map generator&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_mphPyo-9RXM/RaUxSuWLapI/AAAAAAAAAAg/jc3CT90i9UQ/s1600-h/probe02.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_mphPyo-9RXM/RaUxSuWLapI/AAAAAAAAAAg/jc3CT90i9UQ/s400/probe02.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5018471557522746002" /&gt;&lt;/a&gt;&lt;br /&gt;Critter generators spawning enemies&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_mphPyo-9RXM/RaUxSuWLaqI/AAAAAAAAAAo/RQxJIiZ-c2w/s1600-h/probe03.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_mphPyo-9RXM/RaUxSuWLaqI/AAAAAAAAAAo/RQxJIiZ-c2w/s400/probe03.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5018471557522746018" /&gt;&lt;/a&gt;&lt;br /&gt;At an exit point one can transfer to the next level&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_mphPyo-9RXM/RaUxS-WLarI/AAAAAAAAAAw/YvQK9qC8vw4/s1600-h/probe05.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_mphPyo-9RXM/RaUxS-WLarI/AAAAAAAAAAw/YvQK9qC8vw4/s400/probe05.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5018471561817713330" /&gt;&lt;/a&gt;&lt;br /&gt;Main menu&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_mphPyo-9RXM/RaUxS-WLasI/AAAAAAAAAA4/_aw96CS0tf0/s1600-h/probe06.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_mphPyo-9RXM/RaUxS-WLasI/AAAAAAAAAA4/_aw96CS0tf0/s400/probe06.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5018471561817713346" /&gt;&lt;/a&gt;&lt;br /&gt;Just shot an enemy :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-9058904950962217903?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/9058904950962217903/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=9058904950962217903' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/9058904950962217903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/9058904950962217903'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2007/01/yet-another-project.html' title='Yet another project...'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_mphPyo-9RXM/RaUxSOWLaoI/AAAAAAAAAAY/yuhQcJhYAt4/s72-c/probe01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-8096314396928027078</id><published>2007-01-10T03:51:00.000-08:00</published><updated>2007-01-10T03:53:00.771-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='retro core'/><category scheme='http://www.blogger.com/atom/ns#' term='games'/><title type='text'>Retro Core 28...</title><content type='html'>... is &lt;a href="http://www.archive.org/details/RetroCore_Volume28"&gt;available for download&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-8096314396928027078?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/8096314396928027078/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=8096314396928027078' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/8096314396928027078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/8096314396928027078'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2007/01/retro-core-28.html' title='Retro Core 28...'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-7999010993443161530</id><published>2006-12-05T10:20:00.000-08:00</published><updated>2006-12-05T10:33:20.491-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='atmel'/><category scheme='http://www.blogger.com/atom/ns#' term='microcontroller'/><category scheme='http://www.blogger.com/atom/ns#' term='usb'/><title type='text'>Working on my Microcontroller board</title><content type='html'>I've begun building my microcontroller board:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_mphPyo-9RXM/RXW40azlZ6I/AAAAAAAAAAM/yvUzsMDXIYE/s1600-h/ucboard01.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_mphPyo-9RXM/RXW40azlZ6I/AAAAAAAAAAM/yvUzsMDXIYE/s400/ucboard01.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5005109771580565410" /&gt;&lt;/a&gt;&lt;br /&gt;I got an ATmega128 on a rather convenient adapter, which already includes a 16MHz oscillator. On the top there is the FT232 TinyBoard, which I also used in the &lt;a href="http://henzenmann.blogspot.com/2006/08/this-is-first-version-of-my-usb-to.html"&gt;USB/DC-Serial adaptor&lt;/a&gt;. Right now it only serves as a power supply. The ATmega128 is connected to the ISP programmer and was already succesfully flashed/verified. Next I will try to hook up the FT232 and programm the Atmel to use the USART to talk to it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-7999010993443161530?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/7999010993443161530/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=7999010993443161530' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/7999010993443161530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/7999010993443161530'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2006/12/working-on-my-microcontroller-board.html' title='Working on my Microcontroller board'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_mphPyo-9RXM/RXW40azlZ6I/AAAAAAAAAAM/yvUzsMDXIYE/s72-c/ucboard01.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-6746889032419220341</id><published>2006-11-29T17:11:00.000-08:00</published><updated>2006-11-29T17:13:01.469-08:00</updated><title type='text'>All I want for Christmas...</title><content type='html'>Make magazine has a &lt;a href="http://www.makezine.com/blog/archive/2006/11/the_open_source_1.html"&gt;nice list of Christmas gifts for HW/SW hackers&lt;/a&gt; :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-6746889032419220341?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/6746889032419220341/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=6746889032419220341' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/6746889032419220341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/6746889032419220341'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2006/11/all-i-want-for-christmas.html' title='All I want for Christmas...'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-4119896111106766540</id><published>2006-11-29T09:25:00.000-08:00</published><updated>2006-11-29T09:41:34.058-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='electronics'/><category scheme='http://www.blogger.com/atom/ns#' term='atmel'/><category scheme='http://www.blogger.com/atom/ns#' term='ttl'/><category scheme='http://www.blogger.com/atom/ns#' term='microcontroller'/><category scheme='http://www.blogger.com/atom/ns#' term='logic'/><title type='text'>Chips</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger2/5544/621507693982973/1600/238808/chips1024.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/x/blogger2/5544/621507693982973/400/615733/chips1024.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I "inherited" some chips today.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-4119896111106766540?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/4119896111106766540/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=4119896111106766540' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/4119896111106766540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/4119896111106766540'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2006/11/chips.html' title='Chips'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-1574559195101428863</id><published>2006-11-22T16:14:00.000-08:00</published><updated>2006-11-22T16:24:00.101-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xilinx'/><category scheme='http://www.blogger.com/atom/ns#' term='atmel'/><category scheme='http://www.blogger.com/atom/ns#' term='maple bus'/><category scheme='http://www.blogger.com/atom/ns#' term='microcontroller'/><category scheme='http://www.blogger.com/atom/ns#' term='dreamcast'/><category scheme='http://www.blogger.com/atom/ns#' term='cpld'/><title type='text'>Playing with the Maple BUS...</title><content type='html'>I've recently begun working on a Maple BUS interface. My plan is to implement the wire protocol in a CPLD, and then use an Atmel microcontroller to implement the data protocol and a serial port interface.&lt;br /&gt;&lt;br /&gt;Here is a screenshot of a simulation running in Xilinx ISE WebPack:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger2/5544/621507693982973/1600/931757/MIE-SIM01.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/x/blogger2/5544/621507693982973/400/776747/MIE-SIM01.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This shows the reception of a frame with the header "ABCD" and the payload "HELLOWORLD!".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-1574559195101428863?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/1574559195101428863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=1574559195101428863' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/1574559195101428863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/1574559195101428863'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2006/11/playing-with-maple-bus.html' title='Playing with the Maple BUS...'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-3791126794729003150</id><published>2006-11-21T12:19:00.000-08:00</published><updated>2006-11-21T12:47:43.651-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='intel'/><category scheme='http://www.blogger.com/atom/ns#' term='g965'/><category scheme='http://www.blogger.com/atom/ns#' term='core 2 duo'/><title type='text'>New system...</title><content type='html'>My good old MSI K7T Motherboard became more and more unstable over the last two weeks, and by monday my computer was pretty much unusable. It had served me well for over five years. While I initally did not want to spend much money, I decided it was time for a decent upgrade after five years.&lt;br /&gt;&lt;br /&gt;So my new sytstem consists of a Gigabyte uATX mainboard with G965 chipset, Core 2 Duo @ 1800MHz and 2x512MB DDR2-800 RAM. The K7T had an Athlon C1000 and 512MB RAM on it, so this is quite a step up :-)&lt;br /&gt;&lt;br /&gt;I ordered the parts from &lt;a href="http://www.alternate.de"&gt;Alternate&lt;/a&gt;. I placed the order at about 18:45h yesterday and went for their express shipment option. Today at about 13:00 the Packet arrived. The shipping was only 20€ total. Well worth it if you are sitting at home without a working computer, counting the minutes ;-)&lt;br /&gt;&lt;br /&gt;Although I should mention that I still had an old P133 with Debian/woody installed, which made a brief return from retirement to help during the installation process.&lt;br /&gt;&lt;br /&gt;I went for an Intel G965 based motherboard, because I heard that there was good &lt;a href="http://lists.freedesktop.org/archives/xorg/2006-August/017404.html"&gt;Linux support&lt;/a&gt; (ie open source drivers, unlike ATI and NVidia products). Unfortunately it still seems to be a little rough around the edges. It takes a kernel &gt;= 2.6.18 for the IDE controller to work, and a kernel &gt;= 2.6.19  for the graphics to work. Also I had to use the xorg driver from git (&gt; 1.7.2) to get Xvideo support to work. Not much luck yet in the 3D department: glxgears crashes the X server after I maximize the window.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-3791126794729003150?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/3791126794729003150/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=3791126794729003150' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/3791126794729003150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/3791126794729003150'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2006/11/new-system.html' title='New system...'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-3694793458153577880</id><published>2006-11-19T05:57:00.000-08:00</published><updated>2006-11-19T05:58:59.789-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='retro core'/><category scheme='http://www.blogger.com/atom/ns#' term='games'/><title type='text'>Retro Core 26...</title><content type='html'>...is &lt;a href="http://www.archive.org/details/RetroCore_Volume26"&gt;available for download&lt;/a&gt;. Haven't watched it yet, but I'm sure it is good as always :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-3694793458153577880?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/3694793458153577880/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=3694793458153577880' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/3694793458153577880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/3694793458153577880'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2006/11/retro-core-26.html' title='Retro Core 26...'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-8129263808432792723</id><published>2006-11-03T16:45:00.000-08:00</published><updated>2006-11-03T17:05:30.348-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='dreamcast'/><category scheme='http://www.blogger.com/atom/ns#' term='gamecube'/><category scheme='http://www.blogger.com/atom/ns#' term='playstation'/><title type='text'>The memory card shuffle...</title><content type='html'>One of the things that keeps pissing me off is games that only support memory cards in the first slot. I'm sick and tired of switching them around. On Playstation it was annoying. On Dreamcast I usually have four VMUs connected, which makes it even more annoying. On GameCube, I simply find it unexcusable. By the time the system came out, support for using arbitrary slots should have been a built-in feature of the SDK or a requirement in the QA process. It is so easy to implement! Lots of games do it, but there are just as many that don't and it really drives me crazy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-8129263808432792723?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/8129263808432792723/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=8129263808432792723' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/8129263808432792723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/8129263808432792723'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2006/11/memory-card-shuffle.html' title='The memory card shuffle...'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-3445086047927561570</id><published>2006-11-03T04:21:00.000-08:00</published><updated>2006-11-03T04:32:59.539-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>The true meaning of "Ubuntu"...</title><content type='html'>(via &lt;a href="http://www.inittab.de/blog/true/20061102_quote-of-the-day.html"&gt;Norbert Tretkowski's Blog&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Ubuntu is an ancient African word meaning 'I can't configure Debian'.  &lt;br /&gt;   -- somewhere on IRC today&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Ubuntu_%28ideology%29"&gt;Ubuntu on Wikipedia&lt;/a&gt; &lt;br /&gt;&lt;a href="http://www.ubuntu.com/ubuntu"&gt;Ubuntu Linux&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-3445086047927561570?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/3445086047927561570/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=3445086047927561570' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/3445086047927561570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/3445086047927561570'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2006/11/true-meaning-of-ubuntu.html' title='The true meaning of &quot;Ubuntu&quot;...'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-8711669801636598775</id><published>2006-10-24T11:02:00.000-07:00</published><updated>2006-10-24T11:08:38.860-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sony'/><category scheme='http://www.blogger.com/atom/ns#' term='lik sang'/><category scheme='http://www.blogger.com/atom/ns#' term='imports'/><title type='text'>Sony hates gamers...</title><content type='html'>&lt;a href="http://www.lik-sang.com/news.php?artc=3901"&gt;This is fucking bullshit.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Mod-chips are already illegal in many places, and now you cannot even import Japanese consoles anymore? Screw this!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-8711669801636598775?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/8711669801636598775/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=8711669801636598775' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/8711669801636598775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/8711669801636598775'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2006/10/sony-hates-gamers.html' title='Sony hates gamers...'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-5926088972195555953</id><published>2006-10-17T12:09:00.000-07:00</published><updated>2006-10-18T03:04:28.515-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tiled'/><category scheme='http://www.blogger.com/atom/ns#' term='mapeditor'/><category scheme='http://www.blogger.com/atom/ns#' term='freeeq'/><title type='text'>Hacking on a map editor...</title><content type='html'>So far I have been using &lt;a href="http://www.mapeditor.org/"&gt;Tiled&lt;/a&gt; as the map editor for my project &lt;a href="http://home.gna.org/freeeq/"&gt;"freeeq"&lt;/a&gt;. It is written in Java and uses an XML file format. But it is also pretty basic at the moment. The feature I miss most is being able to  place objects freely on the map. Support for that has been planned for a long time, but no one seems to really actively pursue it. I have contributed a little bit to the project in the past, and I actually started working on object support for it, but I got discouraged because I'm not really familiar with Swing, and was in no mood to learn more about it. &lt;br /&gt;&lt;br /&gt;But then I remembered that I had some prototype map editor of my own somewhere on my harddisk that I had hacked up in an evening or two once. So I decided to work on it some more, and now it is actually in a semi-usable state. Still a lot of stuff missing of course, and I don't know if I'll ever finish it. &lt;br /&gt;&lt;br /&gt;It is written in C++ using Qt4 for the GUI, which is a much more comfortable platform for me. It also uses an XML file format similar to Tiled's.&lt;br /&gt;&lt;br /&gt;Here are some screenshots:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger2/5544/621507693982973/1600/mapeditor-r48-1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger2/5544/621507693982973/400/mapeditor-r48-1.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger2/5544/621507693982973/1600/mapeditor-r48-3.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger2/5544/621507693982973/400/mapeditor-r48-3.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger2/5544/621507693982973/1600/mapeditor-r48-2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger2/5544/621507693982973/400/mapeditor-r48-2.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-5926088972195555953?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/5926088972195555953/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=5926088972195555953' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/5926088972195555953'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/5926088972195555953'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2006/10/hacking-on-map-editor.html' title='Hacking on a map editor...'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-4979653434786651496</id><published>2006-10-17T12:02:00.000-07:00</published><updated>2006-10-18T03:05:04.408-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='retro core'/><category scheme='http://www.blogger.com/atom/ns#' term='games'/><title type='text'>Retro Core 25...</title><content type='html'>... is &lt;a href="http://www.archive.org/details/RetroCore-Volume25"&gt;available for download&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-4979653434786651496?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/4979653434786651496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=4979653434786651496' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/4979653434786651496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/4979653434786651496'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2006/10/retro-core-25.html' title='Retro Core 25...'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-8293972338728051789</id><published>2006-09-07T11:07:00.000-07:00</published><updated>2006-10-18T03:05:36.700-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='retro core'/><category scheme='http://www.blogger.com/atom/ns#' term='games'/><title type='text'>Retro Core 24 is out</title><content type='html'>&lt;a href="http://segagagadomain.com/RetroCorepage-main.htm"&gt;Retro Core&lt;/a&gt; Episode 24 is now &lt;a href="http://www.archive.org/details/RetroCore-Volume24"&gt;available for download&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-8293972338728051789?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/8293972338728051789/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=8293972338728051789' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/8293972338728051789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/8293972338728051789'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2006/09/retro-core-24-is-out.html' title='Retro Core 24 is out'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5091391029108520360.post-298641741755187910</id><published>2006-08-25T02:56:00.000-07:00</published><updated>2009-02-05T14:21:44.320-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dreamcast'/><category scheme='http://www.blogger.com/atom/ns#' term='usb'/><title type='text'>USB to Dreamcast serial port, version 1</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger2/5544/621507693982973/1600/dc-usb-step1-top-600.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger2/5544/621507693982973/400/dc-usb-step1-top-600.jpg" alt="" border="0" /&gt;&lt;/a&gt;This is the first version of my USB to Dreamcast serial port board. Thanks to &lt;a href="http://f17.aaa.livedoor.jp/%7Etakotako/index.php"&gt;JJ1ODM&lt;/a&gt; (aka chaos) for the &lt;a href="http://f17.aaa.livedoor.jp/~takotako/dcserial_ft232bm.php"&gt;circuit&lt;/a&gt;! See this &lt;a href="http://www.dcemulation.org/phpBB/viewtopic.php?t=78829"&gt;thread&lt;/a&gt; on dcemulation.org for details.&lt;br /&gt;&lt;br /&gt;On the left is a pre-built FT232BM USB-to-serial module I got &lt;a href="http://www.siphec.com/"&gt;here&lt;/a&gt;. At the top is the 24MHz oscillator that will force the DC serial port to 1500Kb/s, but in this version of the board it is not yet connected. So far I can upload at 500Kb/s with unmodified dc-tool/-load serial. Also missing in this version is a switching circuit to disable the buffer (the IC at the bottom) during the DC's reset phase. This means I currently have to plug in the USB cable after the DC has started.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger2/5544/621507693982973/1600/dc-usb-step1-bot-600.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger2/5544/621507693982973/400/dc-usb-step1-bot-600.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This is the bottom side of my board, so you can have a laugh at my soldering skills ;-)&lt;br /&gt;&lt;br /&gt;2009-02-05: Edit: Fixed some links :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5091391029108520360-298641741755187910?l=henzenmann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://henzenmann.blogspot.com/feeds/298641741755187910/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5091391029108520360&amp;postID=298641741755187910' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/298641741755187910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5091391029108520360/posts/default/298641741755187910'/><link rel='alternate' type='text/html' href='http://henzenmann.blogspot.com/2006/08/this-is-first-version-of-my-usb-to.html' title='USB to Dreamcast serial port, version 1'/><author><name>henzenmann</name><uri>http://www.blogger.com/profile/15608604147240009873</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry></feed>
