<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>David  Claridge</title>
	<atom:link href="http://dclaridge.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://dclaridge.wordpress.com</link>
	<description>The occasional ramblings of a Computer Science student in Sydney, Australia</description>
	<lastBuildDate>Mon, 15 Aug 2011 09:57:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='dclaridge.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>David  Claridge</title>
		<link>http://dclaridge.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://dclaridge.wordpress.com/osd.xml" title="David  Claridge" />
	<atom:link rel='hub' href='http://dclaridge.wordpress.com/?pushpress=hub'/>
		<item>
		<title>How many times do we have to tell you?</title>
		<link>http://dclaridge.wordpress.com/2011/06/21/how-many-times-do-we-have-to-tell-you/</link>
		<comments>http://dclaridge.wordpress.com/2011/06/21/how-many-times-do-we-have-to-tell-you/#comments</comments>
		<pubDate>Tue, 21 Jun 2011 08:40:40 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[backups]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[backup]]></category>

		<guid isPermaLink="false">http://blog.daave.com/?p=229</guid>
		<description><![CDATA[I just read an article in the SMH called 4800 Aussie sites evaporate after hack Not only is appalling that this web host didn&#8217;t have any off-site backups, but that those who are claiming to have had their businesses destroyed or livelihoods lost as a result of the hack would rely on their web host&#8217;s [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dclaridge.wordpress.com&amp;blog=1293476&amp;post=229&amp;subd=dclaridge&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I just read an article in the SMH called <a href="http://www.smh.com.au/technology/security/4800-aussie-sites-evaporate-after-hack-20110621-1gd1h.html">4800 Aussie sites evaporate after hack</a></p>
<p>Not only is appalling that this web host didn&#8217;t have any off-site backups, but that those who are claiming to have had their businesses destroyed or livelihoods lost as a result of the hack would rely on their web host&#8217;s internal backups as their only data redundancy is completely ridiculous in this era.</p>
<p>Everyone, especially businesses, if you don&#8217;t have a backup and recovery procedure in place that can handle a complete loss of any one site, and any other servers whose keys are stored on machines at that site  &#8211; get one <strong>today</strong></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dclaridge.wordpress.com/229/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dclaridge.wordpress.com/229/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dclaridge.wordpress.com/229/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dclaridge.wordpress.com/229/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dclaridge.wordpress.com/229/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dclaridge.wordpress.com/229/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dclaridge.wordpress.com/229/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dclaridge.wordpress.com/229/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dclaridge.wordpress.com/229/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dclaridge.wordpress.com/229/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dclaridge.wordpress.com/229/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dclaridge.wordpress.com/229/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dclaridge.wordpress.com/229/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dclaridge.wordpress.com/229/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dclaridge.wordpress.com&amp;blog=1293476&amp;post=229&amp;subd=dclaridge&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dclaridge.wordpress.com/2011/06/21/how-many-times-do-we-have-to-tell-you/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d22d55f70c7685d513f0c6c263d5219d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Dave</media:title>
		</media:content>
	</item>
		<item>
		<title>Adventures with Google App Engine</title>
		<link>http://dclaridge.wordpress.com/2011/06/06/adventures-with-google-app-engine/</link>
		<comments>http://dclaridge.wordpress.com/2011/06/06/adventures-with-google-app-engine/#comments</comments>
		<pubDate>Mon, 06 Jun 2011 06:48:26 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://blog.daave.com/?p=195</guid>
		<description><![CDATA[A crazy idea On Saturday night one of my housemates thought it would be a good idea to apply the concept of Mark Zuckerberg&#8217;s now-infamous &#8216;FaceMash.com&#8217; website to professional StarCraft II players. SC2 has a huge community that would probably find something like this very funny, and we were bored and needed something to code [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dclaridge.wordpress.com&amp;blog=1293476&amp;post=195&amp;subd=dclaridge&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h4>A crazy idea</h4>
<p>On Saturday night one of my housemates thought it would be a good idea to apply the concept of Mark Zuckerberg&#8217;s now-infamous &#8216;FaceMash.com&#8217; website to professional StarCraft II players. SC2 has a huge community that would probably find something like this very funny, and we were bored and needed something to code &#8211; the perfect opportunity, so at 8pm we got to work on <a href="http://www.studcraft2.com/" title="StudCraft2.com" target="_blank">StudCraft2.com</a>.</p>
<p><a href="http://dclaridge.files.wordpress.com/2011/06/studcraft-homepage.png"><img src="http://dclaridge.files.wordpress.com/2011/06/studcraft-homepage.png?w=300&#038;h=199" alt="" title="studcraft-homepage" width="300" height="199" class="alignnone size-medium wp-image-218" /></a></p>
<h4>Google App Engine</h4>
<p>We weren&#8217;t sure how much traffic this site would generate, so a distributed, scalable hosting solution seemed like a good idea; we also wanted to use a framework with a simple deployment mechanism and an easy to use database API; so I decided to write the main site using appengine and Google&#8217;s &#8216;webapp&#8217; framework, while my housemate worked on some Perl scripts to scrape team sites and the sc2wiki for player information.</p>
<p>This was my first real foray into appengine, and we were coding through the night hoping to deploy as soon as possible, so please take these code samples with a grain of salt, the approaches taken here may be suboptimal, non-idiomatic and brilliant examples of poor design.</p>
<p>First I had to design the models, like this one, that would be stored in the appengine datastore:</p>
<pre>
class Player(db.Model):
   """Models a StarCraft II player"""
   handle = db.StringProperty()
   name = db.StringProperty()
   team = db.ReferenceProperty(Team)
   race = db.ReferenceProperty(Race)
   nation = db.StringProperty()
   photo = db.StringProperty()
   score = db.FloatProperty()
   votecount = db.IntegerProperty()
</pre>
<p>Next was the class that handles the main page of the website:</p>
<pre>
class MainPage(webapp.RequestHandler):
   def post(self):
      if self.processForm():
         self.redirect("/")

   def get(self):
      self.showVotePage()

   def showVotePage(self):
      ...

   def processForm(self):
      ...

   def updateScore(self, winner, loser):
      ...
</pre>
<p>After processing the form in <em>post()</em>, we redirect to <em>get()</em> so that clicking &#8216;refresh&#8217; doesn&#8217;t cause a browser message asking you to resubmit post data. The <em>processForm</em> method figures out which pair of players you are voting on, who won, and whether it&#8217;s a legal vote (more on this later). If all that checks out it calls <em>updateScore</em>.</p>
<h4>Updating scores</h4>
<pre>
def updateScore(self, winner, loser):
   if winner is not None and loser is not None
         and winner.key() != loser.key():
      K = 20
      winnerQ = math.pow(10, winner.score/400.0)
      loserQ  = math.pow(10, loser.score/400.0)
      winnerE = winnerQ/(winnerQ+loserQ)
      winnerS = 1.0
      loserE  = loserQ/(winnerQ+loserQ)
      loserS  = 0.0
      winner.score = winner.score + K*(winnerS - winnerE)
      loser.score  = loser.score + K*(loserS - loserE)
      winner.votecount = winner.votecount + 1
      loser.votecount = loser.votecount + 1
      winner.put()
      loser.put()
</pre>
<p>This is a simple implementation of the ELO rating system, as used in chess tournaments. The variables <em>winnerE</em> and <em>loserE</em> are the expected points of the two players in the matchup, based on their current scores. If winner and loser have equal scores, both expected values will be 0.5, the further ahead the winner is, the closer their expected value is to 1, and the loser&#8217;s expected value is to 0, in every case <em>winnerE + loserE</em> is equal to 1. The scores are then updated according to the difference between their expected scores and actual scores, multiplied by a fixed learning rate <em>K</em>, in this case 20.</p>
<p>This implementation is <strong>not</strong> thread-safe, because the score of a player may change between when it is read and when it is put, or ever between when the winner is put and the loser is put. Again, more on this later.</p>
<h4>Duck-typing is your friend</h4>
<p>A couple of hours into writing this app, we decided that we wanted to rank Starcraft II teams and races, not just individual players. So, I had a look at the above <em>updateScore</em> method to see what needed to change, the answer: nothing at all!</p>
<p>I often hear people (including myself) complaining about Python&#8217;s duck-typing being responsible for all sorts of hard-to-find bugs, but this was a situation where it really shines. All that is needed for an object to work with the <em>updateScore</em> method, is for it to have <em>key()</em> and <em>put()</em> methods, and <em>score</em> and <em>votecount</em> properties. So I designed the other models to match:</p>
<pre>
class Team(db.Model):
   """Models a StarCraft II team/clan"""
   name = db.StringProperty()
   score = db.FloatProperty()
   votecount = db.IntegerProperty()

class Race(db.Model):
   """Models a StarCraft II race (ZPTR)"""
   name = db.StringProperty()
   score = db.FloatProperty()
   votecount = db.IntegerProperty()
</pre>
<p>In other object-oriented languages like Java, to achieve the same effect of having a generic <em>updateScore</em> function that works with several object types, I would have to create a ScoredObject interface or abstract class with the required parameters; then have each of Player, Team and Race subclass or implement ScoredObject.</p>
<p>While you may argue that this more explicit type hierarchy makes things easier to reason about, the sheer number of lines of code that are required (in contrast to the duck-typing approach), makes it a poor choice for a rapidly developed application like this one.</p>
<h4>Beware the script-kiddie</h4>
<p>The StarCraft II community is home to a number of programmers and other tech-savvy users, who may attempt to sway the results of the voting site in favour of their personal preferences by cheating the system. To combat this, I wanted to design the site in such a way that it would detect repeated requests from the same user, or forms that have been modified to vote on a particular pair of users rather than the ones randomly allocated for that request. This is what I came up with:</p>
<pre>
class SpamHash(db.Model):
   player1 = db.StringProperty()
   player2 = db.StringProperty()
   secret = db.StringProperty()
</pre>
<p>Each time we serve up a page with a voting form, we create a new SpamHash object:</p>
<pre>
spamhash = SpamHash(player1=unicode(player1.key()),
                    player2=unicode(player2.key()),
                    secret=base64.b64encode(os.urandom(8), "*!"))
</pre>
<p>The form contains the players string-encoded keys, and a random 8-byte string, in hidden fields. The JavaScript on the page itself sets a &#8216;winner&#8217; field to 0 or 1 when a user clicks a photo or presses the left or right arrow keys.</p>
<p>When we receive a <em>post()</em> request, we look up the matching SpamHash and delete it:</p>
<pre>
matchingSpamHash = SpamHash.gql("WHERE player1 = :1 AND player2 = :2
   AND secret = :3", player1ID, player2ID, spamhash).get()
if matchingSpamHash is not None:
   matchingSpamHash.delete()
else:
   ... # redirect to error page
</pre>
<p>This way each form we serve can only be used once, and only for the pair of players we randomly assigned. The system accumulates unused SpamHash objects over time, when people visit the home page but do not vote. If that ever gets out of control I&#8217;ll add timestamps to the SpamHash and create a CRON job that deletes old ones from time to time.</p>
<p><a href="http://dclaridge.files.wordpress.com/2011/06/studcraft-apm.png"><img src="http://dclaridge.files.wordpress.com/2011/06/studcraft-apm.png?w=300&#038;h=130" alt="" title="studcraft-apm" width="300" height="130" class="alignnone size-medium wp-image-220" /></a></p>
<h4>Going live</h4>
<p>After a few finishing touches, a dodgy script to load up all the data, and a page for viewing the top-scoring Players, Teams and Races, it was time to go live. We started by just posting a link on the TeamLiquid.net forum, a popular hang-out for the SC2 community in the US, Australia and Europe, and sat back to watch the vote count grow.</p>
<p>We hit 1000 votes in the first 20 minutes, 5000 in the first hour and 8000 in the first two hours. Things have died off since then, but at our peak we were serving 24 page requests per second.</p>
<h4>Transactions, Atomicity and Future Work</h4>
<p>Earlier I mentioned that the score update function is not thread safe, in fact neither are the counter increments.</p>
<p>AppEngine provides a way to create <em>transactions</em> that are guaranteed to succeed or fail in their entirety, maintaining data integrity.   To ensure that the ELO updates have a zero-sum net effect on the total number of points in the system, all the Player objects must be put in the same entity-group. When two simultaneous transactions that operate on the same entity-group are in progress, the one that tries to commit second will fail, effectively causing a vote not to be counted. Ideally we would like to add all votes to a queue of jobs to be processed atomically when the server has time (but I&#8217;m not sure how to do this with AppEngine).</p>
<p>As for the counters, there&#8217;s a simple pattern called a &#8216;sharded counter&#8217; that gets around these sort of contention problems. A counter is split into N &#8216;shards&#8217;, each of which is a root entity, and when you want to increment the counter, you choose a random shard to increment in a transaction, then there&#8217;s only a 1/N chance of a collision, so setting N to a number a few times larger than your expected number of increments/second should allow almost all the transactions to succeed. When you want to print the counter, you just add up all the shards.  Perhaps it&#8217;s possible to come up with a sharded version of the ELO update algorithm, but in general ELO updates are not commutative.</p>
<p>So, if we have time, we might update the StudCraft2 code to be thread safe so that we stop &#8216;leaking points&#8217; as we are now, and perhaps make the system generic enough to be used for other types of pairwise-voting-comparison websites. Either way building this website was a lot of fun, and I learnt a lot about using Google AppEngine!</p>
<p><a href="http://dclaridge.files.wordpress.com/2011/06/studcraft-winners.png"><img src="http://dclaridge.files.wordpress.com/2011/06/studcraft-winners.png?w=300&#038;h=239" alt="" title="studcraft-winners" width="300" height="239" class="alignnone size-medium wp-image-221" /></a></p>
<p>All the code is available on <a href="http://github.com/davidclaridge/StudCraft/" title="StudCraft on GitHub" target="_blank">my GitHub account</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dclaridge.wordpress.com/195/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dclaridge.wordpress.com/195/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dclaridge.wordpress.com/195/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dclaridge.wordpress.com/195/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dclaridge.wordpress.com/195/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dclaridge.wordpress.com/195/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dclaridge.wordpress.com/195/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dclaridge.wordpress.com/195/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dclaridge.wordpress.com/195/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dclaridge.wordpress.com/195/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dclaridge.wordpress.com/195/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dclaridge.wordpress.com/195/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dclaridge.wordpress.com/195/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dclaridge.wordpress.com/195/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dclaridge.wordpress.com&amp;blog=1293476&amp;post=195&amp;subd=dclaridge&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dclaridge.wordpress.com/2011/06/06/adventures-with-google-app-engine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d22d55f70c7685d513f0c6c263d5219d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Dave</media:title>
		</media:content>

		<media:content url="http://dclaridge.files.wordpress.com/2011/06/studcraft-homepage.png?w=300" medium="image">
			<media:title type="html">studcraft-homepage</media:title>
		</media:content>

		<media:content url="http://dclaridge.files.wordpress.com/2011/06/studcraft-apm.png?w=300" medium="image">
			<media:title type="html">studcraft-apm</media:title>
		</media:content>

		<media:content url="http://dclaridge.files.wordpress.com/2011/06/studcraft-winners.png?w=300" medium="image">
			<media:title type="html">studcraft-winners</media:title>
		</media:content>
	</item>
		<item>
		<title>Installing Windows 7 on my Linux box</title>
		<link>http://dclaridge.wordpress.com/2011/04/28/installing-windows-7-on-my-linux-box/</link>
		<comments>http://dclaridge.wordpress.com/2011/04/28/installing-windows-7-on-my-linux-box/#comments</comments>
		<pubDate>Thu, 28 Apr 2011 08:10:46 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://blog.daave.com/?p=182</guid>
		<description><![CDATA[For reasons that I&#8217;ll go into in another post, I&#8217;ve decided to make use of my MSDNAA licences and install Windows 7 and Visual Studio Ultimate 2010 on my primary desktop machine, called &#8216;enterprise&#8217; (as in Star Trek, rather than &#8216;enterprisy&#8217; software). Hopefully this can be done without causing too much of a fuss with [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dclaridge.wordpress.com&amp;blog=1293476&amp;post=182&amp;subd=dclaridge&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>For reasons that I&#8217;ll go into in another post, I&#8217;ve decided to make use of my MSDNAA licences and install Windows 7 and Visual Studio Ultimate 2010 on my primary desktop machine, called &#8216;enterprise&#8217; (as in Star Trek, rather than &#8216;enterprisy&#8217; software). Hopefully this can be done without causing too much of a fuss with my partitions and bootloader.</p>
<p>The current setup is thus:<br />
The first disk is 500GB (465.76 logical) and has 3 partitions, a 100GB Windows XP partition (to be replaced), followed by a 2GB swap partition and the rest (370GB or so) is taken up by my Ubuntu root partition, no separate /home. Then there are 3 400GB drives in RAID0 using mdadm, that logical volume has one big ext4 partition (Barclay).</p>
<p>The plan is simply to erase the XP partition and install Windows 7 in its place, then update grub from a live CD. In the future I may end up shrinking the Ubuntu partition (since all the big stuff lives in Barclay), move the swap across, and grow the Windows 7 partition&#8230; apparently GParted can do that these days.</p>
<p>This all sounds fairly straightforward, hopefully the Windows installer doesn&#8217;t decide to do something dumb, like install onto one of the 400G drives it doesn&#8217;t recognise as being formatted without giving me a chance to tell it where to install. The trickiest part will be running updage-grub. Jayen has suggested that it would be a BadIdea<sup>TM</sup> to just run the update-grub found on a live CD as I usually do, and should really run the one installed on my Linux system, since differences between versions could cause problems. Assuming my first HDD is sda, and the root partition is sda3, this should be a matter of firing up the live CD and running:</p>
<p><code><br />
$ sudo su -<br />
$ mount /dev/sda3 /mnt<br />
$ mount -B /dev /mnt/dev<br />
$ mount -B /proc /mnt/proc<br />
$ mount -B /sys /mnt/sys<br />
$ chroot /mnt<br />
$ update-grub<br />
$ grub-install /dev/sda<br />
$ exit<br />
</code></p>
<p>I&#8217;ll update this post with how it all goes!</p>
<p><b>Update:</b><br />
Everything went roughly as planned, except for one minor hitch. I was feeling paranoid about my RAID array, and I don&#8217;t have enough SATA cables for the CD drive as well as 4 hard drives, so I unplugged the RAID drives before the install. After doing the update-grub and plugging everything back in, the RAID array wouldn&#8217;t assemble! Turns out I swapped 2 of the SATA cables (and mdadm is that finnicky?).</p>
<p>Only other unexpected thing was the Windows installer making 2 partitions instead of one, so I needed to mount /dev/sda4 rather than /dev/sda3. Apparently the extra partition is a Windows equivalent of /boot.</p>
<p>I&#8217;m already getting annoyed at using Windows and associated tools:</p>
<ul>
<li>There&#8217;s no PDF reader built in.  How am I supposed to read&#8230; anything?! Is Adobe paying them to leave this out?</li>
<li>Seriously need package management. Why I have to follow a 3-step process to install a sequence of updates to the Windows Phone dev tools is beyond me. Also, I now have a dozen useless .exe&#8217;s sitting in my Downloads directory (perhaps if I downloaded to /tmp&#8230;). </li>
<li>To do Windows Phone development, even if you&#8217;ve already installed the full-blown &#8216;Ultimate&#8217; edition of VS2010, you have to go back and install the &#8216;Express&#8217; version.</li>
<li>Highlight-copy/middleclick-paste is definitely the coolest feature of X. Anyone know how I can make Windows Shell do this?</li>
</ul>
<p>On the plus side, useful codecs are installed by default in WMP, and Daemon Tools is easier to use than &#8216;mount -o loop&#8217;.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dclaridge.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dclaridge.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dclaridge.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dclaridge.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dclaridge.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dclaridge.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dclaridge.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dclaridge.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dclaridge.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dclaridge.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dclaridge.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dclaridge.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dclaridge.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dclaridge.wordpress.com/182/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dclaridge.wordpress.com&amp;blog=1293476&amp;post=182&amp;subd=dclaridge&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dclaridge.wordpress.com/2011/04/28/installing-windows-7-on-my-linux-box/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d22d55f70c7685d513f0c6c263d5219d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Dave</media:title>
		</media:content>
	</item>
		<item>
		<title>PhD Comics: (Grad) School Spirit Pop Quiz</title>
		<link>http://dclaridge.wordpress.com/2010/12/07/phd-comics-grad-school-spirit-pop-quiz/</link>
		<comments>http://dclaridge.wordpress.com/2010/12/07/phd-comics-grad-school-spirit-pop-quiz/#comments</comments>
		<pubDate>Tue, 07 Dec 2010 02:19:06 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[travel]]></category>
		<category><![CDATA[utexchange]]></category>

		<guid isPermaLink="false">http://blog.daave.com/?p=175</guid>
		<description><![CDATA[I thought I&#8217;d take the quiz recently posted on PhD Comics, to see what score I get for &#8216;school spirit&#8217; after 5 months in Texas. Mascot&#8217;s name: Bevo &#8211; 1 point Colors: Orange &#8211; 1 point Fight Song: &#8220;The Eyes of Texas&#8221;, goes to the tune of &#8220;I&#8217;ve Been Working on the Railroad&#8221;, but I [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dclaridge.wordpress.com&amp;blog=1293476&amp;post=175&amp;subd=dclaridge&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.phdcomics.com/comics.php?f=1402"><img src="http://www.phdcomics.com/comics/archive/phd120110s.gif" alt="(Grad) School Spirit Pop Quiz" /></a></p>
<p>I thought I&#8217;d take the quiz recently posted on PhD Comics, to see what score I get for &#8216;school spirit&#8217; after 5 months in Texas.</p>
<p>Mascot&#8217;s name: Bevo &#8211; 1 point<br />
Colors: Orange &#8211; 1 point<br />
Fight Song: &#8220;The Eyes of Texas&#8221;, goes to the tune of &#8220;I&#8217;ve Been Working on the Railroad&#8221;, but I don&#8217;t know all the words.. I&#8217;ll give myself &#8211; 1 point out of 2<br />
NCAA Division: What&#8217;s NCAA? Some sports thing? Big 12? Looking this up it turns out we&#8217;re in &#8216;Division 1&#8242; and &#8216;Big 12&#8242; is indeed the conference.. I&#8217;d heard the term but didn&#8217;t know what it was about &#8211; 0.5 points out of 1<br />
Main Rival: Texas A&amp;M &#8211; 1 point<br />
Name of the Head Coach &#8211; No idea &#8211; 0 points out of 1<br />
Bonus for going to the stadium &#8211; 2 points (been there once)</p>
<p>Final score: 6.5 out of 8</p>
<p>Since I&#8217;m not a grad student the comic&#8217;s interpretation doesn&#8217;t really make sense, but I feel like I did OK for a ring-in <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dclaridge.wordpress.com/175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dclaridge.wordpress.com/175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dclaridge.wordpress.com/175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dclaridge.wordpress.com/175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dclaridge.wordpress.com/175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dclaridge.wordpress.com/175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dclaridge.wordpress.com/175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dclaridge.wordpress.com/175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dclaridge.wordpress.com/175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dclaridge.wordpress.com/175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dclaridge.wordpress.com/175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dclaridge.wordpress.com/175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dclaridge.wordpress.com/175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dclaridge.wordpress.com/175/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dclaridge.wordpress.com&amp;blog=1293476&amp;post=175&amp;subd=dclaridge&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dclaridge.wordpress.com/2010/12/07/phd-comics-grad-school-spirit-pop-quiz/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d22d55f70c7685d513f0c6c263d5219d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Dave</media:title>
		</media:content>

		<media:content url="http://www.phdcomics.com/comics/archive/phd120110s.gif" medium="image">
			<media:title type="html">(Grad) School Spirit Pop Quiz</media:title>
		</media:content>
	</item>
		<item>
		<title>Austin Python User Group</title>
		<link>http://dclaridge.wordpress.com/2010/11/11/austin-python-user-group/</link>
		<comments>http://dclaridge.wordpress.com/2010/11/11/austin-python-user-group/#comments</comments>
		<pubDate>Thu, 11 Nov 2010 04:49:42 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[travel]]></category>
		<category><![CDATA[unsw]]></category>
		<category><![CDATA[utexchange]]></category>

		<guid isPermaLink="false">http://blog.daave.com/?p=168</guid>
		<description><![CDATA[Today I went to my first APUG meeting, I&#8217;d missed the ones in September and October due to a clash with a meeting back in Sydney, but this time I cleared my schedule to come along &#8211; and it was great! It was hosted by the good people from Enthought, who provided pizza and &#8216;soda&#8217; [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dclaridge.wordpress.com&amp;blog=1293476&amp;post=168&amp;subd=dclaridge&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Today I went to my first <a href="http://meetup.com/python-188/">APUG meeting</a>, I&#8217;d missed the ones in September and October due to a clash with a meeting back in Sydney, but this time I cleared my schedule to come along &#8211; and it was great! <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  It was hosted by the good people from Enthought, who provided pizza and &#8216;soda&#8217; for the attendees.</p>
<p>Austin has a vibrant community of <a href="http://python.org/">Python</a> users, there were around 20-30 people in attendance, most of whom use Python at whichever company they work for, and some of whom have never used Python but are keen to learn. We had people from the fields of web development, <a href="http://www.enthought.com/">scientific computing</a>, HPC, <a href="http://www.texastribune.org/about/">the media</a>, as well as a few students, including one who studies economics at <a href="http://www.utexas.edu/">UT</a>.</p>
<p>What surprised me the most was the presence of two Kiwis and another Aussie, who happened to be a UNSW mathematics graduate now working at Enthought &#8211; small world!</p>
<p>The session kicked off with a presentation from Peter Wang, the organiser of APUG, on <a href="http://cython.org/">Cython</a>, which I found particularly interesting as I am currently looking into various solutions for C++&lt;-&gt;Python interaction for my work on <a href="http://www.cse.unsw.edu.au/~robocup">RoboCup</a>, including <a href="http://www.swig.org/">SWIG</a> and <a href="http://www.boost.org/doc/libs/1_44_0/libs/python/doc/index.html">Boost::Python</a>. Today&#8217;s presentation made me think for the first time of perhaps doing it the other way around &#8211; writing the system entirely in Python, with all the performance-critical parts implemented as C(++) extensions.</p>
<p>The second talk was from one of the New Zealanders, visiting from the University of Auckland, who was presenting his Python library for linear programming, <a href="http://pypi.python.org/pypi/PuLP/1.1">PuLP</a>.</p>
<p>After the main talks everyone introduced themselves, and suggested ideas for 10 minute lightning talks for the December meetup. I volunteered to talk about embedding Python in soccer-playing robots, so it&#8217;ll probably be an expansion of the 5 minute <a href="http://pyconau.blip.tv/file/3840106/">talk I gave</a> on the same topic at PyConAu, not too long ago.</p>
<p>An aside: I must apologise to everyone who I said I would keep updated about my time in Austin via this blog, as you can see I haven&#8217;t posted since I left New York back in August. The truth is I&#8217;ve been having too much fun and keeping too busy here in Austin to have time to sit down and write about it. I had the topics of several blog posts lined up, but I&#8217;ve now decided I&#8217;m going to write them in the reverse order to which I&#8217;d intended, so expect to see the following posts on the following coming up soon:</p>
<ul>
<li>Joel Spolsky&#8217;s FogBugz &amp; Kiln World Tour &#8211; why you should all use Kiln or something like it</li>
<li>The University of Texas&#8217; innovative IP quota system</li>
<li>Configuring the Atlassian tools (Confluence, Jira, Crowd, Fisheye &amp; Crucible) for rUNSWift on a clean Ubuntu 10.04 system</li>
<li>Why programming is the only thing I don&#8217;t do in my web browser</li>
<li>&#8216;First&#8217; impressions of Austin, UT and the public transport system</li>
</ul>
<p>So.. hopefully I&#8217;ll get around to all that sometime soon <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Update 15/08/11: I never got around to writing these, and probably never will. Sorry!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dclaridge.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dclaridge.wordpress.com/168/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dclaridge.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dclaridge.wordpress.com/168/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dclaridge.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dclaridge.wordpress.com/168/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dclaridge.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dclaridge.wordpress.com/168/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dclaridge.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dclaridge.wordpress.com/168/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dclaridge.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dclaridge.wordpress.com/168/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dclaridge.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dclaridge.wordpress.com/168/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dclaridge.wordpress.com&amp;blog=1293476&amp;post=168&amp;subd=dclaridge&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dclaridge.wordpress.com/2010/11/11/austin-python-user-group/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d22d55f70c7685d513f0c6c263d5219d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Dave</media:title>
		</media:content>
	</item>
		<item>
		<title>New York City</title>
		<link>http://dclaridge.wordpress.com/2010/08/12/new-york-city/</link>
		<comments>http://dclaridge.wordpress.com/2010/08/12/new-york-city/#comments</comments>
		<pubDate>Wed, 11 Aug 2010 20:10:58 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[travel]]></category>
		<category><![CDATA[utexchange]]></category>

		<guid isPermaLink="false">http://blog.daave.com/?p=161</guid>
		<description><![CDATA[I&#8217;m on my way to Texas for a semester at UT Austin, with a few stops on the way. Since I&#8217;ve been in the States for a week now, it&#8217;s time for a rant about the journey so far: The flight left Sydney Airport on time, around 10am Wednesday August 4th, and the captain immediately [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dclaridge.wordpress.com&amp;blog=1293476&amp;post=161&amp;subd=dclaridge&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m on my way to Texas for a semester at UT Austin, with a few stops on the way. Since I&#8217;ve been in the States for a week now, it&#8217;s time for a rant about the journey so far:</p>
<p>The flight left Sydney Airport on time, around 10am Wednesday August 4th, and the captain immediately told us that due to wind conditions we&#8217;d be landing about half an hour late. I was sitting next to a couple from Virginia who were keen to suggest a hundred and one things I need to see whilst in the USA.</p>
<p>On arrival in the Los Angeles area, we were again delayed because the runways were full-up with planes taking off, they&#8217;d been delayed by fog, so after 20 minutes of circling we were finally allowed to land at 6:40. Getting my 8:00 connecting flight to New York was starting to look pretty tight, as I still had to clear customs and immigration, and drop off my bags for the connecting flight.</p>
<p>Once on the ground, another 30 minute delay ensued, since our gate was still occupied by an aircraft that was supposed to have left half an hour earlier, while docking at 7:10, we were given stricter-than-usual instructions to stay in our seats. It soon became apparent why, the LAPD boarded the plane and arrested a drunk Australian traveller in his seat. Finally getting off the plane at 7:25, I was through customs at 7:50, and redirected to the &#8216;Special Services&#8217; desk to have a replacement flight booked to New York.</p>
<p>&#8216;Special Services&#8217; is a row of just 3 check-in counters, with a queue of at least 400 people, as it seemed almost everyone on the flight from Sydney had missed a connection. Finally making it to the front, I was booked on a 2pm flight and handed off my bags. Not wanting to risk missing this next flight, though I had more than 4 hours to spare, I proceeded through security immediately, and just as well as it took over an hour. My overall impression of LAX is that it is the worst international airport I&#8217;ve been to: plain, crowded, disorganised, uncomfortable. The only upside was the fantastic Mexican food I had for breakfast/dinner (choose your time zone!) whilst waiting.</p>
<p>The flight to NYC proceeded on time and arrive an hour early, but naturally there was once again a 30 minute delay getting to the terminal. Immensely confused by the transport system, I took a cab to the hostel in Manhattan, arriving at 11pm, where I told by the Australian working at the front desk that despite my booking 4 months in advance, there were no beds available. After a lengthy chat with his manager, they managed to get me a bed in one of the 12-bed dorms rather than the 4-bed one I&#8217;d booked, where at least I was able to attempt sleep at half the price. I say &#8216;attempt sleep&#8217; because of the sonorous snoring of my dorm-mates, the industrial air-conditioning unit next to my bed, as well as the constant arrivals of late night party-goers. Fortunately on the first night I was sufficiently jet-lagged that none of this mattered and I slept from midnight until 5am!</p>
<p>Thursday. After an early awakening, I ventured out into the New York subway system, which I must say is one of the finest features of the city. A very efficient and convenient way to travel, though I must say it took me a while to figure out what a &#8216;local stop&#8217; was. A series of lines run North to South the length of Manhattan, and a few lines cross East to West, these are supplemented by city buses that take the same type of &#8216;Metrocard&#8217; ticket as the subway. Arriving at Times Square before 7am, my sense of time still distorted, I got the impression that it was a reasonably busy part of the city. Going back there later on I realised that first morning it was practically deserted in comparison. I continued walking South down Broadway, amused by the M&amp;M Megastore until the first CitiBank I reached, having just opened at 8am. The lady who assisted me in opening an account seemed to think it was a little over-zealous to spend the first hours of your first day on vacation organising details like bank accounts, perhaps so but I wanted to get things sorted out as early as possible. The issued me with a temporary ATM card on the spot, that I can use until my real debit card arrives in Austin.</p>
<p>The rest of the day was mostly spent walking and transiting around the city. The Staten Island Ferry is definitely the best way to see the Statue of Liberty without having to wait in hour-long lines for the ferry to Liberty Island. I stumbled across a neat little deli/green-grocer/kitchenwares store called &#8216;Dean &amp; Deluca&#8217;, which seemed a much more friendly place to buy one&#8217;s dairy, meats, etc. compared to a typical supermarket. It turns out a number of other Dean &amp; Deluca stores exist around th city, but all the other ones I saw were coffee shops. On Wall Street, there was a building with a touchscreen wall, where one can enter their email address to be sent coupons. The city has a very visible police presence, almost as big as that in London, and some very unusual police vehicles. After an exhausting 8 hours of walking, I went back to the hostel where I signed up for &#8220;Dave&#8217;s Downtown Tour&#8221; for 9am the next morning, and fell asleep at an early 8:30pm.</p>
<p>Rumours that there&#8217;s a Starbucks and 7-Eleven on the corner of every city block are greatly exaggerated, I didn&#8217;t see a single 7/11 in my time in New York, and the Starbucks are only as dense as they are in Sydney (which means there are quite a lot of them, but they&#8217;re not exactly crowding). There happened to be a Starbucks on the corner of Broadway and 103rd St, quite close to the hostel, so I went there for coffee and breakfast. Back at the hostel by 8:50, there was a group of about a` dozen gathered for the tour: two aussies, a kiwi, two from Holland, two from Germany, three from France and the rest from Brazil. Dave&#8217;s tour was quite extensive, covering some of the sights I&#8217;d seen the previous day: South Ferry, Wall Street and Ground Zero, a brief stop at the Seaport, before venturing into some of the less touristy neighbourhoods: TriBeCa (Triangle Below Canal) home to Robert De Niro&#8217;s 3 restaurants; SoHo, a more artsy part of town, where we visited Peter Lik&#8217;s photo gallery; Greenwich Villiage, the neighbourhood surrounding NYU; West Village, the most&#8230; bohemian part of town; and finally Chelsea, where we saw the old meat markets, the west-side railway which has been converted into a high-rise park, and Chelsea markets. The tour portrayed New York as an extremely diverse and interesting city, with a completely different vibe and theme in each neighbourhood. I ended the day by heading up North to Columbia University, such a pristine university campus I have never seen! Then it as only half a dozen blocks walk South to get back to the hostel.</p>
<p>Impressed with Dave&#8217;s Downtown Tour on Friday, I signed up for his tour of Central Park on Saturday morning. I&#8217;d seen small bits of the park when walking around on Thursday, but the park is huge and really needs a several hours to see send to end. We started at the North-West corner near the hostel, across to Harlem Meer and the Lasker Pool/Rink, weaved our way through Coventry Gardens, South-West to The Pool, back and forth back and forth, slowly heading south. We stopped for lunch at the Boathouse, before venturing back out towards Sheep&#8217;s Meadow and The Mall. It was a very thorough tour of the park, and Dave had a lot of insights to share about the history and design of the park, and the changes that have occurred along the way.</p>
<p>After the tour, ended at the South tip of the park, I walked down 5th Avenue, visiting the Apple &#8216;Cube&#8217; Store, and the Rockerfeller Centre, climbing to the &#8216;Top of the Rock&#8217; for 360 degree views of the city. It had been recommended as a better alternative for high-rise viewing than the Empire State Building (which is slightly taller), because the Rock has views of the Empire State Building itself, as well as Central Park, which can&#8217;t be seen from as far South as the Empire State. Saturday night was spent out on the town for a change, hanging out with other Australian tourists, where naturally we all joked about the peculiar popularity Fosters.</p>
<p>With a bus to Boston booked for Monday midday, Sunday felt like saying goodbye. A late breakfast at Columbus Circle was followed by a visit to St Patrick&#8217;s Cathedral &#8211; an enormous Gothic-revival style building, followed by a trip to Times Square to get a ticket to West Side Story in the afternoon. The show was fantastic, the acting flawless and the music exceptional, partly owing to the great acoustics in the small Broadway Orchestra theatre. Later in the evening I dropped by the famous &#8216;Century 21&#8242; department store, where there are indeed great bargains.</p>
<p>Monday morning was a bit of a rush to get to the Australian Consulate to vote in the morning, before heading back to the hostel to check out, then back into town for the bus. I was impressed by the quality of the polling place setup, ballot sheets for every electorate in the country were laid out, sorted first by state and then alphabetically, the consular officers performed their duty of checking your enrolled electorate and signing the sealable postal voting envelopes efficiently. There was even a Liberal party member standing outside handing out &#8216;how-to-vote&#8217; pamphlets, again indexed by state and electorate.</p>
<p>I checked out of the hostel with 45 minutes until the bus&#8217; departure time, which seemed like plenty&#8230; and all was good until standing around at the Port Authority Bus Terminal with 10 minutes to spare, I realised my bus was actually departing from Pennsylvania Station, not Port Authority! Dragging my suitcase I rushed down 7th Avenue crossing a dozen streets until I reached Penn Station 5 minutes late. Turns out the rush wasn&#8217;t necessary, as the bus left half an hour late. After the initial delayed departure (for which I was thankful), it was a smooth ride, and the bus even had free WiFi!</p>
<p>I&#8217;m going to miss New York City, I&#8217;m not sure if it&#8217;s the skyscraper with no windows housing their phone switchboards, or free concerts at the Lincoln Center, or the magic of suddenly feeling like you&#8217;re in the middle of nowhere as you turn down a windy path in northern Central Park&#8230; but there&#8217;s something amazing about this place, and I hope to come back soon!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dclaridge.wordpress.com/161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dclaridge.wordpress.com/161/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dclaridge.wordpress.com/161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dclaridge.wordpress.com/161/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dclaridge.wordpress.com/161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dclaridge.wordpress.com/161/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dclaridge.wordpress.com/161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dclaridge.wordpress.com/161/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dclaridge.wordpress.com/161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dclaridge.wordpress.com/161/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dclaridge.wordpress.com/161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dclaridge.wordpress.com/161/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dclaridge.wordpress.com/161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dclaridge.wordpress.com/161/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dclaridge.wordpress.com&amp;blog=1293476&amp;post=161&amp;subd=dclaridge&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dclaridge.wordpress.com/2010/08/12/new-york-city/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d22d55f70c7685d513f0c6c263d5219d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Dave</media:title>
		</media:content>
	</item>
		<item>
		<title>How I lost all my photos from New York</title>
		<link>http://dclaridge.wordpress.com/2010/08/07/how-i-lost-all-my-photos-from-new-york/</link>
		<comments>http://dclaridge.wordpress.com/2010/08/07/how-i-lost-all-my-photos-from-new-york/#comments</comments>
		<pubDate>Sat, 07 Aug 2010 12:08:01 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[travel]]></category>

		<guid isPermaLink="false">http://blog.daave.com/?p=159</guid>
		<description><![CDATA[Oh my, I am an idiot. I just lost all the photos I&#8217;ve taken since I arrived in New York. I ran this command: find . -type f -newer IMAG0232.jpg &#124;xargs -I files mv files NYC What&#8217;s wrong with it? Absolutely nothing! IMAG0232 was the last photo I took before arriving in NYC, that line [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dclaridge.wordpress.com&amp;blog=1293476&amp;post=159&amp;subd=dclaridge&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Oh my, I am an idiot. I just lost all the photos I&#8217;ve taken since I arrived in New York. I ran this command:</p>
<p>find . -type f -newer IMAG0232.jpg |xargs -I files mv files NYC</p>
<p>What&#8217;s wrong with it? Absolutely nothing! IMAG0232 was the last photo I took before arriving in NYC, that line is supposed to move everything newer than that into an existing directory called &#8216;NYC&#8217;.</p>
<p>The problem: I accidentally made a directory called NCY, not NYC, so instead of moving things to the *directory* NYC, they got moved to the *file* NYC.. each photo overriding the last one. Now only the most recent photo is left!</p>
<p>Sigh.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dclaridge.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dclaridge.wordpress.com/159/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dclaridge.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dclaridge.wordpress.com/159/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dclaridge.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dclaridge.wordpress.com/159/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dclaridge.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dclaridge.wordpress.com/159/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dclaridge.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dclaridge.wordpress.com/159/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dclaridge.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dclaridge.wordpress.com/159/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dclaridge.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dclaridge.wordpress.com/159/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dclaridge.wordpress.com&amp;blog=1293476&amp;post=159&amp;subd=dclaridge&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dclaridge.wordpress.com/2010/08/07/how-i-lost-all-my-photos-from-new-york/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d22d55f70c7685d513f0c6c263d5219d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Dave</media:title>
		</media:content>
	</item>
		<item>
		<title>Planning a meeting in another timezone</title>
		<link>http://dclaridge.wordpress.com/2010/07/18/planning-a-meeting-in-another-timezone/</link>
		<comments>http://dclaridge.wordpress.com/2010/07/18/planning-a-meeting-in-another-timezone/#comments</comments>
		<pubDate>Sun, 18 Jul 2010 00:56:46 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[math]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[travel]]></category>

		<guid isPermaLink="false">http://blog.daave.com/?p=150</guid>
		<description><![CDATA[For some reason I always muck up timezone conversions. Either I get mixed up about whether I should be adding or subtracting them, or which one I add (or subtract) that difference to (or from) to, and finally which timezone my final answer is in. If I&#8217;m only interested in right now then asking Google [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dclaridge.wordpress.com&amp;blog=1293476&amp;post=150&amp;subd=dclaridge&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>For some reason I always muck up timezone conversions. Either I get mixed up about whether I should be adding or subtracting them, or which one I add (or subtract) that difference to (or from) to, and finally which timezone my final answer is in. If I&#8217;m only interested in <em>right now</em> then asking Google for the <a href="http://www.google.com/search?q=time+in+Austin&amp;ie=utf-8&amp;oe=utf-8">time in Austin</a> will suffice, but when you want to consider all possible times you could plan a phone call or meeting, I&#8217;m yet to find a decent tool.</p>
<p>So I wrote this Python script.</p>
<pre>
import sys

def usage():
   print "Usage:   "+sys.argv[0]+"  "
   print "Example: "+sys.argv[0]+" -5 +10"
   sys.exit(1)

def printmap(tz1, tz2):
   print "timezone1 timezone2"
   diff = tz1-tz2
   for i in xrange(24):
      print i, (i-diff)%24

if len(sys.argv) != 3:
   usage()
try:
   tz1 = int(sys.argv[1])
   tz2 = int(sys.argv[2])
except ValueError:
   usage()
printmap(tz1, tz2)
</pre>
<p>Crude, but it does the trick!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dclaridge.wordpress.com/150/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dclaridge.wordpress.com/150/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dclaridge.wordpress.com/150/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dclaridge.wordpress.com/150/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dclaridge.wordpress.com/150/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dclaridge.wordpress.com/150/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dclaridge.wordpress.com/150/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dclaridge.wordpress.com/150/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dclaridge.wordpress.com/150/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dclaridge.wordpress.com/150/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dclaridge.wordpress.com/150/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dclaridge.wordpress.com/150/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dclaridge.wordpress.com/150/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dclaridge.wordpress.com/150/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dclaridge.wordpress.com&amp;blog=1293476&amp;post=150&amp;subd=dclaridge&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dclaridge.wordpress.com/2010/07/18/planning-a-meeting-in-another-timezone/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d22d55f70c7685d513f0c6c263d5219d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Dave</media:title>
		</media:content>
	</item>
		<item>
		<title>Robocup Semi-Finalists</title>
		<link>http://dclaridge.wordpress.com/2010/06/23/robocup-semi-finalists/</link>
		<comments>http://dclaridge.wordpress.com/2010/06/23/robocup-semi-finalists/#comments</comments>
		<pubDate>Wed, 23 Jun 2010 09:02:25 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[cse]]></category>
		<category><![CDATA[robocup]]></category>
		<category><![CDATA[unsw]]></category>

		<guid isPermaLink="false">http://blog.daave.com/?p=145</guid>
		<description><![CDATA[We&#8217;ve made it to the semi&#8217;s! Detailed updates on my Twitter! Update: I never got around to writing a proper post about all this, but we ended up coming 2nd. There&#8217;s some great videos on YouTube of all our games if you&#8217;re interested.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dclaridge.wordpress.com&amp;blog=1293476&amp;post=145&amp;subd=dclaridge&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>We&#8217;ve made it to the semi&#8217;s! Detailed updates on my <a href="http://twitter.com/davidclaridge">Twitter</a>!</p>
<p>Update: I never got around to writing a proper post about all this, but we ended up coming 2nd. There&#8217;s some great <a href="http://www.youtube.com/unswcomputing">videos on YouTube</a> of all our games if you&#8217;re interested.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dclaridge.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dclaridge.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dclaridge.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dclaridge.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dclaridge.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dclaridge.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dclaridge.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dclaridge.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dclaridge.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dclaridge.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dclaridge.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dclaridge.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dclaridge.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dclaridge.wordpress.com/145/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dclaridge.wordpress.com&amp;blog=1293476&amp;post=145&amp;subd=dclaridge&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dclaridge.wordpress.com/2010/06/23/robocup-semi-finalists/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d22d55f70c7685d513f0c6c263d5219d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Dave</media:title>
		</media:content>
	</item>
		<item>
		<title>3 Sleeps &#8217;till Robocup Singapore</title>
		<link>http://dclaridge.wordpress.com/2010/06/15/3-sleeps-till-robocup-singapore/</link>
		<comments>http://dclaridge.wordpress.com/2010/06/15/3-sleeps-till-robocup-singapore/#comments</comments>
		<pubDate>Tue, 15 Jun 2010 10:02:14 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[cse]]></category>
		<category><![CDATA[robocup]]></category>
		<category><![CDATA[unsw]]></category>

		<guid isPermaLink="false">http://blog.daave.com/?p=125</guid>
		<description><![CDATA[After several months of hard work, we&#8217;re ready and set for the Robocup World Championships and Conference at the Singapore Suntec Convention Centre. For those of you who aren&#8217;t familiar with Robocup SPL, it is a competition consisting of 24 teams from universities around the world, who program the Aldebaran Nao humanoid robot to play [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dclaridge.wordpress.com&amp;blog=1293476&amp;post=125&amp;subd=dclaridge&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>After several months of hard work, we&#8217;re ready and set for the Robocup World Championships and Conference at the Singapore Suntec Convention Centre.</p>
<p>For those of you who aren&#8217;t familiar with Robocup SPL, it is a competition consisting of 24 teams from universities around the world, who program the Aldebaran Nao humanoid robot to play soccer autonomously. The robot must identify objects in its environment, plan how it should react to the world in coordination with its team-mates, and execute those actions (such as walking and kicking) quickly and correctly. Our team, rUNSWift is described in this poster:</p>
<p><a href="http://dclaridge.files.wordpress.com/2010/06/runswift_spl_poster.png"><img class="alignnone size-full wp-image-128" title="runswift_spl_poster" src="http://dclaridge.files.wordpress.com/2010/06/runswift_spl_poster.png?w=425&#038;h=580" alt="The UNSW rUNSWift Robocup SPL 2010 Team" width="425" height="580" /></a></p>
<p>When we arrive in Singapore on Friday evening, we have one and a half days to calibrate our robots and software for the specific environmental peculiarities of the Suntec Convention Centre, before our first game which is a demonstration match for the opening ceremony. On Monday, we will play in the 1st pool round against two other teams:</p>
<h4>Austin Villa</h4>
<p>The <a href="http://userweb.cs.utexas.edu/~AustinVilla/">team</a> from the University of Texas, Austin are the champions from this year&#8217;s US Open and semi-finalists from last year&#8217;s World Championships in Graz, Austria. They&#8217;re notorious for having a diving goalie, which will prove a worthy challenge in this opening round.</p>
<h4>BURST</h4>
<p>This <a href="http://shwarma.cs.biu.ac.il/robocup/">team</a> is relatively new to the SPL league, but are not to be trifled with, they outperformed rUNSWift significantly in the 2009 competition, despite that being their first year participating, and the only Israeli team to have ever competed in a senior Robocup tournament. According to their <a href="www.tzi.de/spl/pub/Website/Teams2010/Burst.pdf">team description paper</a>, their research this year is focusing on machine-learning for walking and kicking as well as high end behavioural systems, while they using an augmented version of the code from the <a href="http://www.b-human.de/publications.php">B-Human 2009 release</a> for vision and localisation.</p>
<p>After the 1st pool round, we will either proceed directly to the 2nd pool round if we place 1st in our pool, or play in an intermediate round if we rank 2nd or 3rd. The quarter-finals take place on Wednesday and the semi and grand finals are on Thursday. The hot favourite for this year are B-Human, who won the competition last year, and also won this year&#8217;s <a href="http://www.youtube.com/watch?v=BNPy0s1kAiU#t=1m45s">German Open</a>. We&#8217;re hoping to give them a run for their money.</p>
<p>This year rUNSWift has gone for a complete re-write of our software architecture, they key features being:</p>
<ul>
<li>An omni-directional walk significantly faster than the standard AL walk</li>
<li>A hybrid Kalman-filter/Particle-filter system for localisation</li>
<li>A Python-C++ mapping layer to allow for the rapid development of high-level behaviours</li>
<li>A powerful suite of diagnostic and testing utilities, that allow most hardware and software glitches to be picked up at runtime, and often repaired</li>
</ul>
<p>Watch this space for videos of set-up and games from Singapore over the coming days. In the mean time here&#8217;s a trailer for Robocup Singapore:</p>
<span style="text-align:center; display: block;"><a href="http://dclaridge.wordpress.com/2010/06/15/3-sleeps-till-robocup-singapore/"><img src="http://img.youtube.com/vi/V1XK9XxyeUo/2.jpg" alt="" /></a></span>
<p><a href="http://blog.daave.com/">http://blog.daave.com/</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dclaridge.wordpress.com/125/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dclaridge.wordpress.com/125/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dclaridge.wordpress.com/125/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dclaridge.wordpress.com/125/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dclaridge.wordpress.com/125/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dclaridge.wordpress.com/125/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dclaridge.wordpress.com/125/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dclaridge.wordpress.com/125/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dclaridge.wordpress.com/125/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dclaridge.wordpress.com/125/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dclaridge.wordpress.com/125/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dclaridge.wordpress.com/125/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dclaridge.wordpress.com/125/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dclaridge.wordpress.com/125/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dclaridge.wordpress.com&amp;blog=1293476&amp;post=125&amp;subd=dclaridge&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dclaridge.wordpress.com/2010/06/15/3-sleeps-till-robocup-singapore/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d22d55f70c7685d513f0c6c263d5219d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Dave</media:title>
		</media:content>

		<media:content url="http://dclaridge.files.wordpress.com/2010/06/runswift_spl_poster.png" medium="image">
			<media:title type="html">runswift_spl_poster</media:title>
		</media:content>
	</item>
	</channel>
</rss>
