I am a programmer and post-graduate computer science student at the Oxford University Computing Laboratory in Oxford, United Kingdom. I have been working with computers from a young age, like many programmers and computer scientists of my age. After developing an affinity for World of Warcraft in November, I've worked on several addons and addon libraries that are used by hundreds of thousands of World of Warcraft players all over the world. I have also had the opportunity to work on three different books about writing addons for World of Warcraft. When I'm not working on "computer" things, I spend time taking photos and spending time with my friends and family.
World of Warcraft Addons
Since 2004, I have been involved in several addon projects for World of Warcraft. The following are a sample of these probjects.
Dongle is a minimal addon framework that tries to provide a set of components that are necessary for the bulk of addons, without trying to provide a full-featured abstraction of the World of Warcraft API. This is accomplished through a pseudo-object-oriented approach, allowing you to group your addons' functionality into a single Lua table if you choose. This library was instrumental in the development of the embedded library framework used widely in World of Warcraft, and was developed using a unit testing harness and framework.
LightHeaded is a very simple addon that displays quest information and comments from Wowhead in-game, eliminating the need to Alt-Tab when you get stuck on a quest. Since there is no network access in World of Warcraft, this is accomplished through a series of load-on-demand addons that ensure data is only loaded when explicitly required, with an incredibly light footprint by default.
TomTom is a navigation assistant in World of Warcraft, allowing you to set waypoints and maintain a consistent heading in the right direction. By itself, TomTom simply provides world coordinate information, and a system for setting/clearing and navigating to waypoints. Addons can use TomTom for more advanced navigation, leading the player along a path to reach a final destination.
Clique is one of least noticed, but most inflential World of Warcraft addons. It enables a drastically different playstyle for certain players, enabling a mode called "click-casting" on character's unit frames within the game. Normally when trying to cast a spell on a player you must choose the spell and then choose the target for the spell. Alternatively, you can target the recipient of the spell and then perform the spellcast. Clique allows you to do both of these in a single action, by specifying more complex click-bindings. For example, you can set shift-click on your unit frames to perform a "Flash Heal" on the character on which you have clicked.
This sort of playstyle is not possible by default in World of Warcraft, and Clique helps to unlock the power of the addon system to enable it. Configuration is a very simple process and allows the player to customize their bindings in an intuitive way. Unlike some other solutions, Clique allows you to use click-casting on any unit frames, allowing the player to customize their information to be displayed however they'd like.
WowLua is an interactive Lua interpreter and in-game scripting environment for within World of Warcraft. Addon authors find themselves tweaking bits of code and constantly having to reload the user interface in order to test their changes. WowLua allows the developer to save, edit, and run simple scripts with syntax highlighting and automatic indentation. For those who instead wish to bits of code in an interactive command-line interpreter, WowLua provides this feature as well.
Open Source Work
Before (and since) World of Warcraft, I have been involved in a number of open source projects. Only the larger more established projects are listed on this page and in the projects section of the main page.
tnt - AOL instant messaging for emacs
Before moving to vim as my default editing environment, I was involved in the revitalisation of tnt, an AOL Instant Messenger client for Emacs. Written entirely in elisp, it was an interesting departure from the other projects I have worked on. In the early stages we were responsible for implementing away message support, better buddy list support, pounce messages and other handy features. Although I no longer use this software, it continues to function (albeit with the occasional quirk due to different emacs environments and implementations).
Sputnik - An extensible wiki engine in Lua
Sputnik is a content management system designed for extensibility. Although it functions out of the box as a wiki, it can easily be customized and extended to fit any particular need. Sputnik is used as the software that drives http://wowprogramming.com and more information. Each aspect of the site is a different type of "Node" in sputnik terminology so they function in different ways. Although the documentation for Sputnik is somewhat lacking at the moment, we try to provide as much support as possible over the mailing list, which can be found on the project page.
go-luapatterns - Lua pattern matching in Go!
go-luapatterns is a library for the Go! programming language that provides support for Lua pattern matching on both strings and byte arrays. It is mainly a function-by-function port of the original C code from the Lua 5.1.4 distribution, altered to be written in an idiomatic "Go" style.
I have been involved in the production of three books about writing addons for World of Warcraft, all published by John Wiley & Sons.
I grew up in Syracuse, NY and went to school at Syracuse University for my BSc and MSc in Computer Science. While there I worked for the Division of Student affairs as a web developer, graduate assistant and finally as a computing consultant for the division. When I graduated I went to work for Anheuser-Busch, where I worked in the brewing department as a System Engineer providing support for process systems.
Currently I am a DPhil/PhD student at the Oxford University Computing Laboratory. I am currently researching software engineering methods and designs in systems-level concurrent programming under Bernard Sufrin and Michael Spivey. During my studies I also serve as a Teaching Assistant within the lab, giving me an opportunity to instruct and assist students with their practical assignments and other obligations.