<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-21652080</id><updated>2010-09-02T10:08:41.325+10:00</updated><title type='text'>import clue</title><subtitle type='html'>Software engineering, social software, life and the internet.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://shiny.thorne.id.au/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default'/><link rel='alternate' type='text/html' href='http://shiny.thorne.id.au/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default?start-index=26&amp;max-results=25'/><author><name>Stephen Thorne</name><uri>http://www.blogger.com/profile/03286375392973166411</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>93</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-21652080.post-7595284745438169645</id><published>2010-06-30T08:25:00.004+10:00</published><updated>2010-06-30T08:36:42.425+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wrong'/><category scheme='http://www.blogger.com/atom/ns#' term='hate'/><title type='text'>The Days of Horror Story</title><content type='html'>Quite a while ago, I wrote out some of my experiences at a previous employer, as a cathartic release on the tension they caused me. It helped a lot,&lt;br /&gt;&lt;br /&gt;Todays &lt;a href="http://thedailywtf.com/Articles/Got_Time_0x3f_.aspx"&gt;The Daily WTF&lt;/a&gt; titled "Got Time?" reminded me of one of those horrible hacks I had to deal with when I was there.&lt;br /&gt;&lt;br /&gt;We used to have one of those business rules. "X business days from now". Where weekends, and national public holidays, were not considered "business days". Because this business rule was observed in the Oracle Forms interface that was used by our operations staff, a way to take now() + N business days was needed.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;# select * from days_of_week order by num;&lt;br /&gt; day_of_week num&lt;br /&gt; ----------- ---&lt;br /&gt;...&lt;br /&gt; 31/07/2005  401  &lt;br /&gt; 01/08/2005  &lt;br /&gt; 02/08/2005  &lt;br /&gt; 03/08/2005  402&lt;br /&gt; 04/08/2005  403&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;In this entirely ficticious example from my memory of this table, that's what the data looked like. All saturdays and sundays and public holidays were listed in the table with a blank 'num'. To find a date 10 business days from now, you would do: &lt;code&gt;select day_of_week from days_of_week where num = (select num from days_of_week where day_of_week = today()) + 10&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Every so often we would "run out of days" and an email would be sent. Then a script would be written to add another batch of days to the table, then we'd be good until we run out again...&lt;br /&gt;&lt;br /&gt;I've been at my current employer for over 5 years now, and am extremely happy I left tripe like what I've just dredged out of my memory behind.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21652080-7595284745438169645?l=shiny.thorne.id.au' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shiny.thorne.id.au/feeds/7595284745438169645/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21652080&amp;postID=7595284745438169645' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/7595284745438169645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/7595284745438169645'/><link rel='alternate' type='text/html' href='http://shiny.thorne.id.au/2010/06/days-of-horry-story.html' title='The Days of Horror Story'/><author><name>Stephen Thorne</name><uri>http://www.blogger.com/profile/03286375392973166411</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11645578395080429563'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21652080.post-2735387968390235807</id><published>2009-05-25T14:02:00.004+10:00</published><updated>2009-05-25T14:12:09.882+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Disable Hal Daemon Polling</title><content type='html'>I had cause today to stop hal from polling its CD-ROM/DVD-ROM drives on a large number of systems.&lt;br /&gt;&lt;br /&gt;&lt;pre class="code" id="codemain"&gt;&lt;blockquote&gt;$ cat /etc/hal/fdi/information/disable-polling.fdi&lt;br /&gt;&amp;lt;?xml version=&lt;span class="literal"&gt;"1.0"&lt;/span&gt; encoding=&lt;span class="literal"&gt;"UTF-8"&lt;/span&gt;?&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;deviceinfo version="0.2"&gt;&lt;br /&gt;&amp;lt;device&gt;&lt;br /&gt;  &amp;lt;match key="storage.media_check_enabled" bool="true"&gt;&lt;br /&gt;    &amp;lt;merge key="storage.media_check_enabled" type="bool"&gt;false&amp;lt;/merge&gt;&lt;/span&gt;&lt;/span"&gt;&lt;br /&gt;  &amp;lt;/match&gt;&lt;br /&gt;&amp;lt;/device&gt;&lt;br /&gt;&amp;lt;/deviceinfo&gt;&lt;/span"&gt;&lt;/span"&gt;&lt;/blockquote&gt;&lt;/pre&gt;This will turn of the 'media check' which polls the IDE device every 2 seconds to see if a CD is inserted. None of these systems have anything listening to HAL events, nor will have removable media inserted, so we can safely ignore the events.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://cgit.freedesktop.org/hal/diff/tools/hal-disable-polling.c?id=c003685ace0936d4c813bf1ba422d521c72d4d62"&gt;hal-disable-polling&lt;/a&gt; is an ''interesting'' program. C programmers doing this stuff should really get an XML library that's useful, and actually use it. Using fprintf for emitting xml isn't kosher :(&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21652080-2735387968390235807?l=shiny.thorne.id.au' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shiny.thorne.id.au/feeds/2735387968390235807/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21652080&amp;postID=2735387968390235807' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/2735387968390235807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/2735387968390235807'/><link rel='alternate' type='text/html' href='http://shiny.thorne.id.au/2009/05/disable-hal-daemon-polling.html' title='Disable Hal Daemon Polling'/><author><name>Stephen Thorne</name><uri>http://www.blogger.com/profile/03286375392973166411</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11645578395080429563'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21652080.post-2107562436950825225</id><published>2009-03-26T17:06:00.004+10:00</published><updated>2009-03-26T17:07:33.759+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='osdc'/><title type='text'>OSDC Brisbane 2009</title><content type='html'>I am pleased to announce that Brisbane is the new host city for the Open Source Developers Conference in 2009.&lt;br /&gt;&lt;br /&gt;I am leading the organisation committee for the conference, which we intend to hold at the lovely Bardon Conference Center in Brisbane.&lt;br /&gt;&lt;br /&gt;More details to come, stay tuned. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21652080-2107562436950825225?l=shiny.thorne.id.au' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shiny.thorne.id.au/feeds/2107562436950825225/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21652080&amp;postID=2107562436950825225' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/2107562436950825225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/2107562436950825225'/><link rel='alternate' type='text/html' href='http://shiny.thorne.id.au/2009/03/osdc-brisbane-2009.html' title='OSDC Brisbane 2009'/><author><name>Stephen Thorne</name><uri>http://www.blogger.com/profile/03286375392973166411</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11645578395080429563'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21652080.post-5398513849481325061</id><published>2008-12-15T08:54:00.004+10:00</published><updated>2008-12-15T09:00:02.330+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>On Packaging Python</title><content type='html'>&lt;blockquote&gt;I’d love if there was a language-neutral library installation and management tool that really worked. Linux system package managers are absolutely not that tool; frankly it is absurd to even consider them as an alternative. So for now we do our best in our respective language communities. If we’re going to move forward, we’ll have to acknowledge what’s come before, and the reasoning for it.&lt;/blockquote&gt;&lt;a href="http://blog.ianbicking.org/2008/12/14/a-few-corrections-to-on-packaging/"&gt;A Few Corrections To “On Packaging” - Ian Bicking&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;I disagree with him so much I don't know where to start. Operating system packages are the best way to install anything on nice systems. Python is not 'special' in this regard, there's no reason not to use operating system packages.&lt;br /&gt;&lt;br /&gt;I spent a couple hours a few months ago &lt;a href="http://launchpad.net/packaging"&gt;making it easier&lt;/a&gt;, and I should return to that project and get more done on it, at the moment it's far to &lt;a href="http://pypi.python.org/"&gt;pypi&lt;/a&gt;-centric.&lt;br /&gt;&lt;br /&gt;Oh, and if someone could fix &lt;a href="http://bugs.python.org/issue1533164"&gt;Python Issue 1533164&lt;/a&gt; for Fedora 10, that'd be great too. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21652080-5398513849481325061?l=shiny.thorne.id.au' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shiny.thorne.id.au/feeds/5398513849481325061/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21652080&amp;postID=5398513849481325061' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/5398513849481325061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/5398513849481325061'/><link rel='alternate' type='text/html' href='http://shiny.thorne.id.au/2008/12/on-packaging-python.html' title='On Packaging Python'/><author><name>Stephen Thorne</name><uri>http://www.blogger.com/profile/03286375392973166411</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11645578395080429563'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21652080.post-1026067016470125856</id><published>2008-12-13T18:03:00.002+10:00</published><updated>2008-12-13T18:28:01.400+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='mail'/><title type='text'>Mairix and Mutt for Mail</title><content type='html'>After a long time of using webmail and things, I've finally gotten around to hosting my mail locally on my computer.&lt;br /&gt;&lt;br /&gt;Keeping with the 'search not sort' philosophy of mail, I have set up a system where when I get email (using 'getmail' to download it via pop from my email hosting) I deliver the email to two places. One is an archive (named for the day it was received on) and the other is an Inbox.&lt;br /&gt;&lt;br /&gt;When I read email in the inbox, I delete it. The archive is always there.&lt;br /&gt;&lt;br /&gt;I have a mairixrc configured to index all my archive. Unfortunately the globbing for mairix doesn't seem to work for subdirectories, so I have all my archives in &lt;code&gt;yyyymmdd&lt;/code&gt; named folders instead of &lt;code&gt;yyyy/mm/dd&lt;/code&gt; folders. This way I can say &lt;code&gt;maildir=Maildir/Archive/*&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Now that I have my email sorted like this, and mairix is indexing it (on a cronjob), I can search it. I wrote a little script to search my email. The idea is that I can select some text and click a button on my toolbar, or I can hit a button my toolbar and enter some text into a search prompt, then mutt will spawn pointed at a folder containing my search results.&lt;br /&gt;&lt;br /&gt;Here is the one that prompts for input:&lt;br /&gt;&lt;code&gt;&lt;pre&gt;#!/bin/sh&lt;br /&gt;&lt;br /&gt;searchdir=/var/tmp/searchresult-$$&lt;br /&gt;selection=$(Xdialog --inputbox "Search For?" 18 45 2&gt;&amp;1)&lt;br /&gt;# exit if Xdialog had a nonzero exit.&lt;br /&gt;[ $? -ne 0 ] &amp;&amp; exit "Okay, nevermind"&lt;br /&gt;&lt;br /&gt;echo Searching for $selection&lt;br /&gt;mkdir -p $searchdir&lt;br /&gt;mairix -o $searchdir "$selection"&lt;br /&gt;mutt -f $searchdir&lt;br /&gt;rm -rf $searchdir&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The one that uses the xclipboard just does &lt;code&gt;selection=$(xclip -o)&lt;/code&gt; instead of the Xdialog dance.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21652080-1026067016470125856?l=shiny.thorne.id.au' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shiny.thorne.id.au/feeds/1026067016470125856/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21652080&amp;postID=1026067016470125856' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/1026067016470125856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/1026067016470125856'/><link rel='alternate' type='text/html' href='http://shiny.thorne.id.au/2008/12/mairix-and-mutt-for-mail.html' title='Mairix and Mutt for Mail'/><author><name>Stephen Thorne</name><uri>http://www.blogger.com/profile/03286375392973166411</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11645578395080429563'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21652080.post-8693621573752880492</id><published>2008-12-09T16:57:00.002+10:00</published><updated>2008-12-09T17:04:08.545+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xrandr'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Xrandr for dual head on IBM X200s</title><content type='html'>I tried to use xrandr on my new laptop (IBM X200s) and I had an error.&lt;pre&gt;&lt;code&gt;$ xrandr --output VGA --left-of LVDS&lt;br /&gt;xrandr: screen cannot be larger than 1280x1280 (desired size 2960x1024)&lt;/code&gt;&lt;/pre&gt;It turns out that Fedora 10 has an X that doesn't need an &lt;code&gt;xorg.conf&lt;/code&gt;, and therefore doesn't have one, so it's hard to put in the fix for this, which is putting in a &lt;code&gt;Virtual&lt;/code&gt; line in the Screen.&lt;br /&gt;&lt;br /&gt;This is what I had to put in &lt;code&gt;xorg.conf&lt;/code&gt; to allow me to do dual head. Bear in mind that if you do this, then DRI will not work, and thus there will be no 3D acceleration.&lt;br /&gt;&lt;pre&gt;&lt;code&gt;Section "Device"&lt;br /&gt; Identifier  "Videocard0"&lt;br /&gt; Driver      "intel"&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Screen"&lt;br /&gt; Identifier "Screen0"&lt;br /&gt; Device     "Videocard0"&lt;br /&gt; SubSection "Display"&lt;br /&gt;  Virtual 2960 1050&lt;br /&gt;       EndSubSection&lt;br /&gt;EndSection&lt;/code&gt;&lt;/pre&gt;And that was all that was needed. I can now use my external monitor via xrandr.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21652080-8693621573752880492?l=shiny.thorne.id.au' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shiny.thorne.id.au/feeds/8693621573752880492/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21652080&amp;postID=8693621573752880492' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/8693621573752880492'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/8693621573752880492'/><link rel='alternate' type='text/html' href='http://shiny.thorne.id.au/2008/12/xrandr-for-dual-head-on-ibm-x200s.html' title='Xrandr for dual head on IBM X200s'/><author><name>Stephen Thorne</name><uri>http://www.blogger.com/profile/03286375392973166411</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11645578395080429563'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21652080.post-4469773431615837546</id><published>2008-09-09T11:11:00.001+10:00</published><updated>2008-09-09T11:11:11.910+10:00</updated><title type='text'>$15.24 for 2 zones</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt;&lt;a href="http://www.flickr.com/photos/stephenthorne/2840897557/" title="photo sharing"&gt;&lt;img src="http://farm4.static.flickr.com/3107/2840897557_d8ecfc94fc_m.jpg" alt="" style="border: solid 2px #000000;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;&lt;a href="http://www.flickr.com/photos/stephenthorne/2840897557/"&gt;$15.24 for 2 zones&lt;/a&gt;&lt;br /&gt;Originally uploaded by &lt;a href="http://www.flickr.com/people/stephenthorne/"&gt;Stephen Thorne&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;Go-card is fail. A workmate of mine just got charged 6.5x the correct fare for his trip into work yesterday.&lt;br /&gt;&lt;br /&gt;Total. Utter. Fail.&lt;br clear="all" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21652080-4469773431615837546?l=shiny.thorne.id.au' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shiny.thorne.id.au/feeds/4469773431615837546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21652080&amp;postID=4469773431615837546' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/4469773431615837546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/4469773431615837546'/><link rel='alternate' type='text/html' href='http://shiny.thorne.id.au/2008/09/1524-for-2-zones.html' title='$15.24 for 2 zones'/><author><name>Stephen Thorne</name><uri>http://www.blogger.com/profile/03286375392973166411</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11645578395080429563'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21652080.post-4261972628285070632</id><published>2008-09-06T14:49:00.003+10:00</published><updated>2008-09-06T14:59:36.846+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Booting and Stuff</title><content type='html'>So it turns out that my epic journey into "why doesn't this board boot" this week had a really anti-climatic ending.&lt;br /&gt;&lt;br /&gt;Just so everyone knows, the Intel DG945GCLF board, which is a mini-itx board with 1.6ghz atom 230 chip on it, will not boot from a hdd unless one of the partitions on that drive is marked bootable.&lt;br /&gt;&lt;br /&gt;This might seem obvious, but it doesn't make much sense :( the BIOS is supposed to just load the first 512 bytes of the drive and run it*.&lt;br /&gt;&lt;br /&gt;So, things I learned this week:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;grub-install is a shell script.&lt;/li&gt;&lt;li&gt;What grub stage1, e2fs_stage1_5 and stage2 are.&lt;/li&gt;&lt;li&gt;The layout of the partition table.&lt;/li&gt;&lt;li&gt;Various tricks with 'dd' and 'xxd' to read partition tables.&lt;/li&gt;&lt;li&gt;Editing hex values in partition tables and the grub stage1 on the disk is kinda fun &lt;span style="font-style: italic;"&gt;the first time&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Knowing what bytes are what on a raw disk is knowledge that can't be erased with beer.&lt;/li&gt;&lt;li&gt;Beer is good for day 3 of dealing with non-booting systems.&lt;/li&gt;&lt;/ul&gt;So after something like 15 kernel compiles, various operating systems and rescue disks, it turns out that I needed to make a 2 character change to the sfdisk script that created our partition layout.&lt;br /&gt;&lt;br /&gt;&lt;small&gt;* yes, i know this is a lie.&lt;/small&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21652080-4261972628285070632?l=shiny.thorne.id.au' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shiny.thorne.id.au/feeds/4261972628285070632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21652080&amp;postID=4261972628285070632' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/4261972628285070632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/4261972628285070632'/><link rel='alternate' type='text/html' href='http://shiny.thorne.id.au/2008/09/booting-and-stuff.html' title='Booting and Stuff'/><author><name>Stephen Thorne</name><uri>http://www.blogger.com/profile/03286375392973166411</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11645578395080429563'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21652080.post-2103276530481922991</id><published>2008-09-01T09:09:00.000+10:00</published><updated>2008-09-01T09:10:26.251+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hate'/><title type='text'>SSH Fail</title><content type='html'>I'm very very angry just at the moment, I'm angry about a total mismatch of expectations in the name of 'usability' that has invalidated what I thought was a totally reasonable security mechanism that I more or less took for granted.&lt;br id="x3yy"&gt;&lt;br id="x3yy0"&gt;I have an SSH key. &lt;span id="u_qy" style="font-family: Courier New;"&gt;~/.ssh/id_dsa&lt;/span&gt;. I have a passphrase on that key, so that if someone compromises my machine, all they have is a key, and they have to brute force my (rather long) passphrase. I have ssh-agent to remember my passphrase in memory so that I don't ever let that passphrase hit disk, but have the passphrase cached.&lt;br id="u_qy0"&gt;&lt;br id="u_qy1"&gt;Running &lt;span id="dzv9" style="font-family: Courier New;"&gt;ssh-add -D&lt;/span&gt; should wipe that passphrase from memory so I have to type it again. I was toying with doing this nightly so that it would wipe the passphrase every night so when I log in the next morning my passphrase needs to be re-entered.&lt;br id="m_n7"&gt;&lt;br id="m_n70"&gt;This is where the nightmare begins. On the weekend my machine crashed so I had to start a fresh this morning. I sit down, log in, fire up a terminal, and ssh into another host.&lt;br id="m_n71"&gt;&lt;br id="m_n72"&gt;Bam, I'm straight in. No passphrase, no prompt, nothing. Just straight in. This shouldn't be possible. Either the passphrase has been removed from my key so that it can be used without a passphrase, or something is saving it to disk without my knowledge.&lt;br id="m_n73"&gt;&lt;br id="m_n74"&gt;Fedora 9 in its default configuration will save your passphrase to disk if you're logged in under gnome. I don't know how to turn it off. I feel angry, violated, annoyed and really really frustrated. It was a simple thing and it's been fucked. I can't turn it off, I can't stop gnome from remembering my passphrase, I feel like pulling the drive, hitting it with a hammer, and going back to OSX instead.&lt;br id="ur2j"&gt;&lt;br id="ur2j0"&gt;At least OSX can get simple things like ssh-agent right.&lt;br id="ur2j1"&gt;&lt;br id="ur2j2"&gt;*sigh*&lt;br id="fc:p"&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21652080-2103276530481922991?l=shiny.thorne.id.au' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shiny.thorne.id.au/feeds/2103276530481922991/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21652080&amp;postID=2103276530481922991' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/2103276530481922991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/2103276530481922991'/><link rel='alternate' type='text/html' href='http://shiny.thorne.id.au/2008/09/ssh-fail.html' title='SSH Fail'/><author><name>Stephen Thorne</name><uri>http://www.blogger.com/profile/03286375392973166411</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11645578395080429563'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21652080.post-8508082481171539552</id><published>2008-08-01T11:26:00.002+10:00</published><updated>2008-08-01T11:28:48.471+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wrong'/><category scheme='http://www.blogger.com/atom/ns#' term='opensource'/><title type='text'>Cafe Babe</title><content type='html'>Q: What's the difference between Old Java and New Open Source Java?&lt;br /&gt;&lt;br /&gt;A: The Old Java worked in my browser dammit.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21652080-8508082481171539552?l=shiny.thorne.id.au' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shiny.thorne.id.au/feeds/8508082481171539552/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21652080&amp;postID=8508082481171539552' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/8508082481171539552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/8508082481171539552'/><link rel='alternate' type='text/html' href='http://shiny.thorne.id.au/2008/08/cafe-babe.html' title='Cafe Babe'/><author><name>Stephen Thorne</name><uri>http://www.blogger.com/profile/03286375392973166411</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11645578395080429563'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21652080.post-7387540162130179209</id><published>2008-07-21T10:31:00.002+10:00</published><updated>2008-07-21T10:35:15.759+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='networking'/><title type='text'>Firefox SSL Nags</title><content type='html'>Dear Lazyweb,&lt;br /&gt;&lt;br /&gt;How do I get back the firefox 2 behaviour of allowing me to access SSL websites with 1 or 0 button clicks, instead of the multiple screen nagpages?&lt;br /&gt;&lt;br /&gt;Yours,&lt;br /&gt;Stephen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21652080-7387540162130179209?l=shiny.thorne.id.au' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shiny.thorne.id.au/feeds/7387540162130179209/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21652080&amp;postID=7387540162130179209' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/7387540162130179209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/7387540162130179209'/><link rel='alternate' type='text/html' href='http://shiny.thorne.id.au/2008/07/firefox-ssl-nags.html' title='Firefox SSL Nags'/><author><name>Stephen Thorne</name><uri>http://www.blogger.com/profile/03286375392973166411</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11645578395080429563'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21652080.post-813655058721478356</id><published>2008-07-20T11:29:00.001+10:00</published><updated>2008-07-20T11:31:21.225+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ipv6 australia'/><title type='text'>Trace that route</title><content type='html'>&lt;pre&gt;$ traceroute6 mirror.ipv6.internode.on.net&lt;br /&gt;traceroute6 to mirror.ipv6.internode.on.net (2001:44b8:8020:7a80::20) from 2001:44b8:61::e3, 30 hops max, 12 byte packets&lt;br /&gt; 1  2001:44b8:61::e2  87.049 ms  89.126 ms  125.079 ms&lt;br /&gt; 2  vl67.cor1.adl6.internode.on.net  98.27 ms  77.689 ms  77.303 ms&lt;br /&gt; 3  mirror.internode.on.net  109.942 ms  177.193 ms  148.519 ms&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Huzzah. Internode is now running a tunnel broker. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21652080-813655058721478356?l=shiny.thorne.id.au' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shiny.thorne.id.au/feeds/813655058721478356/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21652080&amp;postID=813655058721478356' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/813655058721478356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/813655058721478356'/><link rel='alternate' type='text/html' href='http://shiny.thorne.id.au/2008/07/trace-that-route.html' title='Trace that route'/><author><name>Stephen Thorne</name><uri>http://www.blogger.com/profile/03286375392973166411</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11645578395080429563'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21652080.post-1483811711536602155</id><published>2008-04-03T12:04:00.004+10:00</published><updated>2008-04-03T12:09:32.104+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='australia'/><category scheme='http://www.blogger.com/atom/ns#' term='telstra'/><title type='text'>Gnnnr, Telstra.</title><content type='html'>This is a transcript of a conversation I had with Telstra today, this is verbatim from the 'chat' interface I used.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Jessica: Welcome to online assistance. You are chatting with Jessica NB:This Chat is being recorded and may be monitored for coaching purposes. If you do not wish to proceed, please close this window.&lt;br /&gt;Jessica: The rates discussed in this Livechat are correct as at today's date, but may vary from time to time.  Any variation will be done in accordance with the General Terms of Our Customer Terms which can be found by visiting http://www.telstra.com.au/customerterms/index.htm&lt;br /&gt;&lt;br /&gt;Jessica: Hi, how may I help you with your enquiry today?&lt;br /&gt;you: G'day.&lt;br /&gt;you: I am moving house, and would like to know how much moving my phone service will cost, and if the phone line has been cancelled by the old tenants.&lt;br /&gt;you: The address we are moving to is [REDACTED]&lt;br /&gt;you: And our current phone number is [REDACTED]&lt;br /&gt;Jessica: Ok Sure I can check this for you, one moment please&lt;br /&gt;Jessica: Ok the phone line at [REDACTED] is still active the the old tenants name, So the connection fee will be only $59&lt;br /&gt;you: Okay, have they notified you that they are going to disconnect?&lt;br /&gt;you: And how much is the line rental that I am paying at the moment.&lt;br /&gt;Jessica: I can not see if they have organised disconnection sorry.&lt;br /&gt;Jessica: I will need to ask a few questions to access your account,&lt;br /&gt;you: Sure.&lt;br /&gt;Jessica: Can I please have your full name and Dob for the security of you account thanks,.&lt;br /&gt;you: Stephen Thorne, [REDACTED]&lt;br /&gt;Jessica: Thank you your currently on Homeline Budget 19.95 per month&lt;br /&gt;you: oh, okay, and I can keep that?&lt;br /&gt;you: (i.e. it won't go up when I move premesis?)&lt;br /&gt;Jessica: yes you can,&lt;br /&gt;Jessica: Oh sorry hang on,&lt;br /&gt;you: are there any problems with me using that and ADSL2+?&lt;br /&gt;Jessica: we have recently changed the business rules when using Homeline Budget in conjunction with ADSL from another provider. As you are disconnecting and re connecting at the new address these business rules would apply:&lt;br /&gt;Jessica: HomeLine Budget customers must not acquire a broadband service from another service provider which is provided using Line Sharing Technology. If your Internet Service Provider uses Line Sharing Technology,  you will be contacted by Telstra and you will need to choose a different HomeLine Plan other than HomeLine Budget. You will need to contact your current Internet Service Provider to confirm if they utilize line sharing equipment.&lt;br /&gt;you: I see.&lt;br /&gt;Jessica: I would connect to budget then if we find your ISP is using Line sharring we will automatically move you up to the next plan up which is Homeline Complete for 26.95 per month&lt;br /&gt;you: I see.&lt;br /&gt;Jessica: there is no charge to move plan&lt;br /&gt;you: Thankyou for your time.&lt;br /&gt;you: Can I have a copy of this transscript emailed to me?&lt;br /&gt;Jessica: unfortunately we can not email this chat, however you should be able to copy and paste this into word, or notepad and save it&lt;br /&gt;you: Thankyou&lt;br /&gt;Jessica: Your welcome, &lt;br /&gt;Jessica: Is there anything else I can assist you with today? &lt;br /&gt;you: No, that will be all.&lt;br /&gt;Jessica: Thank You for using Telstra.com. We look forward to assisting you in the future. Bye &lt;br /&gt;Jessica Has Disconnected&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;I'm not impressed. $7 extra a month in order to connect ADSL2+ at the new place. I pay fees to my ISP that they pay to telstra, then telstra takes extra dollars from me as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21652080-1483811711536602155?l=shiny.thorne.id.au' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shiny.thorne.id.au/feeds/1483811711536602155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21652080&amp;postID=1483811711536602155' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/1483811711536602155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/1483811711536602155'/><link rel='alternate' type='text/html' href='http://shiny.thorne.id.au/2008/04/gnnnr-telstra.html' title='Gnnnr, Telstra.'/><author><name>Stephen Thorne</name><uri>http://www.blogger.com/profile/03286375392973166411</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11645578395080429563'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21652080.post-911239368789007035</id><published>2008-03-08T12:00:00.004+10:00</published><updated>2008-03-08T12:10:54.502+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='hate'/><category scheme='http://www.blogger.com/atom/ns#' term='opensource'/><title type='text'>High Availability Terminal Emulator</title><content type='html'>So I've got some software that &lt;a href="http://glyf.livejournal.com/"&gt;glyph&lt;/a&gt; wrote. It's called the "High Availability Terminal Emulator". He put a link up to it a long while ago, and it's probably still around.&lt;br /&gt;&lt;br /&gt;What it is, is a replacement for xterm/aterm/gnome-terminal/konsole etc. It is literally some python glue to make a window containing a libvte terminal, and it's written in python.&lt;br /&gt;&lt;br /&gt;I have it in my '+junk' thingy on launchpad. It is accessable on &lt;a href="https://code.launchpad.net/~jerub/+junk/hate"&gt;code.launchpad.net&lt;/a&gt;. If you have bzr, you can do &lt;code&gt;bzr branch lp:~jerub/+junk/hate&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;There are many good reasons for writing this software. Being able to add features to terminal emulators is hard, writing python code is easy. I think it would be awesome to have a terminal emulator that did some advanced things like "survive X crashing", and have a key combo that says, "bring me a terminal that has nothing running in it and hasn't been used in a long while".&lt;br /&gt;&lt;br /&gt;hate.py is supplied without warranty, etc etc. I also have no idea what license it's under.&lt;br /&gt;&lt;br /&gt;If I have more contributors than just me and Glyph, I might even turn it into a 'real' project :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21652080-911239368789007035?l=shiny.thorne.id.au' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shiny.thorne.id.au/feeds/911239368789007035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21652080&amp;postID=911239368789007035' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/911239368789007035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/911239368789007035'/><link rel='alternate' type='text/html' href='http://shiny.thorne.id.au/2008/03/high-availability-terminal-emulator.html' title='High Availability Terminal Emulator'/><author><name>Stephen Thorne</name><uri>http://www.blogger.com/profile/03286375392973166411</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11645578395080429563'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21652080.post-8150629133527403877</id><published>2008-02-15T09:41:00.001+10:00</published><updated>2008-02-15T09:44:49.422+10:00</updated><title type='text'>Advanced Grub Notes</title><content type='html'>I have been doing a lot of hacking with grub and linux bootloading this week, and I wanted to make some notes about some of the more esoteric things in grub, that I feel are rather poorly documented.&lt;br&gt;&lt;br&gt;First of all, I had a hell of a time getting the 'savedefault' behaviour in grub working. It should work like this when you run grub on the linux commandline:&lt;br&gt;&lt;blockquote&gt;grub&amp;gt; savedefault --default=2 --once&lt;br&gt;&lt;/blockquote&gt;This means, "next time you boot, use the 2nd boot option, but only once". It does this by recording some information inside /boot/grub/stage_2 or something.&lt;br&gt;&lt;br&gt;I simply could not get this behaviour to work, and found that this was a 'better' way of doing things introduced by a patch. "grub-0.97-once.patch" is the name. I backed out this patch and rebuilt, which reverted to an older behaviour for saving default state.&lt;br&gt;&lt;br&gt;The use-case for us is an unattended bios update. Set the system to boot the bios installer just once, so it will reboot, install the bios, reboot, boot linux again.&lt;br&gt;&lt;br&gt;Now I use this grub config (in menu.lst) to make grub boot an alternate bootloader, just once:&lt;br&gt;&lt;blockquote&gt;default saved&lt;br&gt;&lt;br&gt;title Linux&lt;br&gt;   kernel /boot/vmlinuz ...&lt;br&gt;&lt;br&gt;title Alternate&lt;br&gt;   kernel /boot/memdisk&lt;br&gt;   savedefault 0&lt;br&gt;&lt;/blockquote&gt;State is now no longer saved in some binary format, it is saved in /boot/grub/default. Which is a text file, and on the first line is a number which is the default option to boot. Zero indexed. The format of this file is not documented. There is a standard tool for setting the contents of this file which the patch above removed, called grub-set-default. If you have this executable, you probably don't have the patch applied to your version.&lt;br&gt;&lt;br&gt;Usage of grub-set-default is trivial:&lt;br&gt;&lt;blockquote&gt;$ grub-set-default 0&lt;br&gt;&lt;/blockquote&gt;Easy.&lt;br&gt;&lt;br&gt;Now the next thing I had trouble with was labels. I have a seriously large amount of machines that I maintain and create. One of the scripts that I have has the duty of figuring out what devices (/dev/sda1, etc) the partitions are on, and writing the fstab and grub configurations correctly.&lt;br&gt;&lt;br&gt;So by using labels, I should be able to avoid having these scripts be dynamic.&lt;br&gt;&lt;br&gt;First, labelling unlabelled drives, both ext3 and swap:&lt;br&gt;&lt;blockquote&gt;# df -h&lt;br&gt;Filesystem            Size  Used Avail Use% Mounted on&lt;br&gt;/dev/sda1             1.5G  552M  856M  40% /&lt;br&gt;# cat /proc/swaps&lt;br&gt;Filename                                Type            Size    Used    Priority&lt;br&gt;/dev/sda5                               partition       136544  0       -1&lt;br&gt;# tune2fs -L / /dev/sda1&lt;br&gt;# swapoff /dev/sda5&lt;br&gt;# mkswap -L SWAP /dev/sda5&lt;br&gt;# swapon LABEL=SWAP&lt;br&gt;&lt;/blockquote&gt;Then, in your grub configuration, you need to make your kernel line look like this:&lt;br&gt;&lt;blockquote&gt;kernel /boot/vmlinuz root=LABEL=/&lt;br&gt;initrd /boot/initrd.img&lt;br&gt;&lt;/blockquote&gt;The initrd.img is absolutely essental. Without it you will not be able to boot, and you will get the message "VFS: Cannot open root device "LABEL=/" or unknown-block(0,0)". We didn't have an initrd for our kernel, and we were compelled to make one in order to get labels to work.&lt;br&gt;&lt;br&gt;The last thing is the pesky grub way of saying /dev/sda1. In grubspeak you say (hd0,0). This is supposed to be a magic way of saying "the first harddrive". So you would expect that when you have a recent motherboard where you have a PATA controller that performs better when you add the magic kernel line "hda=none" to make the drives appear as /dev/sda instead of /dev/hda (and incidentally have 8 times the throughput) that grub would automatically figure that out.&lt;br&gt;&lt;br&gt;But that's wrong. There is a file in /boot/grub/device.map that is specifically placed there to map from hd0 to /dev/hda. And that will screw things around.&lt;br&gt; &lt;br&gt;The last thing I had to do when setting up grub in my now nearly-totally-static configuration, with a static fstab and static grub configuration, is setup grub like this:&lt;br&gt;&lt;blockquote&gt;rm /boot/grub/device.map&lt;br&gt;grub-install --no-floppy&lt;br&gt;rm /boot/grub/device.map&lt;br&gt;&lt;/blockquote&gt;Running grub-install will automatically detect the devices and put them in those files. By removing the file you can cause grub to automatically detect everything at boot time.&lt;br&gt;&lt;br&gt;If anyone has easier ways of doing any of the above, or reasons why any of that is totally insane, I'm interested.&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21652080-8150629133527403877?l=shiny.thorne.id.au' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shiny.thorne.id.au/feeds/8150629133527403877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21652080&amp;postID=8150629133527403877' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/8150629133527403877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/8150629133527403877'/><link rel='alternate' type='text/html' href='http://shiny.thorne.id.au/2008/02/i-have-been-doing-lot-of-hacking-with.html' title='Advanced Grub Notes'/><author><name>Stephen Thorne</name><uri>http://www.blogger.com/profile/03286375392973166411</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11645578395080429563'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21652080.post-3198602907760887141</id><published>2007-12-14T15:24:00.000+10:00</published><updated>2007-12-14T15:25:38.259+10:00</updated><title type='text'>Christmas Parties</title><content type='html'>Well, I went to a christmas party last weekend that was possibly one of the strangest experiences I've ever had at a party. &lt;a title="AndyFitz" href="http://andy.brisgeek.com/" id="u8mr"&gt;AndyFitz&lt;/a&gt; really knows how to throw a bash that has everything. I think this list of dot-points should cover most of the details:&lt;br&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;Many good looking girls.&lt;/li&gt;&lt;li&gt;A bunch of geeks.&lt;/li&gt;&lt;li&gt;Some stunning steak.&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;a title="$3.95 takeaway pizza from dominos." href="http://www.ozbargain.com.au/deals/dominos.com.au" id="s1:7"&gt;$3.95 takeaway pizza from dominos.&lt;/a&gt; &lt;/li&gt;&lt;li&gt;A &lt;a title="car crash" href="http://www.flickr.com/photos/andyfitz/2099655949/" id="f1yr"&gt;car crash&lt;/a&gt;, directly in-front of where we were BBQing/drinking.&lt;/li&gt;&lt;li&gt;Directing traffic until emergency services arrived.&lt;br&gt;&lt;/li&gt;&lt;li&gt;A tour of the firetruck.&lt;/li&gt;&lt;li&gt;Cute ambulance officers that turn down an invite to the party.&lt;/li&gt;&lt;li&gt;One of the guys in the crash comes to the party.&lt;/li&gt;&lt;li&gt;Elspeth lost her watch and we all searched for it, in the dark. (Found it the next day)&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;Notes: no one was injured in the accident, it was just a little traumatic.&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21652080-3198602907760887141?l=shiny.thorne.id.au' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shiny.thorne.id.au/feeds/3198602907760887141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21652080&amp;postID=3198602907760887141' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/3198602907760887141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/3198602907760887141'/><link rel='alternate' type='text/html' href='http://shiny.thorne.id.au/2007/12/christmas-parties.html' title='Christmas Parties'/><author><name>Stephen Thorne</name><uri>http://www.blogger.com/profile/03286375392973166411</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11645578395080429563'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21652080.post-2811885612850584869</id><published>2007-09-28T09:05:00.000+10:00</published><updated>2007-09-28T09:33:56.350+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wrong'/><category scheme='http://www.blogger.com/atom/ns#' term='hate'/><title type='text'>Something that made us laugh today</title><content type='html'>A vision of the future?&lt;br /&gt;&lt;blockquote&gt;The  full documentation for this command is maintained as a Wikipedia page. If the web browser is properly installed at your site, the command&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;              www-browser http://en.wikipedia.com/wiki/&lt;em&gt;command&lt;/em&gt;&lt;/pre&gt;&lt;br /&gt;should give you access to the complete manual.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21652080-2811885612850584869?l=shiny.thorne.id.au' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shiny.thorne.id.au/feeds/2811885612850584869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21652080&amp;postID=2811885612850584869' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/2811885612850584869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/2811885612850584869'/><link rel='alternate' type='text/html' href='http://shiny.thorne.id.au/2007/09/something-that-made-us-laugh-today.html' title='Something that made us laugh today'/><author><name>Stephen Thorne</name><uri>http://www.blogger.com/profile/03286375392973166411</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11645578395080429563'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21652080.post-2795914447768980325</id><published>2007-09-17T15:16:00.000+10:00</published><updated>2007-09-17T15:24:08.791+10:00</updated><title type='text'>The Wheel of Time Turns</title><content type='html'>&lt;blockquote&gt;The Wheel of Time turns, and Ages come and pass, leaving memories that become legend. Legend fades to myth, and even myth is long forgotten when the Age that gave it birth comes again. In one Age, called the Third Age by some, an Age yet to come, an Age long past, a wind rose. The wind was not the beginning. There are neither beginnings nor endings to the turning of the Wheel of Time. But it was a beginning.&lt;/blockquote&gt; - James Oliver Rigney, Jr. October 17, 1948–September 16, 2007.&lt;br /&gt;&lt;br /&gt;The man I know as Robert Jordan has passed away. Details are on &lt;a href="http://en.wikipedia.org/wiki/Robert_Jordan"&gt;wikipedia&lt;/a&gt;, &lt;a href="http://www.tarvalon.net/news.asp?article=501"&gt;tarvalon.net&lt;/a&gt; and his own &lt;a href="http://www.dragonmount.com/RobertJordan"&gt;blog&lt;/a&gt;. I'm still in shock.&lt;br /&gt;&lt;br /&gt;Rest in Peace. We will miss you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21652080-2795914447768980325?l=shiny.thorne.id.au' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shiny.thorne.id.au/feeds/2795914447768980325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21652080&amp;postID=2795914447768980325' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/2795914447768980325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/2795914447768980325'/><link rel='alternate' type='text/html' href='http://shiny.thorne.id.au/2007/09/wheel-of-time-turns.html' title='The Wheel of Time Turns'/><author><name>Stephen Thorne</name><uri>http://www.blogger.com/profile/03286375392973166411</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11645578395080429563'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21652080.post-3127921069575327934</id><published>2007-08-03T22:51:00.000+10:00</published><updated>2007-08-03T23:04:03.397+10:00</updated><title type='text'>Birthday Party :)</title><content type='html'>I am turning old again, and I plan to have a party at my house on the 18th of August. I plan to have a simple house party and fire up my BBQ.&lt;br /&gt;&lt;br /&gt;Please bring: Drinks and BBQ food.&lt;br /&gt;Please RSVP by: 12th of August.&lt;br /&gt;The party will start around 5pm at my house in Indooroopilly.&lt;br /&gt;&lt;br /&gt;If you'd like to come along, drop me a line on my &lt;a href="mailto:stephen@thorne.id.au"&gt;email address&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21652080-3127921069575327934?l=shiny.thorne.id.au' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shiny.thorne.id.au/feeds/3127921069575327934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21652080&amp;postID=3127921069575327934' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/3127921069575327934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/3127921069575327934'/><link rel='alternate' type='text/html' href='http://shiny.thorne.id.au/2007/08/birthday-party.html' title='Birthday Party :)'/><author><name>Stephen Thorne</name><uri>http://www.blogger.com/profile/03286375392973166411</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11645578395080429563'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21652080.post-1023976418980705463</id><published>2007-07-22T23:06:00.000+10:00</published><updated>2007-07-22T23:32:02.652+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='olpc'/><category scheme='http://www.blogger.com/atom/ns#' term='networking'/><title type='text'>One Content Filter Per Child</title><content type='html'>&lt;a href="http://www.reuters.com/article/oddlyEnoughNews/idUSL1966647020070720"&gt;Reuters say&lt;/a&gt; that kids looked at porn on the Internet, using the prototype laptops provided by &lt;a href="http://laptop.org/"&gt;OLPC&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I have been told in response to that article that content filtering software on the laptops themselves will be strongly discouraged. If it is indeed implemented somewhere, it will likely be done at the gateways.&lt;br /&gt;&lt;br /&gt;Content filtering at the point of the internet connection will be possible. It will not be standard, it will not be integrated, and it will be organised and implemented by the individual countries or organisations that are running the laptop programs.&lt;br /&gt;&lt;br /&gt;&lt;small&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; I'm just a volunteer repeating what I've heard, I don't represent OLPC.&lt;/small&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21652080-1023976418980705463?l=shiny.thorne.id.au' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shiny.thorne.id.au/feeds/1023976418980705463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21652080&amp;postID=1023976418980705463' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/1023976418980705463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/1023976418980705463'/><link rel='alternate' type='text/html' href='http://shiny.thorne.id.au/2007/07/one-content-filter-per-child.html' title='One Content Filter Per Child'/><author><name>Stephen Thorne</name><uri>http://www.blogger.com/profile/03286375392973166411</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11645578395080429563'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21652080.post-7067637357181730039</id><published>2007-06-22T10:40:00.000+10:00</published><updated>2007-06-22T10:45:46.550+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delta'/><title type='text'>Delta Called Off</title><content type='html'>The camp I was going to be running in the first week of July, &lt;a href="http://camps.suqld.org.au/delta"&gt;Delta&lt;/a&gt;, has been called off due to lack of numbers. The last few weeks have been quite stressful because of anxiety over this camp going ahead. We're now planning to run it in January instead, and hopefully we'll attract a few more people.&lt;br /&gt;&lt;br /&gt;I'm still planning to take that week of holidays. I'll probably end up hacking on olpc stuff if I can find a few quiet moments.&lt;br /&gt;&lt;br /&gt;It's all been a bit of an emotional roller coaster for me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21652080-7067637357181730039?l=shiny.thorne.id.au' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shiny.thorne.id.au/feeds/7067637357181730039/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21652080&amp;postID=7067637357181730039' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/7067637357181730039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/7067637357181730039'/><link rel='alternate' type='text/html' href='http://shiny.thorne.id.au/2007/06/delta-called-off.html' title='Delta Called Off'/><author><name>Stephen Thorne</name><uri>http://www.blogger.com/profile/03286375392973166411</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11645578395080429563'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21652080.post-6065449409745910089</id><published>2007-06-18T21:53:00.000+10:00</published><updated>2007-06-18T22:14:50.423+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='australia'/><category scheme='http://www.blogger.com/atom/ns#' term='coffee'/><category scheme='http://www.blogger.com/atom/ns#' term='afk cafe'/><title type='text'>Experiences at a new Cafe</title><content type='html'>Those who know me, know I'm a coffee snob. A big one. So when I recommend a cafe I usually use words like 'acceptable'.&lt;br /&gt;&lt;br /&gt;Well, I've gotta say, &lt;a href="http://afkcafe.com/"&gt;AFK Cafe&lt;/a&gt; is certainly acceptable. It's a new cafe that is very geek friendly. Free wifi (in AUSTRALIA!), gaming computers. There are D&amp;D groups that play there. I've even heard rumours of Blood Bowl games... All this in a cafe has only been open 8 weeks.&lt;br /&gt;&lt;br /&gt;We had coffee there on Friday night. Elspeth and I have the distinctive combination of a Short Macchiato (hers) and a Short Black (mine). Sometimes (such as when the cafe serves Robert Timms and we didn't realise until the last moment) we take the better part of valor and have tea. On this occasion the poor man make our usual coffee on the faith that he wouldn't botch it, and he pleasantly surprised us by delivering an acceptable pair of coffees.&lt;br /&gt;&lt;br /&gt;... several rounds of coffee later, we ended up keeping the proprietor and his lovely wife entertained till the wee hours of the morning, until the point where the poor man realised that he had to be back at work in 6 hours to open again. Whoops.&lt;br /&gt;&lt;br /&gt;We went back on Sunday, and this time for a meal. Elspeth had their 'Aussie' Pizza. Australian Pizza has an egg on it. This had several. We both really liked it. I had the Fettuccine Con Pollo. Yum, a little small of a serving, not enough Fettuccine, a little too much sauce, but it was really nice. I ended up eating a slice or two of Elspeth's pizza because I was hungry.&lt;br /&gt;&lt;br /&gt;Again, we ended up yakking to the proprietor. I love getting to know the staff of places I like.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21652080-6065449409745910089?l=shiny.thorne.id.au' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shiny.thorne.id.au/feeds/6065449409745910089/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21652080&amp;postID=6065449409745910089' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/6065449409745910089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/6065449409745910089'/><link rel='alternate' type='text/html' href='http://shiny.thorne.id.au/2007/06/experiences-at-new-cafe.html' title='Experiences at a new Cafe'/><author><name>Stephen Thorne</name><uri>http://www.blogger.com/profile/03286375392973166411</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11645578395080429563'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21652080.post-8718958280380235456</id><published>2007-06-01T10:20:00.000+10:00</published><updated>2007-06-01T10:55:59.736+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='australia'/><category scheme='http://www.blogger.com/atom/ns#' term='telstra'/><title type='text'>News Limited Internet</title><content type='html'>So I was reading &lt;a href="http://whirlpool.net.au/"&gt;whirlpool&lt;/a&gt; today, I don't read the forums, and only skim their articles. It's the little sidebar of interesting internet related news articles that I go there for.&lt;br /&gt;&lt;br /&gt;I found this gem:&lt;br /&gt;&lt;blockquote&gt;Telstra is willing to invest more than $4 billion of its own money in a FTTN network.&lt;br /&gt;&lt;br /&gt;We are ready, starting within days to dig the trenches, lay the cables, connect the fibres, light up the network and change the way Australian families and businesses communicate with each other and with the world.&lt;br /&gt;&lt;br /&gt;Telstra can raise the money immediately so financing for us is not an issue. &lt;br /&gt;&lt;br /&gt;It would be an open access network, available to our competitors at a price reflecting the cost of the network and a competitive return for the Telstra shareholders who are risking their money to build it.&lt;/blockquote&gt;-- &lt;a href="http://www.news.com.au/heraldsun/story/0,21985,21828042-664,00.html"&gt;A phantom to create an illusion&lt;/a&gt; - Telstra CFO John Stanhope&lt;br /&gt;&lt;br /&gt;Wow. Just wow. Telstra's plan has been behind closed doors for a long time now. The best figures I've seen, that actually give specifics, put the monthly cost of a 512kbit internet service at $80. Over $100 for real broadband. &lt;br /&gt;&lt;br /&gt;Today, you can get faster, cheaper, internet using ADSL2+ from a non-telstra provider. This is a clear indication that either someone is slandering Telstra by saying their costs to the consumer are too high (likely), and/or Telstra is going screw us (certain). &lt;br /&gt;&lt;br /&gt;Telstra is saying it would be an open network. Telstra is also blocking the network from going ahead until the ACCC is banned from ever telling Telstra that they are charging too much. The conclusion I am forced to draw is that Telstra is going to be charging as much as the market can possibly pay.&lt;br /&gt;&lt;br /&gt;I'm sorry John. Take your anticompetitive bullshit and stick it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21652080-8718958280380235456?l=shiny.thorne.id.au' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shiny.thorne.id.au/feeds/8718958280380235456/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21652080&amp;postID=8718958280380235456' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/8718958280380235456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/8718958280380235456'/><link rel='alternate' type='text/html' href='http://shiny.thorne.id.au/2007/06/news-limited-internet.html' title='News Limited Internet'/><author><name>Stephen Thorne</name><uri>http://www.blogger.com/profile/03286375392973166411</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11645578395080429563'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21652080.post-6991352110660787220</id><published>2007-06-01T09:42:00.000+10:00</published><updated>2007-06-21T09:37:48.710+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='touchstream'/><title type='text'>Results of using a Touchstream LP</title><content type='html'>A few months ago I bought a Fingerworks Touchstream LP keyboard. I am a little bit fanatical about keyboards, even more so since I started having &lt;a href="http://shiny.thorne.id.au/2006/06/pain-in-wrist.html"&gt;problems with my wrists&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://flickr.com/photo_zoom.gne?id=387258515&amp;size=o"&gt;&lt;img src="http://farm1.static.flickr.com/145/387258515_e7f47613f9.jpg"&gt;Touchstream on Flickr&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you've not heard of it, the Touchstream is a keyboard like none you have ever seen. If you can imagine that little area of touch sensitive mousing surface used on laptops, blown up into two massive totally touch sensitive surfaces, printed with keys, and then given a usb interface. That's what this keyboard is.&lt;br /&gt;&lt;br /&gt;Frequently asked questions that I will answer immediately:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;There is no tactile feedback that you have touched a key.&lt;/li&gt;&lt;li&gt;Yes it is very hard to type on.&lt;/li&gt;&lt;li&gt;No, you cannot buy these keyboards, you have to get them second hand, usually from the cold dead hands of their previous owners.&lt;/li&gt;&lt;/ul&gt;I was quite lucky that I had a friend who found that his RSI problems were not exacerbated by his usage of a laptop keyboard and trackpad, so he was kind enough to sell his to me for what he bought it for.&lt;br /&gt;&lt;br /&gt;I love my touchstream. My typo rate has gone up considerably, but I no longer have RSI problems linked to my work. I only really have problems when I have marathon gaming sessions at home. Previously, playing GTA for 3 hours was enough to give me wrist pain for a week. Now playing a game for 8 hours means that I'm a little sore the next day, and that's it.&lt;br /&gt;&lt;br /&gt;I give it 6/10 for being a keyboard, 11/10 for being a mouse.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21652080-6991352110660787220?l=shiny.thorne.id.au' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shiny.thorne.id.au/feeds/6991352110660787220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21652080&amp;postID=6991352110660787220' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/6991352110660787220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/6991352110660787220'/><link rel='alternate' type='text/html' href='http://shiny.thorne.id.au/2007/06/results-of-using-touchstream-lp.html' title='Results of using a Touchstream LP'/><author><name>Stephen Thorne</name><uri>http://www.blogger.com/profile/03286375392973166411</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11645578395080429563'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21652080.post-3085073543482644654</id><published>2007-05-03T09:43:00.000+10:00</published><updated>2007-05-04T11:54:14.559+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='parser'/><category scheme='http://www.blogger.com/atom/ns#' term='brispy'/><category scheme='http://www.blogger.com/atom/ns#' term='antlr'/><title type='text'>BrisPy rc2</title><content type='html'>The second meeting of BrisPy went well last night. Clinton Roy did a great talk on ANTLR and the python target. As I now understand it, ANTLR is a LL* parser that can generate recursive descent pure python parsers. &lt;br /&gt;&lt;br /&gt;The wonderful thing about a recursive descent parser is that you don't have to spend 3 hours with a pad of paper to evaluate the parser by hand on sample input to track down which rule has a bug in it, it just generates a single function per grammar rule, and all the functions are easily human readable.&lt;br /&gt;&lt;br /&gt;It sounds like the parsing side of things is a super happy easy world, but the generation side of things requires using intermediate abstract syntax trees in order to be able to do things like have multiple targets - using the same grammar file to do pretty printing, code rewriting and code generation looks like it's harder than it needs to be with ANTLR3.&lt;br /&gt;&lt;br /&gt;Regardless, this means I won't have to handcraft many recursive descent parsers anymore. I have a few  around. Exarkun got me to do an &lt;code&gt;nsswitch.conf&lt;/code&gt; parser, Nevow has a JSON parser I wrote, I have a dice rolling irc bot that can handle &lt;code&gt;(10*3d6+(1d4+1)*(1d6 drop lowest))&lt;/code&gt;. All of those are recursive descent parsers.&lt;br /&gt;&lt;br /&gt;The meeting went well, there were a few non-computer scientists that were left behind, but you kind of expect that.&lt;br /&gt;&lt;br /&gt;We'd like someone to volunteer to give a talk next month (we meet on the first Wednesday of the month) but we don't have any volunteers yet. I think something using one of the many python web technologies would be received well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21652080-3085073543482644654?l=shiny.thorne.id.au' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shiny.thorne.id.au/feeds/3085073543482644654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21652080&amp;postID=3085073543482644654' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/3085073543482644654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21652080/posts/default/3085073543482644654'/><link rel='alternate' type='text/html' href='http://shiny.thorne.id.au/2007/05/brispy-rc2.html' title='BrisPy rc2'/><author><name>Stephen Thorne</name><uri>http://www.blogger.com/profile/03286375392973166411</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11645578395080429563'/></author><thr:total>0</thr:total></entry></feed>