Now available: Sub-articles: articles that I didn't get around to writing detailed expositions for.

Let's Build a JPEG Decoder: Frames and Bitstreams
5th May 2013
Continuing a series exploring the concepts behind JPEG image compression, this part begins delving into the relationship between the image, its colour constituents and the encoded data by breaking open the Start of Frame segment.
Let's Build a JPEG Decoder: Huffman Tables
24th Feb 2013
Various levels of compression and encoding are employed in the production of a JPEG file. The first step in decompressing an image is decoding the data, which is compressed with a variant of Huffman encoding. This article looks at the data attached to a JPEG file which allows the Huffman decoding to proceed.
Let's Build a JPEG Decoder: File Structure
20th Jan 2013
Aside from the concepts explored in the previous part of this series, the JPEG file format is composed of segments which encode the various portions of information needed to decode an image. This article implements a simple method of traversing the segments of a JPEG file.
Let's Build a JPEG Decoder: Concepts
5th Jan 2013
The JPEG image format is a bit of a black box for many: files go in and images come out. Looking inside the box reveals a bunch of interesting algorithms and ideas, so writing a JPEG decoder makes for an interesting exercise. This article explores the concepts behind the compression techniques used by JPEG.
Steganography with Brainfuck
12th Nov 2011
There are a number of techniques for encrypting or hiding information within an image, including the concept of hiding a program within the image which itself prints the secret information. This article explores the feasibility of encoding a Brainfuck program within the bitmap data of an image, with a detailed run-through of a simple example.
Augmented Reality with the Android NDK: Part 2
21st May 2011
Concluding an introduction to the development of augmented reality software, this part looks at implementing an edge detection algorithm overlaid on an Android smartphone's camera preview, and how the process can be optimised through use of the Android Native Development Kit.
Augmented Reality with the Android NDK: Part 1
21st Apr 2011
One of the major current trends in smartphone applications is augmented reality: a view of reality with information laid on top. This can be as simple as a view of what the camera is currently seeing, with calculations based on position and direction. In the first of a two-part article series on Android development, this article looks at how to set up a camera view and access a canvas for the rendering of overlay information.
GameBoy Emulation in JavaScript
25th Feb 2011
A series of articles exploring the development of a GameBoy emulator, using JavaScript and HTML5. Currently on part 10; other parts are expected to follow.
Venn Diagrams in PHP and imagick
20th May 2010
Visualising the overlap between two sets of data is often achieved through Venn diagrams, but such diagrams can be difficult to render in a web development environment. This article covers the mathematics and geometry behind the Venn diagram, and a simple implementation of the algorithms involved in calculating the appropriate dimensions.
Discordian Date Handling in Java
8th Mar 2010
Date handling, and especially conversion between different calendars, can be a complex issue to deal with. This article introduces the concept of calendar conversion in Java, and the issues that need to be dealt with when performing such conversions, by building a handler for the Discordian calendar and investigating the mappings between months in the Gregorian calendar and the Discordian seasons.
linecolor.pl: Rule based Line Coloring in irssi
1st Feb 2010
The irssi IRC client has a built-in capability for rule-based highlighting of nicknames, but does not allow for the full line to be highlighted; nor does irssi allow arbitrary colours to be set against different rules. linecolor is an extension script for irssi that allows for this functionality to be added, in an intuitive fashion.
Audio Captchas in PHP
9th Jan 2010
The major compromise made when a website uses Captcha images is that between accessibility and security; those with bad eyesight or colour-blindness may have trouble viewing a Captcha image. One way around that is to provide an MP3 download option for the Captcha text, which gives another path of accessibility to the process. This article looks at how an audio Captcha can be generated, using common tools.
Implementing PayPal Website Payments Pro UK
15th Sep 2009
PayPal is used across the world to authorise payments online, and a seamless credit card payment service is available through Website Payments Pro. Unfortunately, the documentation for implementing this can be confusing and contradictory, and getting your code working can take some time. In this article I've brought together the documentation and my experience with it, to provide a coherent source of information on Website Payments Pro.
Shooting Yourself in the Foot Part Two
4th Jun 2009
At some point, most developers have come across 'Shooting yourself in the foot', the comparison of how different programming languages would implement the process of firing a gun at your foot. This article assumes success, and the lack of a significant portion of your leg; Part Two looks at how to rebuild your leg, in various languages.
JavaScript Tab Controls
8th Mar 2009
Tabs have always been one of the most useful elements of a user interface, allowing an interface designer to pack a lot of information into a small space by only showing a section at a time. This article explores the implementation of a tabbing interface using HTML and JavaScript, and goes on to look at pages where more than one set of tabs is used at the same time.
Automated Deployment with Subversion
21st Oct 2008
Version control systems and development testing servers go hand in hand; you work on your local working copy, and test on the development server. But what happens when you want to take your work live: to deploy the developments you've completed? This article presents one way to solve that problem, by using the scripting facilities provided by Subversion.
Extended Text Mode on the C64
3rd Aug 2008
When you mention the Commodore 64, most people think that it's an obsolete computer from the 80s which no-one could ever use nowadays. One of the major problems is that you can't fit enough information onto a C64's screen: the standard size of a work terminal is 80 characters by 25 lines, and 40x25 just isn't enough. In the first part of a series (which may take some time to complete), I look into rendering an 80x25 text screen on the Commodore 64, and how it can be done.
Building Complex Emails with PHP
10th Aug 2008
The first script that a budding PHP developer builds is often a tool to send simple email messages from a website, with a couple of paragraphs of text inside. What these scripts lack is the ability to send HTML-formatted emails, or to attach documents and other files to the message. In this article, I cover the MIME standard for building complex emails, and how to format and send a MIME-compliant email message in PHP.
Intranet DNS Resolution with BIND Views
2nd Jun 2008
When you're working on a web site that's hosted in the same office, it can be a problem to see the fruits of your labour: the web site's domain resolves to the external IP of the office, and can't be routed from inside. It's quite easy to overcome this problem, by using the 'view' facility of BIND to provide two different views of the domain: one for the office LAN, and one for the outside world.
An Introduction to Compression
22nd May 2008
An exploration of the different types of compression, looking at the workings of lossless compression methods such as RLE and Huffman encoding, and taking an overview of perceptive compression and why it works. If you've ever wondered how a CD can be shrunk down from 650MB of sound to 65MB, this article tells you how it's done.
Whitelist SSH Access with OpenWRT
9th May 2008
If you're tired of constant login attacks against your SSH server, you can use your OpenWRT router to implement a whitelisting firewall, allowing the people you know and trust to connect to your shell, and blocking everything else. It's even possible to automatically modify the whitelist from an intranet Web page, through the use of extensions to PHP; this article will show you how it's done.
Booting Linux from Flash
7th Oct 2007
For those who build home theatre PCs and other computers which need to be quiet in operation, most of the noise from computer hardware can be eliminated: fans can be removed, heatsinks and smaller power supplies can be used. The largest remaining source of noise is the hard disk containing the operating system. If the HTPC is running Linux, it's possible to move that operating system from hard disk to a USB flash drive, and boot it from there; this article shows you how.
Running a Windows Partition in VMware
20th Jan 2007
Virtualisation of operating systems is a big trend at the moment: running multiple servers on one physical box allows a hosting company to save space and power costs, and running different operating systems lets a Web developer test their work on various browsers and hosts. The problem with setting up a virtual machine is the loss of disk space on the host, to hold a disk image for the guest; what if you've already got an installation on another partition? This article shows how to use that physical installation in VMware, using the example of Linux as the host and Windows XP as the guest.
Bitwise Operators
22nd Sep 2006
For almost as long as the computer has existed, programmers and developers have had to deal with the computer's representation of numbers, the binary numbering system. The unique properties of binary allow the application of Boolean mathematics to common manipulations. This article provides a run-down of the common Boolean operations, including their syntax in C-derived programming languages, and provides examples of where such operations might be used in everyday development.
The Smallest NDS File
22nd Sep 2006
Embedded development is often focused on the size of the resultant binary, especially on platforms where this factor is important. On the Nintendo GBA and DS, the homebrew toolchain is able to generate well-optimised binaries, but programs with equivalent functionality tend to have very different sizes. This article looks into why that is the case, and explores the format of a Nintendo DS binary file in an attempt to make the smallest DS binary possible.
Virus Detection with Message Digests
22nd Sep 2006
One day in 2006, I was set a short challenge: write an article of around 500 words on the topic of MD5 digests. This article was the result: an explanation of what it means when a computer generates a digest of a message, and a look at where message digests can be used. In particular, focus is given to automatic generation of digests for executable files, and how this can be used to detect possible manipulations of the files by viruses.
DOM Manipulation and CSS Trees
22nd Sep 2006
Details regarding the implementation of a collapsible tree-style nested list using standards-compliant HTML and CSS, utilising JavaScript and the Document Object Model.
Get the RSS feed