The Curious Engineer

All blogs / Rust

Andy Balaam's Blog

artificialworlds.net/blog

Coding in Rust and others; making coding videos.

RustPerformance / optimizationAlgorithms / data structuresSoftware / engineering practice

Posts
619 from 2 Jun 2005 to 16 Oct 2026
Posting
weekly (35 in the last year)
Kind
personal blog
Feed
https://artificialworlds.net/blog/rss.xml

2026 29

  1. Adding balls to our JezzBall clone
  2. Feeling sad about AI
  3. Web Words: what if we used 3 words to find a web site?
  4. Coding JezzBall in Rust+WASM
  5. Coding up a circular buffer with Jez
  6. LLMs produce plausible noise
  7. Parsing SGF files for fun
  8. A full (slow) solution to the Billion Row Challenge
  9. The billion row challenge: do we have a bug?
  10. Writing a bit-wise iterator (with Jez!) for our gunzip implementation
  11. Keep the faith
  12. Implementing gunzip from scratch in Rust
  13. Jez returns for programming language chat!
  14. Announcing Changelog Builder - a towncrier clone for building changelogs
  15. Using anyhow to handle errors in my Rust changelog builder
  16. A simpler blog comment system
  17. Building a Rust commandline tool: a towncrier clone
  18. The billion row challenge: splitting lines using SIMD in Rust
  19. Rust: reading very large files for the billion row challenge
  20. Parsing whole lines of the Billion Row Challenge
  21. Improving our billion-row parsers and benchmarks
  22. Making our own String type in Rust
  23. Writing a Snake game in Rust/WASM
  24. Talking to localhost from inside an Android emulator
  25. Rust: compiling to WASM to make a browser-based game using canvas
  26. Billion row challenge: parsing temperatures fast(ish)
  27. Rust: building arbitrary precision integers (badly)
  28. Rust: how to return a closure from a function, and what are closures anyway?
  29. FizzBuzz 2: FizzBuzz Harder

2025 55

  1. Why I don't use AI
  2. Converting a string to an int in Rust (for no reason)
  3. Why I don't use AI (expanded)
  4. Resizing and moving an encrypted LVM volume
  5. Implementing FizzBuzz in Rust (for no reason)
  6. Reversing a string in Rust (for no reason)
  7. Mini-rust in Rust 050: Parsing function definitions
  8. Why do I have 2 passwords? How to talk about encryption in Matrix
  9. Invisible Crypto: can Matrix be both secure and easy to use?
  10. Mini-rust in Rust 049: Lexing an empty function
  11. Mini-rust in Rust 048: Handling variable scope
  12. Mini-rust in Rust 047: Updating types as we get more information
  13. Jez and Andy write a Parser
  14. Jez learns Rust by writing a Lexer
  15. Mini-rust in Rust 046: Type-checking mutations
  16. Mini-rust in Rust 045: Combining two types when we add things
  17. Why I don't use AI
  18. Mini-rust in Rust 044: Finding the type of a symbol
  19. Mini-rust in Rust 043: Expressions on the left of operators
  20. Mini-rust in Rust 042: An unexpected token means stop this expression
  21. Mini-rust in Rust 041: While conditions that are not operations
  22. Mini-rust in Rust 040: While conditions should be bool
  23. Mini-rust in Rust 039: Spans should be ranges
  24. Mini-rust in Rust 038: Avoiding a String allocation for each token
  25. Mini-rust in Rust 037: Complex expressions in mutation statements
  26. Mini-rust in Rust 036: Evaluating code blocks
  27. Mini-rust in Rust 035: Tidying up the evaluator
  28. Mini-rust in Rust 034: Our first program, actually working
  29. Mini-rust in Rust 033: Evaluating operators like plusequals and timesequals
  30. Mini-rust in Rust 032: Supporting a Unit type and type checking mutations
  31. Mini-rust in Rust 031: Getting "while" through the type checker
  32. Mini-rust in Rust 030: Expressions after while loops
  33. Mini-rust in Rust 029: Parsing plus-equals
  34. Mini-rust in Rust 028: Lexing plus-equals
  35. Standing again for the Matrix Governing Board
  36. Testing nonexistence
  37. Mini-rust in Rust 027: Parsing blocks of code
  38. Mini-rust in Rust 026: Parsing an empty while loop
  39. Mini-rust in Rust 025: Parsing let mut
  40. Mini-rust in Rust 024: Lexing the <= sign
  41. Mini-rust in Rust 023: Refactor to share structure of the syntax tree
  42. Rust tracing basic setup
  43. Mini-rust in Rust 022: Stop lying about types in errors
  44. Mini-rust in Rust 021: Including type information in our syntax tree
  45. Mini-rust in Rust 020: Gaps in our type checker
  46. Mini-rust in Rust 019: Type checking an actual type error
  47. Mini-rust in Rust 018: Type checking, the happy path
  48. Mini-rust in Rust 017: Handling float literals
  49. Mini-rust in Rust 016: Tidying our parser
  50. Mini-rust in Rust 015: Parsing a typed assignment
  51. Mini-rust in Rust 014: Evaluating an assignment
  52. Mini-rust in Rust 013: Fixing a bug in our lexer
  53. Mini-rust in Rust 012: Parsing with backtracking
  54. Mini-rust in Rust 011: Parsing an assignment plus expression
  55. Mini-rust in Rust 010: Lexing an assignment

2024 70

  1. Mini-rust in Rust 009: Handling parsing errors
  2. Mini-rust in Rust 008: Refactoring our parser
  3. Mini-rust in Rust 007: Evaluating an operation
  4. Mini-rust in Rust 006: Parsing an operation
  5. Message order in Matrix: right now, we are deliberately inconsistent
  6. Mini-rust in Rust 005: Making our lexer an iterator
  7. Mini-rust in Rust 004: Refactoring our lexer
  8. Mini-rust in Rust 003: Much prettier errors
  9. Mini-rust in Rust 002: Errors while lexing
  10. Mini-rust in Rust 001: Lexing an int
  11. Rust 101 - 53: Exercises for module G (q4)
  12. Rust 101 - 52: Exercises for module G (q3)
  13. Rust 101 - 51: Exercises for module G (q2)
  14. Rust 101 - 50: Exercises for module G (q1)
  15. Rust 101 - 49: Foreign function interfaces (interacting with other languages)
  16. 19 years of blogging
  17. Deployment is important
  18. Rust 101 - 48: Exercises for module F (q3)
  19. Rust 101 - 47: Exercises for module F (q2)
  20. Heads-up: moving away from WordPress
  21. Rust 101 - 46: Exercises for module F (q1)
  22. Rust 101 - 45: Unsafe types and examples
  23. Rust 101 - 44: Undefined behaviour
  24. Rust 101 - 43: The two meanings of "unsafe" in Rust
  25. Rust 101 - 42: Why do we need unsafe?
  26. Rust 101 - 41: Exercises for module E (q2b)
  27. Rust 101 - 40: Exercises for module E (q2a)
  28. Rust 101 - 39: Exercises for module E (q1b)
  29. Rust 101 - 38: Exercises for module E (q1a)
  30. Rust 101 - 37: Async runtimes
  31. Rust 101 - 36: What async and await really do
  32. Rust 101 - 35: Futures
  33. Rust 101 - 34: What is async?
  34. Rust 101 - 33: Exercises for module D (q3)
  35. Elected to the Matrix Foundation Governing Board!
  36. Rust 101 - 32: Exercises for module D (q2)
  37. Rust 101 - 31: Exercises for module D (q1)
  38. Rust 101 - 30: Good patterns and not so good
  39. Rust 101 - 29: Trait objects and object safety
  40. Rust 101 - 28: Dynamic dispatch
  41. New home for my videos: video.infosec.exchange
  42. Why I won't link to AI resources
  43. Rust 101 - 27: Exercises for module C (q2)
  44. Rust 101 - 26: Exercises for module C (q1)
  45. Choosing who to vote for in the 2024 UK General Election
  46. Rust 101 - 25: Threads, Mutexes, channels, Send and Sync
  47. Rust 101 - 24: Parallelism and Rayon
  48. Rust 101 - 23 Exercises for module B (q3)
  49. Rust 101 - 22 Exercises for module B (q2)
  50. Rust 101 - 21 Exercises for module B (q1)
  51. Rust 101 - 20: Unit, integration and benchmark tests
  52. Standing for the Matrix Governing Board
  53. Rust 101 - 19: Creating a nice API
  54. Rust 101 - 18: Dependencies and Cargo.toml
  55. Rust 101 - 17: Exercises for module A3 (part 2)
  56. Automated backups from Signal to Nextcloud
  57. Rust 101 - 16: Exercises for module A3 (part 1)
  58. One import per line is best
  59. Rust 101 - 15: Lifetime bounds
  60. Rust 101 - 14: Some standard library traits
  61. Rust 101 - 13: Type Parameters and Associated Types
  62. Rust 101 - 12: Traits
  63. Rust 101 - 11: Exercises for module A2
  64. [Fixed in FF 123] Deleting an Indexed DB store can be incredibly slow on Firefox
  65. Don't store normal arrays of numbers in Indexed DB - use UInt8Array instead
  66. Rust 101 - 10: Strings
  67. Keep your Indexed DB keys and values small if you want good performance!
  68. Rust 101 - 9: Vecs, Boxes and slices
  69. Rust 101 - 8: Writing methods using impl blocks
  70. Rust 101 - 7: Error handling with panic and Result

2023 19

  1. Letter to my MP: using starvation as a weapon
  2. Santa Circles 0.3 is out!
  3. Follow this blog on the fediverse!
  4. Rust 101 - 6: Structs and Enums
  5. Rust 101 - 5: References
  6. Rust 101 - 4: Exercises for module A1
  7. Rust 101 - 3: Memory and ownership
  8. Rust 101 - 2: Language basics
  9. Rust 101 - 1: Course intro
  10. Combining two function types with & (ampersand) in TypeScript (intersection)
  11. Accessing services on the host from a Docker container or a Podman one
  12. Why I'm voting tactically against you - letter to my Conservative MP
  13. Rust WASM hello world - no need for webpack!
  14. Estimating software tasks and stories: avoid time-based estimates
  15. Maths: The Fun Parts - Graphs video
  16. Maths: The Fun Parts - Groups video
  17. Maths: The Fun Parts - Sets video
  18. GitHub API GraphQL snippets
  19. Live code reviews make life better

2022 13

  1. Air-Source Heat Pump - 1 year later
  2. Deleted my Twitter account
  3. IETF115 Trip Report (Can Matrix help messaging standardisation through MIMI?)
  4. Setting the text selection in a browser: just use setBaseAndExtent
  5. Tips for contenteditables
  6. Outreachy August 2022 update
  7. Transcoding video files for playback in a browser
  8. Matrix is a Distributed Real-time Database Video
  9. Building cross-platform Rust for Web, Android and iOS - a minimal example
  10. Deporting desperate people from the UK
  11. Improving my vimrc live on stream
  12. Comparison of Matrix events before and after "Extensible Events"
  13. Air-Source Heat Pump - our experience so far, 2 months in

2021 29

  1. Providing MapLibre-compatible style JSON from openstreetmap-tile-server
  2. Self-hosting maps on my laptop
  3. Streaming to Twitch and PeerTube simultaneously using nginx on Oracle cloud
  4. New game: Tron - frantic multiplayer retro action
  5. Preventing Virgin Media hijacking my DNS
  6. Letter to my MP about climate emergency
  7. New Job at Element (Matrix)
  8. What to cache when building Rust using Gitlab CI or similar
  9. Printing the version of a Maven project
  10. Minimal example of a Maven pom for a mixed Kotlin and Java project
  11. Importing/migrating from one peertube server to another
  12. Why write an entire game (including Graphics) in a single, hand-coded JavaScript file?
  13. Matrix is the only (chat) game in town
  14. Writing Snake in Terraform Video
  15. Suspending the computer using Kupfer
  16. Uploading to PeerTube from the command line
  17. Republishing Bartosz Milewski's Category Theory lectures
  18. Announcing I-DUNNO 1.0 and web-i-dunno
  19. Automatically filling in the UK COVID test results page with Selenium IDE
  20. Toggle window decorations on Linux GTK3 with Python3
  21. Questions about RFC 8771
  22. Announcing Rust I-DUNNO
  23. Letter to my MP on Yemen
  24. Making Smolpxl work on phones and tablets
  25. Limiting the number of open sockets in a tokio-based TCP listener
  26. Recommendation against the use of WhatsApp in your company
  27. Streaming video with Owncast on a free Oracle Cloud computer
  28. Pinephone update
  29. Is your program a function or a service?

2020 25

  1. Shutdown order consistency: how Rust helps
  2. Edge computing providers
  3. Schema upgrades should be reversible (also other transformations, actually)
  4. Make levels for Rabbit Escape using the level editor!
  5. Announcing Smolpxl Scores - a high score table for your game
  6. Dovecot not working after upgrade to Ubuntu 20.04.1 (dh key too small)
  7. Letter to my MP on the overseas aid budget.
  8. Profile a Java unit test (very quickly, with no external tools)
  9. Why a Free Software web games site?
  10. Code your first game: Snake in JavaScript (on Raspberry Pi)
  11. Play and create little retro games at Smolpxl
  12. shareon.js.org now has a Share to Mastodon button
  13. Coding a tiny game in JavaScript video
  14. short - command line tool to truncate lines to fit in the terminal
  15. Set the date (EXIF) of a photo on Linux
  16. How to send an SMS using netcat (via SMPP)
  17. Letter to my MP on racism in the US and UK
  18. Example Android project with repeatable tests running inside an emulator
  19. Creating a tiny Docker image of a Rust project
  20. Keeping track of podcast times with a simple bash script on Linux
  21. Custom Bash tab completion for my program
  22. Struggling with Rust to figure out the right types for a function signature
  23. React Concepts Video
  24. Converting HTML slides to a PDF with Firefox
  25. Support the Software Freedom Conservancy

2019 23

  1. KotlinJS: First impressions (formed by writing Snake) video
  2. Dependency Injection frameworks: reasons to avoid them video
  3. Coding workshop example worksheets
  4. Building an all-in-one Jar in Gradle with the Kotlin DSL
  5. Creating a self-signed certificate for Apache and connecting to it from Java
  6. ACCU Talk "How Kotlin makes your Java code better"
  7. ACCU Talk "How Git really works"
  8. Examples of Kotlin making your Java code better video
  9. What is a Monad? Video
  10. Build with a different Java version (e.g. 11) using Docker
  11. Rabbit Escape t-shirts
  12. Scheduling a task in Java within a CompletableFuture
  13. Rabbit Escape 0.12 out now, with water
  14. Convert a video to a GIF with reasonable colours
  15. Gradle: what is a task, and how can I make a task depend on another task?
  16. Python Async basics video (100 million HTTP requests)
  17. Keybase chat bot in 10 lines of bash
  18. Performance of Java 2D drawing operations (part 3: image opacity)
  19. Performance of Java 2D drawing operations (part 2: images)
  20. Performance of Java 2D drawing operations (part 1: types of operation)
  21. London Python Meetup January 2019 - Async Python and GeoPandas
  22. Run bash inside any version of Linux using Docker
  23. Windows missing from grub menu after Ubuntu install

2018 33

  1. New home page design
  2. Code Like a Girl T-shirts
  3. Poor performance in Chrome (especially on mobile) - caused by SVG background images
  4. Interesting Characters (UTF-16, utf-8, Unicode, encodings) video
  5. Elm makes me happy (updated for Elm 0.19) video
  6. Godot: make new objects at runtime (instancing) video
  7. You must rewind your incoming buffer when you fail to encode a character in a CharsetEncoder or you'll get an IllegalArgumentException
  8. Godot: Dragging and dropping physics objects video
  9. Godot: 2D shapes bouncing off each other video
  10. Elm JSON decoder examples
  11. Graft Animation Language on Raspberry Pi
  12. Worksheet: "Tell a story by making animations with code"
  13. My experience upgrading to Elm 0.19
  14. Bulk adding items to Wunderlist using wunderline on Ubuntu MATE
  15. Writing a new Flarum extension on Ubuntu
  16. Ubuntu "compose" key for easy unicode character input
  17. Redirecting all requests to https and www using .htaccess in Apache
  18. Example of a systemd service file
  19. Installing Flarum on Ubuntu 18.04
  20. Rabbit Escape 0.11 out now!
  21. Migrating videos from YouTube to PeerTube inside a Docker container
  22. How to write a programming language articles
  23. Allow drag-to-side, but not drag-to-top in Ubuntu MATE (Marco)
  24. Connecting to Slack from an IRC client using slirc
  25. Using Matrix to connect to Slack from an IRC client on Ubuntu
  26. Clever Things People Do In Groovy So You Have To Know About Them video
  27. Examples of SQL join types (LEFT JOIN, INNER JOIN etc.)
  28. Fixing Slack emojis in HexChat
  29. Ideas on how lexing will work in Pepper3
  30. Deleting commits from the git history
  31. Questions and answers about Pepper3
  32. Examples of Pepper3 code
  33. Recording gameplay videos on RetroPie

2017 28

  1. TECH(K)NOW Day workshop on "Writing a programming language"
  2. FileZilla with proxy not working with strange characters in the password
  3. HTML5 CSS Toolbar + zoomable workspace that is mobile-friendly and adaptive
  4. maven-assembly-plugin descriptor for a simple tarball with dependencies
  5. Blog aggregator/planet in WordPress using FeedWordPress
  6. Adding a day in Python datetimes - use timedelta, not the datetime constructor
  7. Broken Levels Challenge - Egham Raspberry Pi Jam July 2017
  8. Women Who Code workshop on "Write your own programming language"
  9. Running a virtualenv with a custom-built Python
  10. Adding a concurrency limit to Python's asyncio.as_completed
  11. "git what" is "git status" on steroids
  12. Making 100 million requests with Python aiohttp
  13. Python - printing UTC dates in ISO8601 format with time zone
  14. Python 3 - large numbers of tasks with limited concurrency
  15. Basic ideas of Python 3 asyncio concurrency
  16. C++ iterator wrapping a stream not 1-1
  17. How to write a programming language ACCU talk
  18. C++ iterator wrapper/adaptor example
  19. C++ iterator example (and an iterable range)
  20. Make Android Gradle display unit test failure messages
  21. Planet Code updates
  22. A story about magic and how we treat each other
  23. Annual cost of clean water for every human
  24. Iterating over the lines of a file in Java
  25. Raspberry Pi Jam "Chaos Car!"
  26. Automated UI tests on Android
  27. Submitting a package to F-Droid
  28. Resources for year 6 teachers on coding and programming

2016 21

  1. Setting up a sane Maven project
  2. Writing a unit test in Elm
  3. How to write a programming language - Part 3, The Evaluator
  4. Basic Haskell project setup (unit tests, code, formatting)
  5. How to write a programming language - Part 2, The Parser
  6. Mousedown events delayed or sluggish on mobile
  7. How to write a programming language - Part 1, The Lexer
  8. Simple example of Netty 4 usage
  9. Elm resizeable SVG canvas filling the screen
  10. Ambiguous names in Java due to non-normalised unicode - but all OK in Python
  11. Gracefully shutting down Firefox, to avoid the crash/session dialog
  12. Snake in Python 3 + Qt 5
  13. Basic Concepts of Christianity video
  14. Elm Basics Video
  15. How to analyse a .phd heap dump from an IBM JVM
  16. Elm makes me happy (old: Elm 0.17)
  17. What's new in Java 8
  18. Which Raspberry Pi photo was funniest?
  19. Raspberry Pi Funniest Photo Game
  20. Snake in Elm
  21. Out-of-school education settings

2015 43

  1. New open source project on work time - git-history-data
  2. Java HTTPS to a server with a self-signed certificate
  3. Vim as editor for Claws Mail
  4. Using GitHub and GitLab
  5. Avoiding postfix error "status=deferred (unable to look up host"
  6. Finding the download count of GitHub releases
  7. Android: using a TextView to show rich text in an AlertDialog
  8. Assassination of individuals by the state
  9. Difficult merges in Git - don't panic!
  10. ZX Spectrum BASIC Web Server
  11. Letter to my MP on UK government assassination of British Citizens in Syria
  12. Rabbit Escape out now on Android!
  13. Changing the Docker daemon options in systemd on Ubuntu 15.04
  14. Docker fails to start on Ubuntu 15.04
  15. Preventing Audacity from crashing when using PulseAudio
  16. Movie podcast "The Good Robot Andys"
  17. Code for detecting when you leave an Android app
  18. Mocks are Bad, Layers are Bad
  19. Prediction result: corporate Linux
  20. Detecting whether an Android app is stopping (or starting)
  21. Order of Android Activity lifecycle events
  22. Snake in Dart
  23. Preventing Kupfer switching to existing windows
  24. Using Kupfer on MATE
  25. Tweetable Art Code
  26. Rabbit Escape 0.3.1 - now with zoom!
  27. Treat warnings as errors in a (Gnu) Makefile
  28. Switching Xfce to use metacity
  29. Java game programming: image rendering hints make no difference to rendering time
  30. Snake in ZX Spectrum BASIC
  31. fetchmail complaining about GoDaddy SSL certificate
  32. Encapsulation as passing on responsibility
  33. Snake in Ruby
  34. Batch-converting audio files to be louder (on Linux)
  35. Why Rabbit Escape is Open Source / Free Software
  36. What is a good company?
  37. How to make your own levels for Rabbit Escape
  38. Rabbit Escape v0.1 out now for Linux, Windows and Mac video
  39. Rabbit Escape (a bit like Lemmings) v0.1 released for Linux, Windows and Mac
  40. Snake in Groovy
  41. Programmatic equivalents of web.xml sections for Tomcat
  42. JAX-RS (using Apache CXF) in embedded Tomcat example
  43. Vim persistent buffer list combined with saved sessions

2014 41

  1. Snowflake Christmas card web page on the Raspberry Pi
  2. Snowflake Christmas card in Scratch on the Raspberry Pi
  3. Encoding URLs in Java
  4. Books that changed my life
  5. Why I use Linux
  6. LibreOffice spell check not working in Lubuntu
  7. Is it ok to represent dates as Unix time (seconds since the epoch) in JSON?
  8. Using hexdump to represent a binary file in Java source code
  9. Disabling screensaver on LXDE
  10. Android development - saving state
  11. Android development - Rabbit Escape really working on Android
  12. Showing urgent (flashing) windows on all desktop in LXDE's taskbar (window list) in Lubuntu
  13. Launch an urgent window using Python and Xlib with the UrgencyHint flag
  14. Android programming - a non-Android, Android Game
  15. Android programming - drawing bitmaps in a game loop
  16. Don't use email auto-forwarding (emails will go missing)
  17. Fetchmail "mda" option makes emails bypass the spamassassin filter in postfix
  18. Android programming - a menu using Activities and Intents
  19. Raspberry Pi Minecraft Python summer project screenshots
  20. Android programming - setting up Android Studio
  21. What is a string?
  22. Absolute Truth in programming languages
  23. Options for code reviews with Git
  24. Desktop sharing not working in Lubuntu 14.04
  25. Best GCC warning flags for compiling C++
  26. What git server should I use?
  27. Renewing self-signed certificate for ejabberd
  28. Letter to my MP on DRIP
  29. What is node.js?
  30. A mini mocking framework
  31. Simple template programming
  32. Five Quines video
  33. OpenID security in a REST API
  34. avconv performance slow in Ubuntu 14.04 trusty
  35. Does test-driven development harm clarity?
  36. Token-based security in a REST API
  37. Avoid mocks by refactoring to functional
  38. Using the final keyword in interface method parameters does nothing
  39. Using xscreensaver to lock the screen in Lubuntu
  40. Security in a REST API
  41. Searching in a REST API

2013 26

  1. Paging in a REST API
  2. A Basic REST API
  3. Avoid backslashes anywhere in Java code (Java error "illegal unicode escape")
  4. What is REST?
  5. Bash arrays
  6. Using if:set, unless:set etc. with macrodefs in Ant
  7. Using if:set, unless:set etc. to execute a task conditionally in Ant
  8. Vim for Fun
  9. Working with others in git
  10. Merging in git
  11. Behaviour of Java String.split() when some answers are the empty string
  12. Checking the case of a filename on Windows
  13. Branches in git
  14. Passing several values through a pipe in bash
  15. Goodness in programming languages, part 4 - Ownership & Memory
  16. How to use git (the basics)
  17. Using gnome-mplayer to play DVB radio without asking whether you want to resume
  18. C++14 "Terse" Templates - an argument against the proposed syntax
  19. setUp and tearDown considered harmful
  20. Why use git for source control?
  21. Set the volume in OpenBox/LXDE (or on the command line) with PulseAudio and Ubuntu
  22. Everybody loves build.xml (test-driven Ant)
  23. Everybody hates build.xml (code reuse in Ant)
  24. Dry run mode for Ant (ant -n, ant --dry-run)
  25. My First Raspberry Pi Game " Part 12 " Scoring, done!
  26. My First Raspberry Pi Game " Part 11 " Being less rude

2012 42

  1. My First Raspberry Pi Game " Part 10 " Red square
  2. My First Raspberry Pi Game " Part 09 " Lots more words
  3. My First Raspberry Pi Game " Part 08 " Success and failure
  4. My First Raspberry Pi Game " Part 07 " A green circle
  5. Launching an OSGi app on the command line
  6. My First Raspberry Pi Game " Part 06 " A better class of waiting
  7. My First Raspberry Pi Game " Part 05 " Say something
  8. My First Raspberry Pi Game " Part 04 " A small black screen
  9. Length of Open Source licenses
  10. My First Raspberry Pi Game " Part 03 " It's like a magic spell
  11. My First Raspberry Pi Game " Part 02 " Saying hello
  12. My First Raspberry Pi Game - Part 01 - Before we start
  13. Running Dojo DOH tests in a browser without a web server
  14. Bash associative array examples
  15. Running Dojo 1.7+ DOH unit tests on the command line with Rhino
  16. Lambda functions timeline
  17. Goodness in programming languages, part 3 " not doing the same thing more than once
  18. Tail Call Optimisation in C++ - lightning talk video
  19. Cool Raspberry Pi Projects
  20. Scheme 7: Macros video
  21. Scheme 6: Lambda video
  22. Tail Call Optimisation in C++ published in Overload journal
  23. Scheme 5: Quotation video
  24. Scheme 4: Recursion - how to write functions in Scheme video
  25. Scheme 3: Closures video
  26. Scheme 2: Basics - pairs and lists video
  27. Scheme 1: Feel the cool video
  28. Generalising tail call optimised C++
  29. JavaScript WTFs Videos
  30. Closures in Scheme
  31. Performance of tail call optimised C++
  32. Tail call optimisation in C++
  33. Lighting talk - Tail call optimisation in C++
  34. Scheme: pairs, lists and recursion
  35. What timezone Python thinks I'm in
  36. Freeview dvb-t scan gives "tuning failed!!!" after 18th April switchover
  37. Scheme: feel the cool
  38. JavaScript WTFs
  39. Goodness in programming languages, part 2 " getting your code running
  40. Building jEdit from source
  41. Goodness in programming languages, part 1 - syntax and layout
  42. Ethernet not working on Ubuntu with Realtek RTL8111/8168B

2011 8

  1. FreeGuide usage stats
  2. Entertain your baby using your Android phone
  3. rdesktop swallows keyboard events
  4. Reclaiming desktop space with Ubuntu's window-picker-applet
  5. My Address Book 1.9.0 - rewritten from scratch
  6. Switching workspace in GNOME via the command line
  7. Anatomy of an interpreter: the Evaluator
  8. How to ask technical questions in person

2010 5

  1. Anatomy of an interpreter: the Parser
  2. Anatomy of an interpreter: the Lexer
  3. Subs Scheme Lisp Interpreter
  4. Scalable Graph Coverage
  5. Ubuntu Lucid upgrade - a catalogue of disaster and pain

2009 16

  1. FreeGuide 0.10.11
  2. Don't design for performance until it's too late
  3. Technorati appear to have broken openid delegation
  4. NNDB 0.1
  5. NNDB's Not a Database
  6. Diffident 0.3
  7. CBeebies and other channels not working with mplayer
  8. Firefox keyword search for finding C++ keywords
  9. Flaws in the software patents system
  10. IGCC - a real-eval-print loop for C/C++
  11. Diffident - command line side-by-side diff editor
  12. Random background in GNOME
  13. Analog literals
  14. Separate regular expressions, or one more complex one?
  15. New Baby
  16. Talk in code

2008 12

  1. Fixing the vertical panel window list on Ubuntu Hardy
  2. An actual difficult bug fixed
  3. FreeGuide 0.10.9
  4. Wii repaired free!
  5. Another one
  6. FreeGuide 0.10.8
  7. Debugging memory use and fragmentation on Windows using Address Space Monitor
  8. C++ is an expert language
  9. Templated test code?
  10. Public bzr branch of FreeGuide
  11. Public git repo for GSSMP
  12. Finally released last.fm support for GSSMP

2007 27

  1. lighttpd on Ubuntu - alias.url doesn't work when included in a module config file
  2. FreeGuide updated to latest XMLTV, and bug fixes
  3. duckmaze 0.2
  4. Caution: numbers that feel prime may be divisible by 3
  5. Announcing Record TV
  6. FreeGuide 0.10.5
  7. FreeGuide SVN now useable
  8. Heartfelt apologies for the feed URL change
  9. FreeGuide - putting recording on hold
  10. New Baby arrived safely
  11. (Badly wrong) usage statistics for FreeGuide
  12. Procmail Maildir messages disappearing
  13. last.fm in GSSMP
  14. lastfmsubmitd on Ubuntu Dapper
  15. Obviously, there was a bug
  16. Watching TV: a simpler way
  17. GSSMP 1.0
  18. Choose channel dialog
  19. Digital TV on Dapper with my Hauppauge WinTV Nova-T card
  20. Restoring a backup with Duplicity
  21. Remote encrypted backup with duplicity
  22. GSSMP goes beta
  23. Recording in FreeGuide
  24. My daily backup
  25. Creating .deb and RPM packages
  26. Moved to WordPress
  27. Two new babies

2006 18

  1. New games!
  2. Linux Journal - Forgiveness
  3. Another FreeGuide release candidate
  4. FreeGuide 0.10.4 release candidate
  5. A Quick and desperate introduction to data recovery
  6. FreeGuide fan mail
  7. Over-engineering gone mad
  8. Keyboard layout change in Ubuntu
  9. FreeGuide source layout (and SVN migration)
  10. Letter to Linux Journal
  11. Linux Journal slides
  12. Donation
  13. FreeGuide update
  14. Faster Poker Analysis
  15. Poker Analysis
  16. Podcasts I listen to
  17. Setting up my ideal email system 4
  18. I spawn

2005 36

  1. Setting up my ideal email system 3
  2. FreeGuide 0.10pre2
  3. Setting up my ideal email system 2
  4. Setting up my ideal email system
  5. Just a little bit longer...
  6. BashPodder
  7. Python objects in C++
  8. CD writing on Fedora Core 3
  9. Prince of Persia - The Sands of Time
  10. Personal stuff is boring
  11. Sourceforge
  12. London
  13. London terrorist attacks
  14. The dangers of learning to code
  15. Train gaming
  16. Constantly changing passwords
  17. Gaming on the move
  18. ATV Palm export
  19. Nearing a new release
  20. DIYPlanet
  21. Re-implementing
  22. Honestly my last post about my viva
  23. Corrections
  24. Viva today
  25. Mnemonic
  26. FreeGuide's TODO list
  27. FreeGuide packaging and plugins
  28. DIYBlog
  29. RSS working?
  30. Prediction: corporate Linux
  31. Guilty Expression
  32. Rss 2
  33. A real job
  34. What is going on with FreeGuide?
  35. Google
  36. Beginning blog