<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.isquared.nl/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">

<title>isquared.nl | RSS</title>
<link href="http://isquared.nl/" />

<id>http://isquared.nl/rss.xml</id>
<updated>2010-03-10T00:00:00Z</updated>
<author>
	<name>Hessel Schut</name>
	<email>hessel@isquared.nl</email>
</author>

	<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.isquared.nl/IsquaredRssFeed" /><feedburner:info uri="isquaredrssfeed" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><geo:lat>52.4</geo:lat><geo:long>5.29</geo:long><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-sa/2.0/" /><logo>http://isquared.nl/img/isquared.png</logo><feedburner:emailServiceId>IsquaredRssFeed</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><entry>
		<title>Fix for Thinkpad T400 WWAN on Ubuntu 9.10</title>
		<link href="http://feeds.isquared.nl/~r/IsquaredRssFeed/~3/clKvtxJLBJo/index.html" />
		<id>http://isquared.nl/index.html?pagelink=66</id>
		<updated>2010-02-25T20:51:08Z</updated>
		<content type="html">
			
		&lt;p&gt;
The builtin WWAN modem of Lenovo ThinkPad T400 laptops does not seem to wake properly when the laptop is suspended on Ubuntu.
&lt;/p&gt;

&lt;p&gt;
I have written a small Power Manager script to fix this problem, it seems that Ubuntu 9.10 (Karmic Koala) does not support wakeup scripts in /etc/acpi/resume.d anymore. &lt;br/&gt;
Although it tires me a bit how much Ubuntu seems to break in new releases lately, it was worthwhile to search for the mechanism "du jour".
It seems that scripts need to be placed in /etc/pm/sleep.d nowadays.
&lt;br/&gt;
Add the script below to a new file, /etc/pm/sleep.d/10_thinkpad_wwan, and it should be called upon suspend and resume to revive your modem on resume.
&lt;/p&gt;

&lt;p&gt;&lt;pre&gt;
#!/bin/sh

# Action script to reinitialize built-in WWAN of Lenovo ThinkPads
# on resume
#
# Hessel Schut, hessel@isquared.nl, 2010-02-25
#

PATH=/sbin:/usr/sbin:/bin:/usr/bin

case "${1}" in
        hibernate)
                # unload cdc_wdm module
                rmmod cdc_wdm
                ;;

        resume|thaw)
                # revive RF and reload cdc_wdm module
                echo 1 &gt; /sys/devices/platform/thinkpad_acpi/rfkill/rfkill1/state
                modprobe cdc_wdm

                ;;
esac

&lt;/pre&gt;&lt;/p&gt;


		&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=clKvtxJLBJo:IugX5T2AUqg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=clKvtxJLBJo:IugX5T2AUqg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=clKvtxJLBJo:IugX5T2AUqg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=clKvtxJLBJo:IugX5T2AUqg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=clKvtxJLBJo:IugX5T2AUqg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=clKvtxJLBJo:IugX5T2AUqg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=clKvtxJLBJo:IugX5T2AUqg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=clKvtxJLBJo:IugX5T2AUqg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IsquaredRssFeed/~4/clKvtxJLBJo" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://isquared.nl/index.html?article=66</feedburner:origLink></entry>

	<entry>
		<title>fi.sh - a Boids clone in Bash</title>
		<link href="http://feeds.isquared.nl/~r/IsquaredRssFeed/~3/ajse29LRENc/index.html" />
		<id>http://isquared.nl/index.html?pagelink=64</id>
		<updated>2010-02-22T20:29:02Z</updated>
		<content type="html">
			
                &lt;p&gt;After &lt;a href="http://isquared.nl/index.html?pagelink=27&amp;desc=squa.sh"&gt;squa.sh&lt;/a&gt;,
                I thought it was time for another abuse of the Bash shell. &lt;br/&gt;
                A few weeks ago I wrote &lt;i&gt;fi.sh&lt;/i&gt;, a simulation of flocking behaviour, like migrating birds or
                a school of fish, written in pure Bash and with ascii-art graphics, of course.
                &lt;/p&gt;

                &lt;p&gt;Fi.sh is inspired by the classic &lt;a href="http://en.wikipedia.org/wiki/Boids"&gt;Boids&lt;/a&gt; algorithm
                by Craig Reynolds. But since I wrote this in a week when I was in the middle of nowhere in Andalucia,
                without any means of connecting to the Internet it only uses two behaviours, instead of Reynolds&amp;rsquo; three,
                still the results look pretty convincing.
                &lt;p/&gt;

                &lt;p&gt;
                &lt;img src="/img/boidsOriginal.gif" alt="Reynolds&amp;rsquo; original Boids"/&gt; &lt;br/&gt;
                &lt;i&gt;Craig Reynolds original Boids&lt;/i&gt;
                &lt;/p&gt;


		&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=ajse29LRENc:dMPjYL-1AeM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=ajse29LRENc:dMPjYL-1AeM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=ajse29LRENc:dMPjYL-1AeM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=ajse29LRENc:dMPjYL-1AeM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=ajse29LRENc:dMPjYL-1AeM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=ajse29LRENc:dMPjYL-1AeM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=ajse29LRENc:dMPjYL-1AeM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=ajse29LRENc:dMPjYL-1AeM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IsquaredRssFeed/~4/ajse29LRENc" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://isquared.nl/index.html?pagelink=64</feedburner:origLink></entry>

	<entry>
		<title>JeeNode</title>
		<link href="http://feeds.isquared.nl/~r/IsquaredRssFeed/~3/wHV5079lx4k/index.html" />
		<id>http://isquared.nl/index.html?pagelink=63</id>
		<updated>2009-12-25T01:12:43Z</updated>
		<content type="html">
			&lt;p&gt;My JeeNode arrived today, just in time for Christmas! &lt;br/&gt;

The JeeNode is a small microcontroller board, with an RFM12 radio module, it is compatible with the Arduino IDE, which is a Good Thing. &lt;br/&gt;

For more information about this cool piece of kit, have a look at &lt;a href="http://jeelabs.org/"&gt;jeelabs.org&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;Less than 30 minutes after arriving home, I started soldering the JeeNode kit together. I'm impressed with the quality of the PCB of these units. &lt;br/&gt;
Below are two pictures of my finished JeeNode.&lt;/p&gt;

&lt;p&gt;
&lt;img src="http://isquared.nl/img/jeenode/solder.jpg" alt="soldering the JeeNode"/&gt;
&lt;img src="http://isquared.nl/img/jeenode/completed.jpg" alt="my completed JeeNode"/&gt;
&lt;/p&gt;
		&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=wHV5079lx4k:Vf2B3L07z0w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=wHV5079lx4k:Vf2B3L07z0w:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=wHV5079lx4k:Vf2B3L07z0w:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=wHV5079lx4k:Vf2B3L07z0w:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=wHV5079lx4k:Vf2B3L07z0w:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=wHV5079lx4k:Vf2B3L07z0w:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=wHV5079lx4k:Vf2B3L07z0w:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=wHV5079lx4k:Vf2B3L07z0w:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IsquaredRssFeed/~4/wHV5079lx4k" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://isquared.nl/index.html?article=63</feedburner:origLink></entry>

	<entry>
		<title>speed up debugging with viline</title>
		<link href="http://feeds.isquared.nl/~r/IsquaredRssFeed/~3/yN3cY238RNo/index.html" />
		<id>http://isquared.nl/index.html?pagelink=61</id>
		<updated>2009-12-03T16:11:20Z</updated>
		<content type="html">
			&lt;p&gt;
This is a practical hack to speed up your coding-debugging cycles: &lt;br/&gt;

Most programming languages tell you that some error occurred in some file on  line 666 like so: &lt;br/&gt;

Blah, blah. Some error in /some/file.foo:666. Blah. &lt;br/&gt;
&lt;/p&gt;

&lt;p&gt;
Viline is a simple bash function that lets you copy and paste the file:linenumber combo from error messages as an argument to vi. &lt;br/&gt;

Vi will then start with the cursor at the offending line. Handy, eh? :-)
&lt;/p&gt;

&lt;p&gt;
To use viline, add the following to your .bashrc:
&lt;/p&gt;

&lt;pre&gt;
    # viline: start vi with file:line
    function f_viline {  vim $(sed -r 's/:([0-9]+)$/ +\1/'&lt;&lt;&lt;$1); }
    alias viline=f_viline
    alias vi=f_viline
&lt;/pre&gt;

&lt;p&gt;The alias for vi itself is optional, myself, I never give vi any arguments but filenames, so this is pretty safe for me. &lt;br/&gt;
Otherwise just type viline instead of vi when you want to edit a file with a file:line style argument.&lt;/p&gt;
		&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=yN3cY238RNo:fr5AGpBUzAk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=yN3cY238RNo:fr5AGpBUzAk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=yN3cY238RNo:fr5AGpBUzAk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=yN3cY238RNo:fr5AGpBUzAk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=yN3cY238RNo:fr5AGpBUzAk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=yN3cY238RNo:fr5AGpBUzAk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=yN3cY238RNo:fr5AGpBUzAk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=yN3cY238RNo:fr5AGpBUzAk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IsquaredRssFeed/~4/yN3cY238RNo" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://isquared.nl/index.html?article=61</feedburner:origLink></entry>

	<entry>
		<title>UKNC Success</title>
		<link href="http://feeds.isquared.nl/~r/IsquaredRssFeed/~3/vLcLmFPdLiQ/index.html" />
		<id>http://isquared.nl/index.html?pagelink=60</id>
		<updated>2009-11-25T23:27:57Z</updated>
		<content type="html">
			&lt;p&gt;The video port pinout from my previous post led to some succes with my UKNC (Elektronika MS 0511) Soviet-Russian computer.&lt;/p&gt;

&lt;p&gt;Today I made a SCART cable to connect the UKNC to my old Bang&amp;Olufsen CRT TV. (that still needs replacement with an equally pretty LCD TV ;) ) &lt;br/&gt;
It seems the B&amp;O does understand the video signals from behind the iron curtain. :) &lt;/p&gt;

&lt;p&gt;
&lt;img src="http://isquared.nl/img/uknc/uknc-tv-1.jpg" alt="UKNC next to TV"/&gt;		
&lt;img src="http://isquared.nl/img/uknc/uknc-tv-2.jpg" alt="TV Screen"/&gt;
&lt;/p&gt;

&lt;p&gt;The SCART wiring is pretty simple, I've connected RGB, sync and composite-video and used a common ground on the SCART video ground line. &lt;br/&gt;
I think the TV is using the RGB inputs, because when I tried feeding the composite video with a cinch plug earlier, I didn't get the TV to sync.&lt;/p&gt;

&lt;p&gt;
&lt;img src="http://isquared.nl/img/uknc/uknc-tv-scart.jpg" alt="sloppy flatcable to SCART"/&gt;
&lt;/p&gt;
		&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=vLcLmFPdLiQ:_oaQuSbL9JI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=vLcLmFPdLiQ:_oaQuSbL9JI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=vLcLmFPdLiQ:_oaQuSbL9JI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=vLcLmFPdLiQ:_oaQuSbL9JI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=vLcLmFPdLiQ:_oaQuSbL9JI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=vLcLmFPdLiQ:_oaQuSbL9JI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=vLcLmFPdLiQ:_oaQuSbL9JI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=vLcLmFPdLiQ:_oaQuSbL9JI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IsquaredRssFeed/~4/vLcLmFPdLiQ" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://isquared.nl/index.html?article=60</feedburner:origLink></entry>

	<entry>
		<title>Soviet Russian UKNC Video connector pinout</title>
		<link href="http://feeds.isquared.nl/~r/IsquaredRssFeed/~3/vdQwiQEoGKM/index.html" />
		<id>http://isquared.nl/index.html?pagelink=59</id>
		<updated>2009-11-23T00:22:08Z</updated>
		<content type="html">
			&lt;p&gt;I recently bought a old Soviet PDP-11 compatible computer on Ebay, the UKNC (&amp;#1059;&amp;#1050;&amp;#1053;&amp;#1062; in Russian) an educational computer system with a formfactor somewhat like the Amiga 500.
&lt;br/&gt;
&lt;img src="http://isquared.nl/img/unkc.jpg" alt="UKNC"/&gt;
&lt;/p&gt;

&lt;p&gt;I'm still struggling to bring the machine back to life, the biggest hurdle is that most of the documentation about this machine is (of course) in Russian only, and I don't speak any Russian at all. &lt;br/&gt;
Google translate is a big help, and translating &lt;i&gt;to&lt;/i&gt; Russian to Google for information helps a lot.&lt;p&gt;

&lt;p&gt;This way, I finally found the pinout of the video connectors on the machine, these are 10-pin headers on the back of the machine, labeled "&amp;#1074;&amp;#1084;". &lt;br/&gt;
To document this for myself, and maybe for someone else whom might benefit from this, I've posted the pinout of these connectors here:&lt;/p&gt;
&lt;pre&gt;
     ---     
  1 |o o| 2          1 - blue         2 - gnd
  3 |o o| 4          3 - green        4 - gnd
  5 |o o| 6          5 - red          6 - gnd
  7 |o o| 8          7 - sound        8 - gnd
  9 |o o| 10         9 - composite   10 - sync? 
     ---
&lt;/pre&gt;
		
		&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=vdQwiQEoGKM:N4Aha71MvfY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=vdQwiQEoGKM:N4Aha71MvfY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=vdQwiQEoGKM:N4Aha71MvfY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=vdQwiQEoGKM:N4Aha71MvfY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=vdQwiQEoGKM:N4Aha71MvfY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=vdQwiQEoGKM:N4Aha71MvfY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=vdQwiQEoGKM:N4Aha71MvfY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=vdQwiQEoGKM:N4Aha71MvfY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IsquaredRssFeed/~4/vdQwiQEoGKM" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://isquared.nl/index.html?article=59</feedburner:origLink></entry>

	<entry>
		<title>Probing a SecurID Token</title>
		<link href="http://feeds.isquared.nl/~r/IsquaredRssFeed/~3/8maCQ36rY60/index.html" />
		<id>http://isquared.nl/index.html?pagelink=58</id>
		<updated>2009-10-25T18:20:59Z</updated>
		<content type="html">
			&lt;p&gt;Today I peeked inside a RSA SecurID token and made a little test jig to probe
some test pads that are inside.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://isquared.nl/img/securid/pa240630.jpg" alt="test jig"/&gt;&lt;/p&gt;
&lt;p&gt;Not much interesting found so far, but hit the read link to read about my journey to the SecurID's deepest secrets... ;)&lt;br/&gt;
&lt;/p&gt;
		&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=8maCQ36rY60:4RIkg9L9gz4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=8maCQ36rY60:4RIkg9L9gz4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=8maCQ36rY60:4RIkg9L9gz4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=8maCQ36rY60:4RIkg9L9gz4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=8maCQ36rY60:4RIkg9L9gz4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=8maCQ36rY60:4RIkg9L9gz4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=8maCQ36rY60:4RIkg9L9gz4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=8maCQ36rY60:4RIkg9L9gz4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IsquaredRssFeed/~4/8maCQ36rY60" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://isquared.nl/index.html?pagelink=58</feedburner:origLink></entry>

	<entry>
		<title>Driving 7-segment displays with a MM5480 and Arduino</title>
		<link href="http://feeds.isquared.nl/~r/IsquaredRssFeed/~3/_MurN-I77ss/index.html" />
		<id>http://isquared.nl/index.html?pagelink=57</id>
		<updated>2009-10-18T22:38:08Z</updated>
		<content type="html">
			                &lt;p&gt;For the last year, up until a couple of months ago my
                heater was pretty unreliable, probably because of a flaky
                relay in its control unit, or maybe some bad capacitors,
                something that nowadays seems to kill almost all electronics
                prematurely.
&lt;/p&gt;&lt;p&gt;
                Well getting bored of hitting the poor machine until it started
                working again about every day, I finally replaced its Econgas
                control unit and, of course, I tore the old unit apart.&lt;br/&gt;
                It's a nice piece of kit, It seems to be made by a Dutch firm
                called Pijnenburg, a name that I only associated with a
                particular brand of Dutch cakes before. ;-) 
&lt;/p&gt;&lt;p&gt;
                Maybe more later about the internals of that unit, or maybe
                never, it depends on whether I find any other interesting stuff
                inside. &lt;br/&gt; But wat got me started was its nice control panel,
                containing three red 7-segment LED displays, three buttons and
                a Micrel MM5480BN shift-register based LED driver. Something
                that just screamed to be hooked up to my trusty Arduinos!
                &lt;/p&gt;

		&lt;p&gt;
		&lt;img src="http://isquared.nl/img/7seg.jpg" alt="arduino and LED display" /&gt;
		&lt;/p&gt;

                &lt;p&gt;Follow the read link above to read the whole story.&lt;/p&gt;
		&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=_MurN-I77ss:Be_tWAC6y3Q:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=_MurN-I77ss:Be_tWAC6y3Q:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=_MurN-I77ss:Be_tWAC6y3Q:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=_MurN-I77ss:Be_tWAC6y3Q:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=_MurN-I77ss:Be_tWAC6y3Q:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=_MurN-I77ss:Be_tWAC6y3Q:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=_MurN-I77ss:Be_tWAC6y3Q:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=_MurN-I77ss:Be_tWAC6y3Q:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IsquaredRssFeed/~4/_MurN-I77ss" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://isquared.nl/index.html?pagelink=57</feedburner:origLink></entry>

	<entry>
		<title>Progress bars in Bash</title>
		<link href="http://feeds.isquared.nl/~r/IsquaredRssFeed/~3/hw4Un7tLtxM/index.html" />
		<id>http://isquared.nl/index.html?pagelink=53</id>
		<updated>2009-08-10T08:20:31Z</updated>
		<content type="html">
			&lt;p&gt;
Today a colleague reminded me to dig up a script that I wrote some years ago to generate progress bars (or actually generic horizontal bar graphs) in Bash.
&lt;/p&gt;
&lt;p&gt;
The script is, in this state, more like a proof of concept. It displays an bar that increments until full and then decrements again, this cycle is repeated forever. It should not be too hard to rewrite it to be used in something more useful. &lt;br/&gt;
I think it's also trivial to rewrite this to display vertical bar graphs as well. I might write a small Bash library to include in other scripts later, if and when I feel the need to. ;-)
&lt;/p&gt;
&lt;p&gt;
The code of the script follows below, enjoy... 
&lt;/p&gt;
&lt;pre&gt;
#!/bin/bash

# progress bar
# Hessel Schut, VPRO Automatisering, 2004-04-02

cols=$(tput cols)
bold=$(tput smso)
norm=$(tput rmso)

trap cleanup EXIT TERM INT

cleanup() {
        norm
        tput clear
        tput cnorm
        exit
}

hor_line() {
        for ((i=1; i &amp;lt; cols - 2; i++)); do
                echo -n '-'
        done
}

draw_frame() {
        tput cup 2 2; hor_line
        tput cup 3 1; echo -n '|'
        tput cup 3 ${cols}; echo -n '|'
        tput cup 4 2; hor_line
}

tput clear
tput civis
draw_frame

d=1; pos=2; plen=0
while [ == ]; do
        [ $d -eq 1 ] &amp;&amp; face=${bold}
        tput cup 3 $pos
        echo -n ${face}' '
        face=${norm}
        sts='pos: '${pos}' dir: '${d}
        tput cup 1 1; echo -n ${norm}${sts}
        [ ${plen} -gt ${#sts} ] &amp;&amp; for ((i=0; i &amp;lt; plen - ${#sts}; i++)); do
                echo -n ' '
        done
        plen=${#sts}
        ((pos += d))
        [ $pos -gt 2 ] &amp;&amp; [ $pos -lt $((cols - 2 )) ] || ((d=-d))
done

&lt;/pre&gt;		
		&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=hw4Un7tLtxM:Q0-BJPja9Rc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=hw4Un7tLtxM:Q0-BJPja9Rc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=hw4Un7tLtxM:Q0-BJPja9Rc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=hw4Un7tLtxM:Q0-BJPja9Rc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=hw4Un7tLtxM:Q0-BJPja9Rc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=hw4Un7tLtxM:Q0-BJPja9Rc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=hw4Un7tLtxM:Q0-BJPja9Rc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=hw4Un7tLtxM:Q0-BJPja9Rc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IsquaredRssFeed/~4/hw4Un7tLtxM" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://isquared.nl/index.html?article=53</feedburner:origLink></entry>

	<entry>
		<title>GSM IMSI, MCC and MNC lookup tool</title>
		<link href="http://feeds.isquared.nl/~r/IsquaredRssFeed/~3/Q3DRUDuavb0/index.html" />
		<id>http://isquared.nl/index.html?pagelink=52</id>
		<updated>2009-06-28T19:59:33Z</updated>
		<content type="html">
			&lt;p&gt;I've written a small tool to decode (or well, that is a big word for taking some substrings ;) ) GSM IMSI (International Mobile Subscriber Identity) numbers. &lt;br/&gt;
It then takes the MCC (Mobile Country Code) and MNC (Mobile Network Code) pair, looks it up, and presents you a mobile operator name and country.&lt;/p&gt;
&lt;p&gt;Alternatively, you can search by just a MCC or MNC value, or both, and again, it lists all matches.&lt;/p&gt;
&lt;p&gt;Follow the read link to give it a try.&lt;/p&gt;
		&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=Q3DRUDuavb0:z5OQjLxxY-U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=Q3DRUDuavb0:z5OQjLxxY-U:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=Q3DRUDuavb0:z5OQjLxxY-U:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=Q3DRUDuavb0:z5OQjLxxY-U:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=Q3DRUDuavb0:z5OQjLxxY-U:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=Q3DRUDuavb0:z5OQjLxxY-U:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=Q3DRUDuavb0:z5OQjLxxY-U:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=Q3DRUDuavb0:z5OQjLxxY-U:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IsquaredRssFeed/~4/Q3DRUDuavb0" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://isquared.nl/index.html?pagelink=52</feedburner:origLink></entry>

	<entry>
		<title>DriveReady SeekComplete Error</title>
		<link href="http://feeds.isquared.nl/~r/IsquaredRssFeed/~3/AJ1Hc0vi72Y/index.html" />
		<id>http://isquared.nl/index.html?pagelink=51</id>
		<updated>2009-06-28T10:17:33Z</updated>
		<content type="html">
			&lt;p&gt;Oops, isquared.nl had some unscheduled downtime last night after the telltale signs of a dying disk:&lt;/p&gt;
&lt;pre&gt;
Jun 28 01:09:07 c3 kernel: [  184.700869] hda: dma_intr: status=0x51 { DriveReady SeekComplete Error }
Jun 28 01:09:07 c3 kernel: [  184.700869] hda: dma_intr: error=0x10 { SectorIdNotFound }, LBAsect=20586, sector=20407
Jun 28 01:09:07 c3 kernel: [  184.700869] ide: failed opcode was: unknown
&lt;/pre&gt;
&lt;p&gt;One emergency &lt;i&gt;dd&lt;/i&gt; to a disk, stolen from my old TV set-top box, later and we're up and running again. &lt;br/&gt;Only a shame that due to the layout of the partitions on the dead disk, I can't grow my filesystems easily to make use of the much larger disk that is transplanted to the server.&lt;/p&gt;

		

		&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=AJ1Hc0vi72Y:NFmCbTLab_s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=AJ1Hc0vi72Y:NFmCbTLab_s:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=AJ1Hc0vi72Y:NFmCbTLab_s:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=AJ1Hc0vi72Y:NFmCbTLab_s:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=AJ1Hc0vi72Y:NFmCbTLab_s:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=AJ1Hc0vi72Y:NFmCbTLab_s:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=AJ1Hc0vi72Y:NFmCbTLab_s:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=AJ1Hc0vi72Y:NFmCbTLab_s:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IsquaredRssFeed/~4/AJ1Hc0vi72Y" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://isquared.nl/index.html?article=51</feedburner:origLink></entry>

	<entry>
		<title>Patch for Gammu's DCT3 debug trace</title>
		<link href="http://feeds.isquared.nl/~r/IsquaredRssFeed/~3/uSzzQvi330U/index.html" />
		<id>http://isquared.nl/index.html?pagelink=48</id>
		<updated>2009-06-27T21:06:43Z</updated>
		<content type="html">
			&lt;p&gt;I've written a quick and dirty patch for Gammu's nokiadebug command.
Normally, nokiadebug writes debug traces to a hardcoded out.xml file, which is not really practical. &lt;/p&gt;
&lt;p&gt;
With my patch applied to gammu-1.24.0, the output of nokiadebug that was previously sent to stdout is now written to stderr.
The debug traces are now written to stdout. This way it is much easier to follow the debug traces 'live'.&lt;/p&gt;

&lt;p&gt;You might need to rebuffer gammu's stdout to emit the complete protocol hierarchy per message at once.
The following (pretty ugly) awk does this for you, to add some clarity I've added line breaks to what was an even uglier one-liner before:&lt;/p&gt;

&lt;pre&gt;
hessch@c3:~/gsm$ gammu nokiadebug nhm5_587.txt v18-19 2&gt;/dev/null | awk '
        /^\&amp;lt;l1/ {i=0}
        /^\&amp;lt;\/l1/ { end = 1 }
        {
                if ( i&gt;=0 ) {
                        buf[i] = $0;
                        i++
                };
                if (end == 1){
                        end = 0;
                        for (j = 0; j &lt; i; j++) {
                                print buf[j];
                        };
                        i = 0;
                }
        }
'
&lt;/pre&gt;
&lt;p&gt;
You can download my patch for Gammu at &lt;a href="http://isquared.nl/src/gammu-xmlstdout.patch"&gt;http://isquared.nl/src/gammu-xmlstdout.patch.&lt;/a&gt;.&lt;/p&gt;

		&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=uSzzQvi330U:FOAIJdOSY24:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=uSzzQvi330U:FOAIJdOSY24:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=uSzzQvi330U:FOAIJdOSY24:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=uSzzQvi330U:FOAIJdOSY24:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=uSzzQvi330U:FOAIJdOSY24:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=uSzzQvi330U:FOAIJdOSY24:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=uSzzQvi330U:FOAIJdOSY24:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=uSzzQvi330U:FOAIJdOSY24:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IsquaredRssFeed/~4/uSzzQvi330U" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://isquared.nl/index.html?article=48</feedburner:origLink></entry>

	<entry>
		<title>UDGBUF, Part 1.5 : Adventures with the HD44780</title>
		<link href="http://feeds.isquared.nl/~r/IsquaredRssFeed/~3/4FMEA5J0QMI/index.html" />
		<id>http://isquared.nl/index.html?pagelink=45</id>
		<updated>2009-06-16T20:57:31Z</updated>
		<content type="html">
			&lt;p&gt;Yesterday (and today when I confirmed this), I noticed that it can be helpful to actually understand what you're doing. :)   What I didn't knew when I was &lt;i&gt;POKE&lt;/i&gt;ing bytes in my Psion Organiser's address space at first, is that when you access addresses 0x180 and 0x181, you're actually addressing the HD44780 LCD controller in the Organiser.&lt;/p&gt;

&lt;p&gt;The address &lt;b&gt;0x180&lt;/b&gt; is the instruction register of the HD44780 LCD controller, the address &lt;b&gt;0x181&lt;/b&gt; is its data register. I should have wondered already why it was possible to write subsequent rows in a UDG to the same address 0x181 to define a character.&lt;br/&gt;
If we look at the code of defining a user defined character again:&lt;/p&gt;
&lt;pre&gt;
udg:(udgnum%, b0%, b1%, b2%, b3%, b4%, b5%, b6%, b7%)
        pokeb $180, 64 + udgnum%*8
        pokeb $181, b0%; pokeb $181, b1%
        pokeb $181, b2%; pokeb $181, b3%
        pokeb $181, b4%; pokeb $181, b5%
        pokeb $181, b6%; pokeb $181, b7%
&lt;/pre&gt;

&lt;p&gt;You see that first the argument &lt;b&gt;64 + udgnum%*8&lt;/b&gt; is written to the address 0x180. The term 64 (or 0x40) is the instruction to the HD44780 LCD controller to set the CG (&lt;i&gt;character generator&lt;/i&gt;) RAM address. The least significant 6-bits of the instruction contain the address itself, this is the &lt;b&gt;udgnum% * 8&lt;/b&gt; term. udgnum% In this case, is the character to define. A character contains 8 rows of pixels, so to reach the next character you multiply this by 8.&lt;br/&gt;
Poking to 0x181 writes the bit pattern poked to this address in the CG RAM, the magic part is that after writing this pattern, the CG RAM address is automatically incremented by the controller!&lt;/p&gt;

&lt;p&gt;Knowing this,  I realized that it must be possible to use this to read from the CG RAM as well as writing, but it's not possible to use the autoincrement magic then. This morning, in the train to work I wrote a small OPL program to test this assumption:&lt;/p&gt;

&lt;pre&gt;
        rlcdreg:
                local char%, row%, byte%
                rem dump UDGs from HD44780 CG RAM
                char% = 0
                while char% &lt;= 7
                        row% = 0
                        while row% &lt;= 7
                                rem hd44780 instr reg is at 180h
                                rem instr 40h addresses CG RAM
                                pokeb $180, $40 + char%*8 + row%

                                rem data reg is at 181h
                                byte% = peekb($181)
                                print "chr"; char%,
                                print "row"; row%,
                                print "val"; byte%

                                row% = row% + 1
                        endwh
                        char% = char% + 1
                endwh

&lt;/pre&gt;

&lt;p&gt;And the character definitions came scrolling down my Psion's little screen!&lt;br/&gt;
Pretty useless, maybe. But it means that it is possible to manipulate the UDG definitions in the LCD controller directly, without using some shadow copy in the Psion's RAM. I think that I will experiment with this in OPL first and when succesful port it to machine code instead for speed, would be a nice opportunity to learn the instruction set of an ancient processor. ;)&lt;/p&gt;

&lt;p&gt;&lt;i&gt;To be continued.&lt;/i&gt;&lt;/p&gt;


		&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=4FMEA5J0QMI:Aj_MjuOAUfI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=4FMEA5J0QMI:Aj_MjuOAUfI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=4FMEA5J0QMI:Aj_MjuOAUfI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=4FMEA5J0QMI:Aj_MjuOAUfI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=4FMEA5J0QMI:Aj_MjuOAUfI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=4FMEA5J0QMI:Aj_MjuOAUfI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=4FMEA5J0QMI:Aj_MjuOAUfI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=4FMEA5J0QMI:Aj_MjuOAUfI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IsquaredRssFeed/~4/4FMEA5J0QMI" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://isquared.nl/index.html?article=45</feedburner:origLink></entry>

	<entry>
		<title>UDGBUF: a poor man's framebuffer on Psion Organiser II, Part 1</title>
		<link href="http://feeds.isquared.nl/~r/IsquaredRssFeed/~3/ksrfhBiy_9g/index.html" />
		<id>http://isquared.nl/index.html?pagelink=44</id>
		<updated>2009-06-13T22:57:15Z</updated>
		<content type="html">
			&lt;p&gt;Today I had some more fun with my rediscovered Psion Organiser II. It's about time to get my hands on a model LZ or LZ64 to enjoy twice the amount of screen real estate. ;) &lt;/p&gt;

&lt;p&gt;This time I toyed with UDG (user defined characters) again. As the Psion reference manual states you can use these to make small animations as updating these changes them on screen immediately.
That gave me the idea to implement some minimalistic framebuffer using all eight UDGs. I print four static UDGs in screen row 1, the other four in screen row 2, this way you get a whopping 40x16 pixel space for graphics!&lt;/p&gt;

&lt;p&gt;It would be nice to read/write to the display controller directly and provide some convenience functions to do basic drawing, but I don't feel like learning to write HD6303 machine code just yet, so for now I plan to pass a pointer to some shadow memory (which I plan to allocate by creating a large global array or string) around where you do your graphics stuff, this will be then copied to the UDGs. &lt;/p&gt;

&lt;p&gt;As a first test, I wrote a small program that walks through the memory of the Psion and displays it in the UDGs, with this result:&lt;/p&gt;
&lt;embed src="http://isquared.nl/img/jarisplayer.swf" flashvars="thumb=http://isquared.nl/img/udgfb.png&amp;file=http://isquared.nl/img/udgfb.flv&amp;autostart=false" allowFullScreen="true" width="350" height="250" name="fullscreen" align="middle" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /&gt;

&lt;p&gt;Tomorrow, I'll try to write some functions to provide a few basic graphics operations to set and get a pixel value. And maybe even some Bressenham line/circle drawing after that.&lt;/p&gt;


		&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=ksrfhBiy_9g:VeGGg6FugDc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=ksrfhBiy_9g:VeGGg6FugDc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=ksrfhBiy_9g:VeGGg6FugDc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=ksrfhBiy_9g:VeGGg6FugDc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=ksrfhBiy_9g:VeGGg6FugDc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=ksrfhBiy_9g:VeGGg6FugDc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=ksrfhBiy_9g:VeGGg6FugDc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=ksrfhBiy_9g:VeGGg6FugDc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IsquaredRssFeed/~4/ksrfhBiy_9g" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://isquared.nl/index.html?article=44</feedburner:origLink></entry>

	<entry>
		<title>JavaScript unit conversion gadget brings lots of RegEx fun</title>
		<link href="http://feeds.isquared.nl/~r/IsquaredRssFeed/~3/zmIlDVl3RMU/index.html" />
		<id>http://isquared.nl/index.html?pagelink=39</id>
		<updated>2009-06-07T21:39:38Z</updated>
		<content type="html">
			&lt;p&gt;My girlfriend started a &lt;a href="http://giustojuusto.blogspot.com/"&gt;cooking blog&lt;/a&gt; recently, if you want to keep track of what I eat, I suggest you subscribe to her feed. ;) &lt;br/&gt;
To help her American followers (and others suffering under the burden of a unit system from the
middle ages), I kludged together a little gadget to add to her Blogger pages. The gadget tries
to convert a few metric units to something equivalent in stones, feet and that Fahrenheit thing.&lt;/p&gt;

&lt;p&gt;Doing so, I learned a nifty thing about JavaScript regular expressions. The replace method in
JavaScript 3 makes it possible to call a function to return the replacement string. This way, I
can match value, a possible prefix and unit, make backreferences and pass those to a conversion
function and replace the matched text in the blog posts with converted values in one go, like so:
&lt;/p&gt;

&lt;p&gt;&lt;pre&gt;
var re = /(\d+|\u00bd) ?([mcdk]|(?:mili|centi|deci|kilo))?(g(?:r|ram)?|l(?:iter)?|c(?:elcius)?)\b/gi;

function knvrtit() {
        var entries = document.getElementsByClassName('entry-content');

        for (var i = 0; i &lt; entries.length; i++) {
                entries[i].innerHTML = entries[i].innerHTML.replace(re, das_Konvertor);
        };
}
&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;But, what is that unicode &lt;i&gt; \u00bd&lt;/i&gt;, you say? Oh, well as it happens some keyboard layouts have
a 1/2 character and some people like to use it as well....&lt;/p&gt;

&lt;p&gt;&lt;i&gt;Das_Konvertor()&lt;/i&gt; then does it's magic using a case construct to multiply values based on the
prefix of a unit, and then uses a second case construct to decide to convert in what way based on the
type of unit encountered. &lt;br/&gt;
The code for das_Konvertor() is a bit long, but it looks somewhat like this:
&lt;/p&gt;
&lt;p&gt;&lt;pre&gt;
function das_Konvertor (str, value, prefix, unit, offset, s) {
        // do stuff
        return string_in_imperical_units;
}
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;
It would be fun, and very web2.0ish to, instead of doing my own ugly conversions, pass the calculation
to be done to the almighty Google calculator in an XMLHttpRequest and display the result. If it keeps
raining in the weekends, I might do so. ;)
&lt;/p&gt;

		
		&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=zmIlDVl3RMU:zq8v3umWJIk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=zmIlDVl3RMU:zq8v3umWJIk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=zmIlDVl3RMU:zq8v3umWJIk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=zmIlDVl3RMU:zq8v3umWJIk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=zmIlDVl3RMU:zq8v3umWJIk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=zmIlDVl3RMU:zq8v3umWJIk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=zmIlDVl3RMU:zq8v3umWJIk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=zmIlDVl3RMU:zq8v3umWJIk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IsquaredRssFeed/~4/zmIlDVl3RMU" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://isquared.nl/index.html?article=39</feedburner:origLink></entry>

	<entry>
		<title>Psion Organiser II bargraphs</title>
		<link href="http://feeds.isquared.nl/~r/IsquaredRssFeed/~3/yqmLvjFf6RI/index.html" />
		<id>http://isquared.nl/index.html?pagelink=38</id>
		<updated>2009-06-07T17:48:12Z</updated>
		<content type="html">
			&lt;p&gt;Today, when searching for some other stuff, I came across some OPL (Organiser Programming Language, some sort of Pascal-ish bastard child of BASIC) code  that I must have written around 2000, or so.
&lt;/p&gt;
&lt;p&gt;One of the programs was a set of functions to display bargraphs using user-defined
characters on the two line text LCD of the Psion Organiser II. So I dug out my trusty old Psion Organiser II XP and cleaned up the code a bit.&lt;/p&gt;
&lt;p&gt;&lt;img src="/img/psi_bargraph.jpg" alt="Psion LCD bargraph"/&gt;&lt;/p&gt;
&lt;p&gt;This might be of use to someone, therefore I publish it here.&lt;/p&gt;
&lt;p&gt;&lt;pre&gt;
udg:(x%, b0%, b1%, b2%, b3%, b4%, b5%, b6%, b7%)
	pokeb $180, 64 + x%*8
	pokeb $181, b0%; pokeb $181, b1%
	pokeb $181, b2%; pokeb $181, b3%
	pokeb $181, b4%; pokeb $181, b5%
	pokeb $181, b6%; pokeb $181, b7%

bargudg:
	udg:(0, 0, 0, 0, 0, 0, 0, 0,31)
	udg:(1, 0, 0, 0, 0, 0, 0,31,31)
	udg:(2, 0, 0, 0, 0, 0,31,31,31)
	udg:(3, 0, 0, 0, 0,31,31,31,31)
	udg:(4, 0, 0, 0,31,31,31,31,31)
	udg:(5, 0, 0,31,31,31,31,31,31)
	udg:(6, 0,31,31,31,31,31,31,31)
	udg:(7,31,31,31,31,31,31,31,31)

barchr$:(n%)
	if n% &gt; 8
		n% = 8
	endif
	if n% = 0
		return " "
	endif
	return chr$(n% - 1) 
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;When you add these functions to your Organiser, after calling &lt;b&gt;bargudg:&lt;/b&gt; you can call &lt;b&gt;barchr$:()&lt;/b&gt; just like chr$() to print bargraph characters to the screen or to concatenate them to a string. &lt;b&gt;barchr$:()&lt;/b&gt; accepts integers in the range &lt;i&gt;0..8&lt;/i&gt;, 0 being actually a space, not an UDG.&lt;/p&gt;
		&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=yqmLvjFf6RI:9X4ddkhwrrw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=yqmLvjFf6RI:9X4ddkhwrrw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=yqmLvjFf6RI:9X4ddkhwrrw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=yqmLvjFf6RI:9X4ddkhwrrw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=yqmLvjFf6RI:9X4ddkhwrrw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=yqmLvjFf6RI:9X4ddkhwrrw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=yqmLvjFf6RI:9X4ddkhwrrw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=yqmLvjFf6RI:9X4ddkhwrrw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IsquaredRssFeed/~4/yqmLvjFf6RI" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://isquared.nl/index.html?article=38</feedburner:origLink></entry>

	<entry>
		<title>JavaScript Cellular Automata Simulation of Fluid-flow</title>
		<link href="http://feeds.isquared.nl/~r/IsquaredRssFeed/~3/wFlwbSwWwGw/index.html" />
		<id>http://isquared.nl/index.html?pagelink=37</id>
		<updated>2009-05-23T12:13:28Z</updated>
		<content type="html">
			&lt;p&gt;Yesterday, I tried to make a simple Cellular Automaton-like discrete simulation of fluid-flow. Or I am not even sure flow is the right word, it simulates waves coming from the left, with an adjustable frequency, hitting obstacles in their path.&lt;/p&gt;
&lt;p&gt;My simulation is by no means attempting to be correct in any way but it is nice to play with and I even spotted something resembling the canceling of waves when passing to a double slit.&lt;/p&gt;
&lt;p&gt;Most of the work went into convincing JavaScript to do what I wanted, without being able to use Firebug due to some obscure bug. Maybe I'll write some more about the code behind this in a later article.&lt;br/&gt;
I also plan to make it possible to save the configuration of the obstacles in a later version.&lt;/p&gt;	
&lt;p&gt;Follow the read link to give it a try.&lt;/p&gt;
		&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=wFlwbSwWwGw:f8W1XQxv7h4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=wFlwbSwWwGw:f8W1XQxv7h4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=wFlwbSwWwGw:f8W1XQxv7h4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=wFlwbSwWwGw:f8W1XQxv7h4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=wFlwbSwWwGw:f8W1XQxv7h4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=wFlwbSwWwGw:f8W1XQxv7h4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=wFlwbSwWwGw:f8W1XQxv7h4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=wFlwbSwWwGw:f8W1XQxv7h4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IsquaredRssFeed/~4/wFlwbSwWwGw" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://isquared.nl/index.html?pagelink=37</feedburner:origLink></entry>

	<entry>
		<title>TagPop: the making of</title>
		<link href="http://feeds.isquared.nl/~r/IsquaredRssFeed/~3/bh02NINWrYA/index.html" />
		<id>http://isquared.nl/index.html?pagelink=36</id>
		<updated>2009-05-19T13:28:36Z</updated>
		<content type="html">
			&lt;p&gt;As promised &lt;a href="http://isquared.nl/index.html?article=30"&gt;before&lt;/a&gt;, here is a description of the inner workings of &lt;a href="http://isquared.nl/index.html?pagelink=30&amp;desc=tagpop_visualizes_tags_by_popularity"&gt;TagPop&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;TagPop is a tag cloud of all tags used on this website, in which the size of each tag represent its popularity among the visitors of this site. 
The popularity is measured based on pageviews of individual articles.&lt;/p&gt;

		&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=bh02NINWrYA:kwW_ZZWTHcA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=bh02NINWrYA:kwW_ZZWTHcA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=bh02NINWrYA:kwW_ZZWTHcA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=bh02NINWrYA:kwW_ZZWTHcA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=bh02NINWrYA:kwW_ZZWTHcA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=bh02NINWrYA:kwW_ZZWTHcA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=bh02NINWrYA:kwW_ZZWTHcA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=bh02NINWrYA:kwW_ZZWTHcA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IsquaredRssFeed/~4/bh02NINWrYA" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://isquared.nl/index.html?pagelink=36</feedburner:origLink></entry>

	<entry>
		<title>NS Zet bussen in (in Dutch)</title>
		<link href="http://feeds.isquared.nl/~r/IsquaredRssFeed/~3/1PklgqXiLew/index.html" />
		<id>http://isquared.nl/index.html?pagelink=35</id>
		<updated>2009-05-17T11:18:13Z</updated>
		<content type="html">
			&lt;p&gt;&lt;i&gt;"NS zet bussen in"&lt;/i&gt; is een iCal feed gemaakt van de aankondigingen van werkzaamheden op de NS website. &lt;br&gt; De aankondigingen op de NS site zijn slecht te lezen door computers, ik heb geprobeerd deze zo goed en zo kwaad mogelijk om te zetten naar "all-day" events.&lt;/p&gt;

&lt;p&gt;De feed is beschikbaar op &lt;a href="http://isquared.nl/nszetbussenin.ics"&gt;http://isquared.nl/nszetbussenin.ics&lt;/a&gt;, deze feed is (bijvoorbeeld) in Google Calendar als gedeelde agenda toe te voegen. Op deze manier weet je de volgende keer vooraf of er werkzaamheden zijn op weg naar de afspraak die je probeert te maken.&lt;/p&gt; 
		&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=1PklgqXiLew:HrDqDH1tQ74:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=1PklgqXiLew:HrDqDH1tQ74:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=1PklgqXiLew:HrDqDH1tQ74:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=1PklgqXiLew:HrDqDH1tQ74:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=1PklgqXiLew:HrDqDH1tQ74:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=1PklgqXiLew:HrDqDH1tQ74:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=1PklgqXiLew:HrDqDH1tQ74:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=1PklgqXiLew:HrDqDH1tQ74:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IsquaredRssFeed/~4/1PklgqXiLew" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://isquared.nl/index.html?article=35</feedburner:origLink></entry>

	<entry>
		<title>Perl anonymous hashes as lookup-tables</title>
		<link href="http://feeds.isquared.nl/~r/IsquaredRssFeed/~3/gLUFuQ6uSWs/index.html" />
		<id>http://isquared.nl/index.html?pagelink=33</id>
		<updated>2009-05-16T17:36:57Z</updated>
		<content type="html">
			
		&lt;p&gt;Today when munging some data in Perl I came up with a elegant way to use
anonymous hashes as lookup tables.&lt;/p&gt;

&lt;p&gt;In this case I wanted to translate month names to integers. Of course 
you could use a bunch of regular expressions to do so. But adhering to the Perl
motto &lt;i&gt;&amp;quot;there is more than one way to do it&amp;quot;&lt;/i&gt; I tried using an 
anonymous hash as a lookup table, like this:&lt;/p&gt;

&lt;pre&gt;
$month = ${{
	'jan' =&gt;  1, 'feb' =&gt;  2, 'mar' =&gt;  3,
	'apr' =&gt;  4, 'may' =&gt;  5, 'jun' =&gt;  6,
	'jul' =&gt;  7, 'aug' =&gt;  8, 'sep' =&gt;  9,
	'oct' =&gt; 10, 'nov' =&gt; 11, 'dec' =&gt; 12}}{$month};
&lt;/pre&gt;

&lt;p&gt;
I quite like this method as no extra variables are needed and you can use this
to map many types of data to others.
&lt;/p&gt;
		&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=gLUFuQ6uSWs:tKN1hOs4r4s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=gLUFuQ6uSWs:tKN1hOs4r4s:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=gLUFuQ6uSWs:tKN1hOs4r4s:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=gLUFuQ6uSWs:tKN1hOs4r4s:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=gLUFuQ6uSWs:tKN1hOs4r4s:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=gLUFuQ6uSWs:tKN1hOs4r4s:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=gLUFuQ6uSWs:tKN1hOs4r4s:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=gLUFuQ6uSWs:tKN1hOs4r4s:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IsquaredRssFeed/~4/gLUFuQ6uSWs" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://isquared.nl/index.html?article=33</feedburner:origLink></entry>

	<entry>
		<title>TagPop Visualizes tags by popularity</title>
		<link href="http://feeds.isquared.nl/~r/IsquaredRssFeed/~3/Ot4cqfDFhsA/index.html" />
		<id>http://isquared.nl/index.html?pagelink=30</id>
		<updated>2009-04-22T18:59:45Z</updated>
		<content type="html">
			&lt;p&gt;
The tag cloud on the left side of this page displays tags assigned to articles. The 
size of each tag is determined on the number of articles to which this tag is assigned. 
&lt;/p&gt;
&lt;p&gt;
I was interested how this tag cloud looks like when the size is determined by the 
popularity of articles tagged with a certain tag among readers of isquared.nl.
&lt;/p&gt;
&lt;p&gt;
To visualize this I have hacked together a quick application, called TagPop, to display the tags based on 
popularity, this is available &lt;a href="http://isquared.nl/doapp.html?appid=tagpop"&gt;
here&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
In a later post I will write more about the inner workings of TagPop.
&lt;/p&gt;
		
		&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=Ot4cqfDFhsA:Qr_Y1Nkmud0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=Ot4cqfDFhsA:Qr_Y1Nkmud0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=Ot4cqfDFhsA:Qr_Y1Nkmud0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=Ot4cqfDFhsA:Qr_Y1Nkmud0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=Ot4cqfDFhsA:Qr_Y1Nkmud0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=Ot4cqfDFhsA:Qr_Y1Nkmud0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=Ot4cqfDFhsA:Qr_Y1Nkmud0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=Ot4cqfDFhsA:Qr_Y1Nkmud0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IsquaredRssFeed/~4/Ot4cqfDFhsA" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://isquared.nl/index.html?pagelink=30</feedburner:origLink></entry>

	<entry>
		<title>New version of Squa.sh</title>
		<link href="http://feeds.isquared.nl/~r/IsquaredRssFeed/~3/VZ8LGb0ugQg/index.html" />
		<id>http://isquared.nl/index.html?pagelink=28</id>
		<updated>2009-04-20T23:57:28Z</updated>
		<content type="html">
			I've made some changes to squa.sh, my Bash script Pong clone.&lt;p&gt;
The first version made extensivce use of &lt;b&gt;tput(1)&lt;/b&gt; to update 
the terminal cursor position.&lt;br&gt;
I compared  the resulting control sequences sent to various terminal
versions, and all seemed to be in the format: &lt;br&gt;
&lt;pre&gt;
    ^[${row};${column}H
&lt;/pre&gt;
&lt;br&gt;
Therefore this new version uses pre cooked control sequences instead
of forking tput like mad. &lt;b&gt;dd(1)&lt;/b&gt; is still spawned each iteration
of the main loop to capture user input, &lt;b&gt;read(1)&lt;/b&gt; smallest timeout
is 1 second, so this is no option, or the game would be no much fun. ;)  
&lt;p&gt;
Also terminal size detection is fixed for NetBSD now, which means that
the new version of squa.sh runs on all hardware in my house right now!
&lt;p&gt;
You can grab a copy of the new version at 
&lt;a href="/src/squa.sh-ng/squa.sh"&gt;http://isquared.nl/src/squa.sh-ng/squa.sh&lt;/a&gt;.
		&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=VZ8LGb0ugQg:BIC72xVKSys:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=VZ8LGb0ugQg:BIC72xVKSys:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=VZ8LGb0ugQg:BIC72xVKSys:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=VZ8LGb0ugQg:BIC72xVKSys:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=VZ8LGb0ugQg:BIC72xVKSys:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=VZ8LGb0ugQg:BIC72xVKSys:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=VZ8LGb0ugQg:BIC72xVKSys:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=VZ8LGb0ugQg:BIC72xVKSys:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IsquaredRssFeed/~4/VZ8LGb0ugQg" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://isquared.nl/index.html?article=28</feedburner:origLink></entry>

	<entry>
		<title>squa.sh</title>
		<link href="http://feeds.isquared.nl/~r/IsquaredRssFeed/~3/1Nc3WW_0TsI/index.html" />
		<id>http://isquared.nl/index.html?pagelink=27</id>
		<updated>2009-04-19T20:37:58Z</updated>
		<content type="html">
			Squa.sh is a litte squash game in a Bash shell script that I wrote this evening.
&lt;p&gt;
Follow the read link for more information or you can download the complete script from &lt;a href="http://isquared.nl/src/squa.sh"&gt;here&lt;/a&gt;.
		
		&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=1Nc3WW_0TsI:IMaMUr7v46o:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=1Nc3WW_0TsI:IMaMUr7v46o:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=1Nc3WW_0TsI:IMaMUr7v46o:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=1Nc3WW_0TsI:IMaMUr7v46o:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=1Nc3WW_0TsI:IMaMUr7v46o:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=1Nc3WW_0TsI:IMaMUr7v46o:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=1Nc3WW_0TsI:IMaMUr7v46o:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=1Nc3WW_0TsI:IMaMUr7v46o:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IsquaredRssFeed/~4/1Nc3WW_0TsI" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://isquared.nl/index.html?pagelink=27</feedburner:origLink></entry>

	<entry>
		<title>Converting dotted-quad IP addresses to integers</title>
		<link href="http://feeds.isquared.nl/~r/IsquaredRssFeed/~3/EQwk5FnVvoo/index.html" />
		<id>http://isquared.nl/index.html?pagelink=26</id>
		<updated>2009-04-18T10:18:18Z</updated>
		<content type="html">
			
Some years ago, before I was lazy enough to just grab a module from CPAN, I wrote this handy Perl function to convert a dotted quad IP address to an integer.&lt;p&gt;
&lt;pre&gt;
sub dotquadToInt($) {
        my ($e, $m, $r) = (24,,);
        my @octet = split(/\./, $_[0]);
        foreach $m (@octet) {
               $r += $m*2**$e;
               $e -= 8;
        };
        return $r;
}
&lt;/pre&gt;
I think the above is pretty, because it is easy to adapt to different bases etc. But it is also needlessly complex, a more elegant way to achieve the same is something like this:&lt;p&gt;
&lt;pre&gt;
sub dotquadToInt($) {
        my @octet = split(/\./, $_[0]);
        return $octet[0]*2**24 + $octet[1]*2**16 + $octet[2]*2**8 + $octet[3];
}
&lt;/pre&gt;&lt;p&gt;
Maybe these functions are of use to someone, though I would recommend everybody to use the excellent Net::IP Perl module instead!

		&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=EQwk5FnVvoo:vnNc_ZF1Mfs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=EQwk5FnVvoo:vnNc_ZF1Mfs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=EQwk5FnVvoo:vnNc_ZF1Mfs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=EQwk5FnVvoo:vnNc_ZF1Mfs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=EQwk5FnVvoo:vnNc_ZF1Mfs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=EQwk5FnVvoo:vnNc_ZF1Mfs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=EQwk5FnVvoo:vnNc_ZF1Mfs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=EQwk5FnVvoo:vnNc_ZF1Mfs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IsquaredRssFeed/~4/EQwk5FnVvoo" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://isquared.nl/index.html?article=26</feedburner:origLink></entry>

	<entry>
		<title>Dreft</title>
		<link href="http://feeds.isquared.nl/~r/IsquaredRssFeed/~3/Mz0RU_uV_A8/index.html" />
		<id>http://isquared.nl/index.html?pagelink=24</id>
		<updated>2009-04-18T09:38:53Z</updated>
		<content type="html">
			Dreft is a quick and dirty tool that I wrote some time ago to do a 
bunch of reverse DNS lookups for a CIDR block. &lt;p&gt;
Its a pretty simple script, the most interesting part is the ugly workaround
to create an in-addr.arpa address from a Net::IP object, somehow I couldn't 
convince Net::IP to do this for me when iterating addresses.&lt;p&gt;
Usage is pretty straightforward too:&lt;br&gt;
&lt;pre&gt;
hessch@blokje:~$ dreft 4.2.2.0/29    
4.2.2.1 -&gt; vnsc-pri.sys.gtei.net.
4.2.2.2 -&gt; vnsc-bak.sys.gtei.net.
4.2.2.3 -&gt; vnsc-lc.sys.gtei.net.
4.2.2.4 -&gt; vnsc-pri-dsl.genuity.net.
4.2.2.5 -&gt; vnsc-bak-dsl.genuity.net.
4.2.2.6 -&gt; vnsc-lc-dsl.genuity.net.
&lt;/pre&gt;
&lt;p&gt;
Below you'll find the complete script, or as a handy downloadable link
&lt;a href="http://isquared.nl/src/dreft.pl"&gt;here&lt;/a&gt;.&lt;p&gt;
&lt;pre&gt;
#!/usr/bin/perl -w

# dreft - reverse dns enumerator
# Hessel Schut, hessel@isquared.nl, 2008-06-24

use strict;

use Net::DNS;
use Net::IP;

my $ip = new Net::IP ($ARGV[0])  or die (Net::IP::Error());
my $res = Net::DNS::Resolver-&gt;new;

do {
        # $ip-&gt;reverse_ip doesn't work when iterating IP addresses
        # horrible kludge to in-addr.arpafy the current IP:
        my $ptr = join('.', reverse(split /\./, $ip-&gt;ip()));
        $ptr .= ".in-addr.arpa";

        my $rr = $res-&gt;query($ptr, qw(PTR));

        if ($rr) {
                print $ip-&gt;ip()." -&gt; ".(($rr-&gt;answer)[0]-&gt;rdatastr)."\n";
        };
} while (++$ip);
&lt;/pre&gt;
		&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=Mz0RU_uV_A8:dgEw39gy-rY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=Mz0RU_uV_A8:dgEw39gy-rY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=Mz0RU_uV_A8:dgEw39gy-rY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=Mz0RU_uV_A8:dgEw39gy-rY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=Mz0RU_uV_A8:dgEw39gy-rY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=Mz0RU_uV_A8:dgEw39gy-rY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=Mz0RU_uV_A8:dgEw39gy-rY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=Mz0RU_uV_A8:dgEw39gy-rY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IsquaredRssFeed/~4/Mz0RU_uV_A8" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://isquared.nl/index.html?article=24</feedburner:origLink></entry>

	<entry>
		<title>Sorting IP addresses</title>
		<link href="http://feeds.isquared.nl/~r/IsquaredRssFeed/~3/Jkbw4EclTv0/index.html" />
		<id>http://isquared.nl/index.html?pagelink=22</id>
		<updated>2009-04-13T10:28:03Z</updated>
		<content type="html">
			Ever noticed how the Unix sort command can't make anything of IP addresses when you use just a numeric sort, like this:
&lt;p&gt;
&lt;pre&gt;
hessch@galileo:~$ sort -n ip.txt
1.2.3.4
5.6.7.8
10.200.219.5
10.20.30.40
10.3.5.6
89.2.177.21
193.18.4.1
&lt;/pre&gt;
&lt;p&gt;
As you notice, for instance 10.20.30.40 is listed below 10.200.219.5, which is wrong, of course.
The trick is to define every octect in the dotted quad notation as a key for sort like this:
&lt;p&gt;
&lt;pre&gt;
hessch@galileo:~$ sort -t. -n -k1,1 -k2,2 -k3,3 -k4,4 ip.txt
1.2.3.4
5.6.7.8
10.3.5.6
10.20.30.40
10.200.219.5
89.2.177.21
193.18.4.1
&lt;/pre&gt;
&lt;p&gt;
There you have it, using &lt;b&gt;sort -t. -n -k1,1 -k2,2 -k3,3 -k4,4&lt;/b&gt; all addresses are sorted properly.
		&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=Jkbw4EclTv0:Ee35t_bNHxI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=Jkbw4EclTv0:Ee35t_bNHxI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=Jkbw4EclTv0:Ee35t_bNHxI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=Jkbw4EclTv0:Ee35t_bNHxI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=Jkbw4EclTv0:Ee35t_bNHxI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=Jkbw4EclTv0:Ee35t_bNHxI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=Jkbw4EclTv0:Ee35t_bNHxI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=Jkbw4EclTv0:Ee35t_bNHxI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IsquaredRssFeed/~4/Jkbw4EclTv0" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://isquared.nl/index.html?article=22</feedburner:origLink></entry>

	<entry>
		<title>PostgreSQL Enums for fun and profit</title>
		<link href="http://feeds.isquared.nl/~r/IsquaredRssFeed/~3/bkPMse49d_c/index.html" />
		<id>http://isquared.nl/index.html?pagelink=21</id>
		<updated>2009-04-12T23:24:03Z</updated>
		<content type="html">
			Once in a while I find the need to reinvent the wheel when
programming, when working on some project recently, the wheel
happened to be syslog. &lt;p&gt;
Nothing wrong with syslog, but I felt the need to write my own
logging to a table in a Postgres database. &lt;p&gt;
While doing so I found a great way for deciding whether an event
can be logged at a certain log level using an enumerated datatype 
in Postgres.&lt;p&gt;
First we define the log levels (severities) as an Enum: &lt;br&gt;
&lt;pre&gt;
    CREATE TYPE eventseverity AS ENUM (
        'debug',
        'notice', 
        'warn',
        'error'
    );
&lt;/pre&gt;
&lt;p&gt;
Every event in the database will have a severity assigned to it. 
Now, to decide whether a event can be logged when a certain threshold
is set, we can make use of this enumerated datatype:&lt;br&gt;
&lt;pre&gt;
    SELECT enum_range(
        log_threshold::eventseverity, 
        enum_last(null::eventseverity)) @&gt; '{notice}'
    FROM eventconfig
    ;
&lt;/pre&gt;		
&lt;p&gt;
Where '{notice}' is the current log level to be tested. &lt;p&gt;
This returns a boolean that tells whether the tested log level is 
above or below the threshold.&lt;p&gt;
This can of course be integrated into more complicated queries. &lt;br&gt;
For example in my project this does a boolean OR over rows returned for
different thresholds. 

		&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=bkPMse49d_c:yRxZp6F094o:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=bkPMse49d_c:yRxZp6F094o:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=bkPMse49d_c:yRxZp6F094o:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=bkPMse49d_c:yRxZp6F094o:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=bkPMse49d_c:yRxZp6F094o:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=bkPMse49d_c:yRxZp6F094o:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=bkPMse49d_c:yRxZp6F094o:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=bkPMse49d_c:yRxZp6F094o:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IsquaredRssFeed/~4/bkPMse49d_c" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://isquared.nl/index.html?article=21</feedburner:origLink></entry>

	<entry>
		<title>Online MAC Address Vendor lookup</title>
		<link href="http://feeds.isquared.nl/~r/IsquaredRssFeed/~3/MRtrCO66FsA/index.html" />
		<id>http://isquared.nl/index.html?pagelink=19</id>
		<updated>2008-11-23T02:59:42Z</updated>
		<content type="html">
			I have made an online version of my MAC address vendor lookup script. 
Of course there are many of these already, but well, choice is good, right?
You can query my vendor lookup tool here: &lt;a href="http://isquared.nl/doapp.html?appid=mac2vendor"&gt;http://isquared.nl/doapp.html?appid=mac2vendor&lt;/a&gt;
		&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=MRtrCO66FsA:mtFLY87icu4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=MRtrCO66FsA:mtFLY87icu4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=MRtrCO66FsA:mtFLY87icu4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=MRtrCO66FsA:mtFLY87icu4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=MRtrCO66FsA:mtFLY87icu4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=MRtrCO66FsA:mtFLY87icu4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=MRtrCO66FsA:mtFLY87icu4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=MRtrCO66FsA:mtFLY87icu4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IsquaredRssFeed/~4/MRtrCO66FsA" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://isquared.nl/index.html?pagelink=19</feedburner:origLink></entry>

	<entry>
		<title>Cobalt status LCD, NetBSD version</title>
		<link href="http://feeds.isquared.nl/~r/IsquaredRssFeed/~3/Sm8eylN-jFY/index.html" />
		<id>http://isquared.nl/index.html?pagelink=18</id>
		<updated>2008-11-09T01:18:41Z</updated>
		<content type="html">
			Here is a NetBSD/Cobalt version of my Cobalt Qube/Raq LCD status screen updater. &lt;br/&gt;
The Debian linux version is described in an earlier post on this page, here: &lt;a href="http://isquared.nl/index.html?pagelink=12&amp;desc=cobalt_qube_status_lcd_system_monitor"&gt;Cobalt Qube status LCD system monitor&lt;/a&gt;. &lt;p/&gt;
This script works fine on NetBSD/Cobalt 3.0, I haven't tested it on other versions yet.
&lt;p/&gt;
You can download the new NetBSD version at &lt;a href="/src/lcdbanner-netbsd.sh"&gt;http://isquared.nl/src/lcdbanner-netbsd.sh&lt;/a&gt;

		&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=Sm8eylN-jFY:zyo-RiGLKA4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=Sm8eylN-jFY:zyo-RiGLKA4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=Sm8eylN-jFY:zyo-RiGLKA4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=Sm8eylN-jFY:zyo-RiGLKA4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=Sm8eylN-jFY:zyo-RiGLKA4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=Sm8eylN-jFY:zyo-RiGLKA4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=Sm8eylN-jFY:zyo-RiGLKA4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=Sm8eylN-jFY:zyo-RiGLKA4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IsquaredRssFeed/~4/Sm8eylN-jFY" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://isquared.nl/index.html?article=18</feedburner:origLink></entry>

	<entry>
		<title>MAC address vendor lookup</title>
		<link href="http://feeds.isquared.nl/~r/IsquaredRssFeed/~3/gAkkmUo8_kw/index.html" />
		<id>http://isquared.nl/index.html?pagelink=15</id>
		<updated>2008-11-01T23:19:12Z</updated>
		<content type="html">
			There are a couple of webpages where you can lookup the manufacturer of a piece of network equipment based on the OUI part of its MAC-address.
That's neat, but not really if the device that you're trying to identify is, for instance, the rogue DHCP-server that knocked you off the Internet.
And apart from that, I rather do as much as I can from within the shell instead of mousing to some website.

That is why I've written a small shell-script that does the work for you. 
		&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=gAkkmUo8_kw:qrrzy804Tl4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=gAkkmUo8_kw:qrrzy804Tl4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=gAkkmUo8_kw:qrrzy804Tl4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=gAkkmUo8_kw:qrrzy804Tl4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=gAkkmUo8_kw:qrrzy804Tl4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=gAkkmUo8_kw:qrrzy804Tl4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=gAkkmUo8_kw:qrrzy804Tl4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=gAkkmUo8_kw:qrrzy804Tl4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IsquaredRssFeed/~4/gAkkmUo8_kw" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://isquared.nl/index.html?pagelink=15</feedburner:origLink></entry>

	<entry>
		<title>SQLite based Bluetooth device logger</title>
		<link href="http://feeds.isquared.nl/~r/IsquaredRssFeed/~3/-EiZR8S2nS4/index.html" />
		<id>http://isquared.nl/index.html?pagelink=14</id>
		<updated>2008-11-01T23:16:40Z</updated>
		<content type="html">
			Btsql is a simple Bluetooth device logger, originally written in Perl, but later I rewrote it in C to support multiple Bluetooth (HCI) devices. The C source is very rough, but it basically works. :-)
&lt;p&gt;
All application logic resides within the SQLite3 database, that way the logger doesn't need to do more than blindly inserting values in the database. A couple of triggers do the rest. 
		&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=-EiZR8S2nS4:UnzZDCJRHYo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=-EiZR8S2nS4:UnzZDCJRHYo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=-EiZR8S2nS4:UnzZDCJRHYo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=-EiZR8S2nS4:UnzZDCJRHYo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=-EiZR8S2nS4:UnzZDCJRHYo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=-EiZR8S2nS4:UnzZDCJRHYo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=-EiZR8S2nS4:UnzZDCJRHYo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=-EiZR8S2nS4:UnzZDCJRHYo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IsquaredRssFeed/~4/-EiZR8S2nS4" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://isquared.nl/index.html?pagelink=14</feedburner:origLink></entry>

	<entry>
		<title>Cobalt Qube status LCD system monitor</title>
		<link href="http://feeds.isquared.nl/~r/IsquaredRssFeed/~3/A6dkP2BaBIo/index.html" />
		<id>http://isquared.nl/index.html?pagelink=12</id>
		<updated>2008-11-01T22:58:29Z</updated>
		<content type="html">
			This is a handy framework to monitor several system parameters on Cobalt hardware running Debian GNU/Linux.
		&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=A6dkP2BaBIo:Dt45eCFt0RU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=A6dkP2BaBIo:Dt45eCFt0RU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=A6dkP2BaBIo:Dt45eCFt0RU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=A6dkP2BaBIo:Dt45eCFt0RU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=A6dkP2BaBIo:Dt45eCFt0RU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=A6dkP2BaBIo:Dt45eCFt0RU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=A6dkP2BaBIo:Dt45eCFt0RU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=A6dkP2BaBIo:Dt45eCFt0RU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IsquaredRssFeed/~4/A6dkP2BaBIo" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://isquared.nl/index.html?pagelink=12</feedburner:origLink></entry>

	<entry>
		<title>arduino SLx-2016 display driver  </title>
		<link href="http://feeds.isquared.nl/~r/IsquaredRssFeed/~3/rZ9KH4APnLo/index.html" />
		<id>http://isquared.nl/index.html?pagelink=11</id>
		<updated>2008-11-01T22:54:26Z</updated>
		<content type="html">
			The Osram SLx-2016 displays look great, and they are quite easy to interface. I bought one to play with at Conrad some time ago. It was gathering dust for a while, but I stubled upon it again today and kludged together a small piece of Arduino code to talk to my nice and shiny green display. 
		&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=rZ9KH4APnLo:u-vPL9BmstQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=rZ9KH4APnLo:u-vPL9BmstQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=rZ9KH4APnLo:u-vPL9BmstQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=rZ9KH4APnLo:u-vPL9BmstQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=rZ9KH4APnLo:u-vPL9BmstQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=rZ9KH4APnLo:u-vPL9BmstQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=rZ9KH4APnLo:u-vPL9BmstQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=rZ9KH4APnLo:u-vPL9BmstQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IsquaredRssFeed/~4/rZ9KH4APnLo" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://isquared.nl/index.html?pagelink=11</feedburner:origLink></entry>

	<entry>
		<title>Durable circuits on perfboard </title>
		<link href="http://feeds.isquared.nl/~r/IsquaredRssFeed/~3/YLS7qkN9wxQ/index.html" />
		<id>http://isquared.nl/index.html?pagelink=10</id>
		<updated>2008-11-01T22:51:38Z</updated>
		<content type="html">
			Ok, I have a love-hate relationship with perfboard. It's easy to prototype on it, but wiring your circuit can be a very tedious job.
&lt;p&gt;
And because of the exposed wiring your circuit board can be a bit fragile (or this might be due to my lousy soldering, of course.)
&lt;p&gt;
A handy way to make your circuit a bit more durable, and lots more presentable too, you can use cheap commonly available two-component epoxy glue to encase the solder side of your circuit boards. The downside is that you can't make any modifications afterwards, but for some of my projects this is not really a problem. 
		&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=YLS7qkN9wxQ:TwBKtmYhsLw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=YLS7qkN9wxQ:TwBKtmYhsLw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=YLS7qkN9wxQ:TwBKtmYhsLw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=YLS7qkN9wxQ:TwBKtmYhsLw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=YLS7qkN9wxQ:TwBKtmYhsLw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=YLS7qkN9wxQ:TwBKtmYhsLw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=YLS7qkN9wxQ:TwBKtmYhsLw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=YLS7qkN9wxQ:TwBKtmYhsLw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IsquaredRssFeed/~4/YLS7qkN9wxQ" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://isquared.nl/index.html?pagelink=10</feedburner:origLink></entry>

	<entry>
		<title>Bourne/ Bash Shell CGI Scripts</title>
		<link href="http://feeds.isquared.nl/~r/IsquaredRssFeed/~3/hftWa41fC3M/index.html" />
		<id>http://isquared.nl/index.html?pagelink=9</id>
		<updated>2008-11-01T22:49:09Z</updated>
		<content type="html">
			Usually I do my server-side scripting in Perl, but some time ago when writing CGI scripts for an embedded system I ran into memory and flash space contraints. Because the system used Busybox, I had the Bourne compatible ash shell available.
&lt;p&gt;
So I wrote a very small Bourne shell script to include in my CGI scripts, which I share here, maybe it is of use to someone. 
		&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=hftWa41fC3M:iD8SU8P0WZo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=hftWa41fC3M:iD8SU8P0WZo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=hftWa41fC3M:iD8SU8P0WZo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=hftWa41fC3M:iD8SU8P0WZo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=hftWa41fC3M:iD8SU8P0WZo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=hftWa41fC3M:iD8SU8P0WZo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=hftWa41fC3M:iD8SU8P0WZo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=hftWa41fC3M:iD8SU8P0WZo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IsquaredRssFeed/~4/hftWa41fC3M" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://isquared.nl/index.html?pagelink=9</feedburner:origLink></entry>

	<entry>
		<title>802.11 Wifi Radio spectrograms </title>
		<link href="http://feeds.isquared.nl/~r/IsquaredRssFeed/~3/4BDbxpgEF8A/index.html" />
		<id>http://isquared.nl/index.html?pagelink=8</id>
		<updated>2008-11-01T22:45:30Z</updated>
		<content type="html">
			I've written a small program to plot the 802.11 (b/g) wifi radio spectrum from data collected from a Linksys WAP-54G access point running OpenWRT. 

Follow the read link to read more...
		
		&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=4BDbxpgEF8A:Ut8JD7xJ3GY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=4BDbxpgEF8A:Ut8JD7xJ3GY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=4BDbxpgEF8A:Ut8JD7xJ3GY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=4BDbxpgEF8A:Ut8JD7xJ3GY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=4BDbxpgEF8A:Ut8JD7xJ3GY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=4BDbxpgEF8A:Ut8JD7xJ3GY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=4BDbxpgEF8A:Ut8JD7xJ3GY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=4BDbxpgEF8A:Ut8JD7xJ3GY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IsquaredRssFeed/~4/4BDbxpgEF8A" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://isquared.nl/index.html?pagelink=8</feedburner:origLink></entry>

	<entry>
		<title>Old items repost</title>
		<link href="http://feeds.isquared.nl/~r/IsquaredRssFeed/~3/jagYYIpQNnk/index.html" />
		<id>http://isquared.nl/index.html?pagelink=7</id>
		<updated>2008-11-01T22:41:35Z</updated>
		<content type="html">
			Since the new site is built somewhat like a blog, I'll repost the old content as blog entries from here.
		
		&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=jagYYIpQNnk:CaiY33ZgeDQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=jagYYIpQNnk:CaiY33ZgeDQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=jagYYIpQNnk:CaiY33ZgeDQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=jagYYIpQNnk:CaiY33ZgeDQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=jagYYIpQNnk:CaiY33ZgeDQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=jagYYIpQNnk:CaiY33ZgeDQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=jagYYIpQNnk:CaiY33ZgeDQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=jagYYIpQNnk:CaiY33ZgeDQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IsquaredRssFeed/~4/jagYYIpQNnk" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://isquared.nl/index.html?article=7</feedburner:origLink></entry>

	<entry>
		<title>New page design</title>
		<link href="http://feeds.isquared.nl/~r/IsquaredRssFeed/~3/5vdPyQMmqvk/index.html" />
		<id>http://isquared.nl/index.html?pagelink=6</id>
		<updated>2008-11-01T22:36:17Z</updated>
		<content type="html">
			Welcome to the new design for isquared.nl. &lt;p&gt;
The old layout didn&amp;acute;t render properly on some browsers and wasn't too user-friendly anyway. So I decided on less form over function and tried to make it a bit easier to maintain at the same time. &lt;p&gt;
This is still a work in progress, so some features may misbehave or don&amp;acute;t work at all, this should be fixed soon, depending on my spare time. ;-)
		
		&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=5vdPyQMmqvk:QTDn9GVBgds:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=5vdPyQMmqvk:QTDn9GVBgds:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=5vdPyQMmqvk:QTDn9GVBgds:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=5vdPyQMmqvk:QTDn9GVBgds:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=5vdPyQMmqvk:QTDn9GVBgds:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=5vdPyQMmqvk:QTDn9GVBgds:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.isquared.nl/~ff/IsquaredRssFeed?a=5vdPyQMmqvk:QTDn9GVBgds:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/IsquaredRssFeed?i=5vdPyQMmqvk:QTDn9GVBgds:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/IsquaredRssFeed/~4/5vdPyQMmqvk" height="1" width="1"/&gt;</content>
	<feedburner:origLink>http://isquared.nl/index.html?article=6</feedburner:origLink></entry>


</feed>
