My name is John Morrice. I'm a mathematics student from Scotland. I like alcohol, guitar, and computer programming.

Recently I bought a Kirk Hammett series ESP guitar. It's bloody wicked!
Anyway, here are my things:

Software

The Obelisk Programming Language is a new, work in progress, general-purpose programming language.
Obelisk aims to:
Have an expressive type system, but be utterly type-safe.
Respect functional purity, with no mutable variables in functions...
...but also to support class-based objects that control the mutable state represented by their instance variables.
Be native-code compiling, for speed.
Have a robust development methodology. Everything must be tested rigorously because programmers cry when their code-generators break.

Done so far: Front-end to check simple functions, and a run-time environment with a copying garbage collector.


The Simple Nice-Looking Manual Generator aka snm generates nice looking manuals from YAML (see http://www.yaml.org/) files.
snm was written because maintaining the Obelisk report by hand became rather difficult. snm generates xhtml user guides and manuals from files which are easy to write. Read the snm user guide online.


The Delve Programming Language was an attempt to write a compiler and virtual machine for a new and different object oriented programming language.

The aim was to write a very open language, where every concept was first-class. For example in Delve, an Object's method can be stored in a variable and executed inside another object - where the method would then access the latter's instance variables!

My idea was that such open-ness might lead to interesting language for teaching and learning programming. Eg, the teacher could refactor the student's program as it runs.

A prototype compiler and virtual machine was created supporting:
anonymous and higher order methods - a method can be defined outside a class, and held in a variable. This differs from a closure as when it is executed within an object, it can access that object's variables as if it were a method declared within that object's class).
anonymous and higher order functions (Normal closures)
a meta-object model, where an object can change its class at run-time - an object's class was determined by its 'class' instance variable, and, classes being objects, a class' superclass was determined by its 'parent' variable.

I gave up on the project because my approach was poor. I was unprepared for the complexities of writing a compiler, especially for such a strange language! The new language concepts, I reckon, are useful. Perhaps another language will implement them soon...

TextDeath, multiplayer textmode deathmatch TextDeath is a multiplayer shootemup textmode platform game for POSIX systems. It runs over TCP/IP, and renders to curses.
The most interesting thing about TextDeath is that the levels are created using TextDeath's own scripting language, called Death. Death has a similar syntax to C.
Download TextDeath now!


Esotericbot, advanced IRC bot Esotericbot is an advanced IRC bot for POSIX systems.
The esotericbot is so called because it is intended to be used as an interpreter for esoteric programming languages by geeks on IRC :)
It executes programs in response to requests over IRC, and uses POSIX functionality to ensure the programs are run safely.
For example, commands are set to run within given memory limits and the whole process can run as a different user and within a chroot, once the network connection has been established.
Download it from cabal



Zoom mandelbrot fractal viewer Zoom is a mandelbrot fractal zoomer.
Gaze into the glorious colours of Chaos!
Use the mouse to explore the fractal.
'Z' zooms towards the mouse, while 'X' zooms away from the mouse.
Download the source


Shpider web automation Shpider is a web automation library designed to help writing web spiders for various purposes - such as finding broken links.
Download it from cabal


http://www.illona-sculptures.co.ukIllona sculpture tools are a set of tools which my mum can use to edit her website. It holds data with YAML and outputs html. It even has a GUI and shizz. Noice.
Visit her site and order some fine art


SK is an SKI combinator calculus interpreter written in haskell. It differs from the other ones you might have seen floating about because it uses explicit graphs from the fgl package, rather than a custom abstract data type. My approach makes it strange to understand and perhaps a lot slower. Woohoo!
Download SK


Typefuck is an implementation of brainfuck within the haskell type system. That is, it runs during type checking at compile time, and without using any compile time code. The output of a brainfuck program encoded in typefuck is a corresponding haskell type. Rather than a value. Yes, I was drinking. Also, I blog about here which may help you use the thing. Kai Meder gave a talk on the semantics of type fuck as a task for his masters degree at university. I wonder if I can find any data on that....
Download typefuck


The Kolmogorov Programming Language the Kolmogorov language is an esoteric programming language based on a Kolmogorov machine, which is a little like a turing machine except it is based on a graph rather than a tape. Here's the syntax and semantics described on the esolang wiki. If you wanna learn about Kolmogorov, and Kolmogorov machines look em up, he's a famous sort of chap.
Download the Kolmogorov Programming Language

Valid XHTML 1.0 Strict