Projects

As well as my general Mozilla contributions, I have created several other projects. You can find details of them below.

micropolisJS is a port of the original SimCity to Javascript/HTML5. It is based on Don Hopkins' Micropolis, which is the open-source release of the SimCity code for the One Laptop Per Child project. I had several learning outcomes in mind: to gain some experience with the HTML canvas element, to understand how HTML5 games are programmed, and to peek behind the curtain, and understand how a favourite game from my childhood actually worked under the hood.

I describe funkierJS as a pragmatic functional toolbox for ES5. It offers a wide variety of functional programming primitives, for example map, and foldr, with the same API as Haskell, leading to improved function composability over other functional libraries such as underscore or lodash. Further, all the functions are pragmatically curried, in that one can supply any number of arguments; if the number of arguments provided are less than the number required, then the function will be partially applied.

Most importantly, funkierJS provides curried implementations of virtually the entire Ecmascript 5 standard library, allowing the user to be productive immediately, rather than having to manually create curried versions of common functions. In doing so, it also takes the opportunity to smooth out some rough edges of the library API. In particular, by virtue of currying, there are no functions with optional arguments: the versions with optional arguments become separate functions instead, hopefully eliminating a whole class of common errors.

Finally, funkierJS offers the unique innovation of "object-curried methods", which provides a mechanism for object methods that are in some sense "self-currying"; they behave like normal curried functions, but pick up their this context from the first invocation in the partial-application sequence.

Currently in progress, V8Monkey is a clean-sheet reimplementation of an idea originally conceived by Paul O'Shannesy to build a V8 API adapter for Mozilla's Javascript engine, SpiderMonkey. Once implemented, this should then enable running nodeJS with SpiderMonkey as the underlying Javascript engine.