I wrote a raytracer and a rasteriser as part of my university course. The raytracer supported features such as indirect lighting, reflection, refraction, and a photon mapper capable of simulating the final positions of 60,000,000 photons in a few minutes (and quite a few GBs of RAM).824
During the second year of university, I created a kernel for the ARMv7 instruction set. I went above and beyond what was required on this project, achieving a clean design and features such as a blocked process queue, piping, kill, and a simple filesystem. This was my favourite coursework so far. I found it very interesting to learn about and implement the things that we take for granted as programmers.536
For the last two years, I have been working on a very ambitious game. The game is a top down sandbox with multiplayer support. I’m aiming towards a city-based game, where players can wander around a procedurally generated city. One of the main reasons I started creating this game is to learn about multiplayer networking at a low level - client-side prediction, server-side reconcilliation, cheat preventation, and reducing the visual effect of latency.806
This article will show you how to verify a user’s identity by letting them associate their account with an external third party phpBB account. I used Python and Flask to achieve this, however any language and framework should work, and shouldn’t be too hard to port to.1000
I recently wrote and released a python module to allow fetching of profile data. You can install it using pip:
pip install beautifulsoup4 phpbb-parser
Here’s how you import and use a profile:
profile.signature is a beautifulsoup4 object.177
To get more than 50% on our coursework, you had to submit extensions. Here are some of my favourite ones.
I created a Pong clone using C and SDL.
I created a Chess game and Chess minimax implementation in C.
Infinite and Generic Game of Life, and more
- Chunk based infinite universe. Automatically expands.
- Interactive player and universe editor using SDL.
- Can set the Born/Survive ruleset code (from command line).
- Can choose the number to steps to take before opening the player or outputting to stdout (from command line).
- Has tests.
I was contacted by a client to create a system which calculates the workload for employees based on their assignment to tasks and appointments. The system needs to solve two problems: Firstly, different staff members work different numbers of hours, which makes it hard to allocate tasks fairly and proportionally. Secondly, the client wanted to use the system to analyse past workloads and to anticipate future workload, in order to improve her system of work.
The solution contains an algorithm to suggest new employees to tasks, based on the type of tasks they are currently assigned to, how many hours they should work a week, and how what they are doing at the time.
The solution was written as a web application, using Python, Flask and SQLAlchemy.
One of the areas in computer science that interests me is artificial intelligence. I’ve done some projects experimenting in this area:
ESME, a pattern matching AI similar to Eliza
ESME is a very old project which uses simple pattern matching to do things like “my name is foo bar” → “Hello foo bar”.
As one of my computer science projects, I created an implementation of the minimax algorithm. Unfortunately, due to time restraints, I was unable to implement optimisations such as composition tables and position hashing. This caused the Chess AI to be limited to only looked 5/6 moves ahead, any more caused minutes worth of processing time. This lack of depth caused it to make bad choices.123
Today I’ve been doing some work on a flying simulator I’m calling “Flying Pro II”.
Five or six years ago, I created my first ever 3D video game. It was called “Flying Pro”, and it was part of a set of simple 3D video games I called “Pro Series”, for some reason. The games were made using a demo version of a propietary 3D game engine.85
Hello 2015! Recently I have created an implementation of the 3D projection algorithm. It is just wireframe models. It works pretty well, except it doesn’t do frustum culling. You still see things that are behind you, but upside down.
The source code of this implementation is available under the WTFPL or CC0 licenses - you can choose which one you want to use. Use WASD to move, arrow keys to rotate, space to ascend and shift to descend.80
Hi all! I’m back again for another post. This time I am going to show off a project I have had for quite a while - it is a cellular automaton which simulates the Lotka Volterra equations.
Orange for foxes, brown for rabbits.
The Lotka Volterra equations, also known as the predator prey equations, are used to model the populations of two species over time - a predator and a prey.101
Recently I have been looking at languages and compilation: VMs, parse trees, lexers, and interpreters. Nand to tetris is a pretty awesome guide to how the CPU executes programs - from logic gates to high level languages.
Assembler and Bytecode VM
I created an assembler and Virtual Machine to run assembly style instructions. I haven’t released it as it isn’t as complete as I want it yet.
Parse Trees and Reverse Polish Notation (RPN)
Turns a string such as “( 0 - (6) + ( 6 ^ 2 - 4 * 1 * 5 ) ^ (1 / 2) ) / ( 2 * 1)” into a binary syntax tree, and then into Reverse Polish Notation, and then executes it.
I have also experimented with a simple Lexical Analysisor, however it’s not at a state that I’d like to release.
Befunge is an esoteric programming language - a language which isn’t meant for pratical use, but rather to test programming use. The language consists of a two dimensional grid of characters. Each character is an individual instruction. I was disappointed that the authors didn’t take it seriously enough, and didn’t add input and output to it. So, I created my own! I called it ‘Rufunge’. It’s not finished yet, but can currently run most Befunge programs.
Mesecode is a language which compiles to Lua. It’s purpose it to make definitions in Minetest easier to read.
You can write:
mod default node Stone is ground, cracky=3, stone drops Cobble