June 2020
Open Source Progress Report
April 2020
Open Source Progress Report
Ruby Concurrency Final Report
March 2020
Improving Net::HTTP Concurrency
January 2020
Ruby Concurrency Progress Report
Open Source Progress Report
December 2019
Ruby Concurrency Progress Report
Open Source Progress Report
November 2019
Open Source Progress Report
February 2019
Early Hints and HTTP/2 Push with Falcon
January 2019
Streaming HTTP for Ruby
November 2018
Fibers Are the Right Solution
October 2018
HTTP/2 for Ruby Web Development
June 2018
Improving Ruby Fibers
Improving Ruby Concurrency
Asynchronous Ruby
August 2017
Using Vulkan fences to avoid corruption
January 2017
jQuery.Syntax, now with less code!
December 2016
3 cool things you might not have known about Rakefiles
November 2013
CloudFlare Dynamic DNS Client in Ruby
Hybrid Tracking using Gravity Aligned Edges
Transform Flow: A Mobile Augmented Reality Visualisation and Evaluation Toolkit
October 2013
Real-time Hybrid Tracking for Outdoor Augmented Reality
April 2013
Orm's Recipes
October 2012
Game Programming Weekend (Early December)
Adaptive Hybrid Tracking for Mobile Outdoor Augmented Reality
Code Signing Auxiliary Executables
Asynchronous DNS with EventMachine
June 2012
Sandboxing Core Data And Migrations
Passenger Memory Check
February 2012
Hacking The Mainframe
September 2011
Simple Garbage Collector
August 2011
Rack (Per-Request) Memory Usage
May 2011
University Sudoku Challenge
Cross-domain AJAX using XMLHttpRequest
Solving Sudoku Efficiently
March 2011
Christchurch Earthquake v2
Lake Tekapo School roles double overnight!
Why are we having earthquakes in Christchurch?
January 2011
Samuel and Ayako's Wedding
There are more useless programs than useful programs.
December 2010
Free Software Games
Implicit And Explicit Delimitation
October 2010
Mr. Painting Robot
Visualising Information Change Over Time
Kai 会
September 2010
Christchurch Earthquake
August 2010
Source Code Visualisation
Augmented Source Code
Java ME Games
Reasonably Efficient RSA Encryption/Decryption with C++
July 2010
Suspended Shelves
June 2010
Aggregate Callback
May 2010
Computer Science in New Zealand High Schools
How do we learn?
Bloom's Taxonomy
The Socratic Method
Vygotsky's Zone of Proximal Development
The Theory of Constructivism
Virtual Schooling
April 2010
Inspiration
Programming Dojo
Image Processing
Updating Installed Gems
March 2010
LaTeX Symbols in Verbatim Mode (using UTF8)
Caching HTTP Resources using Rack
February 2010
JavaScript Loader
Mac OS X Jumbo Frames
SSH Keygen & Multiplexing
FLAC in iTunes
Building & Installing GemSpecs
About Me
November 2009
New Zealand Broadband
Travelling to Japan
Japan: Kozunomori to Osaka
Japan: Osaka to Beppu
Japan: Beppu to Miyazaki
Japan: Miyazaki to Hakata
Japan: Hakata to Matsue
Japan: Matsue to Kurashiki
October 2009
Building a Concrete Bath
Thinking about Programming Languages
Exim4 + ClamAV + SpamAssassin
Secure login using AJAX
Ramaze And Rack
Concurrency And Immutability
Floating Point Numbers
Programming And Debugging
Loading Anonymous Ruby Classes
尺八 (Shakuhachi)
Richard Stallman In Christchurch
September 2009
DNS Server Benchmarking
Cheap Storage
Scanning for specific UNIX permissions
August 2009
Ruby Exceptions
Ruby StandardError & Exception
Time Limited Error Recovery
RubyDNS Released
May 2009
What is abstraction?
Run Time Polymorphism
Compile Time Polymorphism
Matrix Mathematics
AppleScript Insanity
April 2009
Apache WebDAV Configuration
Poll and Kqueue Hack
SiteHost New Zealand VPS
Panasonic AX200 Service Menus
Game State Management
Game State Synchronization
Python Hashes in Ruby
Managing Ruby Environment Variables
Why do we play games?
Linker flags and archives
February 2008
A discrete solution for the inverse kinematics problem.
May 2007
Furry Ball Theorem
Permutation Generation