I've done very little on the side project front since coming back from china. The trip shifted my focus to more tangible things and I've had trouble finding motivation to work on more abstract projects, especially after putting in eight hours at my day job. I've been using twitter (follow me!) as a release valve, but I yearn for a meaty side project again.
Anyway, I thought I'd describe some moderately sized projects that have been jostling around in my head over the last month:
- Bot Book. A friend recently posted a list of skills he'd like to acquire before finishing his PhD and one of them was to write a Quake bot using a neural network. I pointed out my old ecosystem project in Quake2, Neural Bot, and UN Bot as places to get started. Briefly looking at those projects got me thinking about how much I was into trying to understand and build quake bots all those years ago. I've recently been working in the area of BDI intelligent agents and I started thinking about comparing and contrasting these two approaches of autonomous control. My vision is to dig up the source code for all of the Quake, Quake2, and Quake3 bots I can find and study each in turn, describing the main sub-systems and most importantly the structures used to realise autonomous control (most commonly as hierarchical finite state machines). The book would be a summary of each of these studies and finally an abstraction of the general approach. The title might be something like: Bots: Lessons about autonomous control from computer game bots (or something more catchy). Each bot represents a different individual programmers approach to the problem, and there were a lot of bots made for these games. I'm really interested in the abstraction of all of these studies contrasted to more academically rigorous BDI, are there some great ideas in there not being exploited as much as they should in other domains?
- Bioinformatics. I cannot shake my interest in the field. I've been poking around computational biology for many years now, hacking on protein folding prediction, and sniffing around related problems and suitable machine learning algorithms. I've been thinking pretty seriously about getting into a night course such as a graduate diploma or masters program in bioinformatics. The cost is AU$20K upwards, and I look back on the fist full of degrees I've already accumulated and think that maybe a more direct approach would be warranted. Although a night class can provide the structure and commitment to acquire the new skills required to work in the field, I'm sure self education and on the job learning would be enough, given good mentoring. There is no doubt to me that this field is a rising star (unlike applied computational intelligence), even in the technology backwater where I live. I think a reasonable first step would be to bash out a series of blog post (reports) on the field in general, open problems, learning materials, and local/world renown institutions, just to boost general familiarity with the field before more substantial (costs) steps are taken.
- Canvas (HTML 5.0). The new canvas element in HTML 5 is a graphical context allowing free-form 2D and 3D graphics in the browser (written in javascript). The demos have had me excited for a while now, but it is libraries like processing.js that have pushed me over the edge. Rather than hacking on native iPhone apps, I would much rather realize my dreams of a distributed creature morphology evolution simulator (game) in the browser capable of running of any web-capable device. I'm sure there would be some hard work getting the physics engine (collision detection solver) running fast enough in interpreted javascript, but I believe the problems are solvable, even if one resorts to faster interpreters and faster CPU's to drive them.
- LISP. Frankly, if you're a programmer you will eventually come to realise LISP is awesome. Although I've started my pilgrimage, I am a long way from mastering, let alone being productive in a dialect. I need to stop dancing around and either build something big and real in the language or to work through a book end-to-end (practical common lisp of course). Both of these strategies have worked for me before in rapidly acquiring new languages. I was thinking of dedicating the Christmas break to one of these tasks, we'll see...
- Stackoverflow. I consume a lot of podcasts during my commute and while running. I subscribe to itconversations, and occasionally a stackoverflow podcast will find it's way into my playlist. I just about always skip it. The guys maybe smart dudes, or a the very least write about interesting things on occasion, but they produce a really crap podcast. Anyway, their joint venture - the stackoverflow site - is a pretty kick ass programmer Q/A repository. I have not contributed to it at all, but I have started searching various keywords and tags and I think I could contribute a lot, some of which might even be coherent or useful. What's holding me back is the investment. Each answer would be about the same investment as would be required for a small wikipedia entry (which I've been known to write). My problem is whether or not there is any return on that investment (as I think there is with wikipedia). Is it ego-fulfilling research (like making a slashdot/reddit/hackernews comment) or is it truly a contribution to the a community (however niche)?
- Algorithms Book. I feel guilty. I want to write and publish a book (thesis doesn't count) before I turn 30. My inspired algorithms project was my concerted effort this year towards that goal, a project I started this time last year while job searching. I still have a bunch of copy (in latex) and code (in ruby) on my drive, some of which is on the web. I am less convinced anyone will want (pay for) the book, even after my efforts to optimize its content. Nevertheless, I do still believe it's a book I would want to have on my desk about 5-10 years ago. A book for a hack of a programmer interested in AI. I need to get off my ass, cut the scope of the book, and push out a complete 1.0 to friends (the web?) for comment, or weasel out and kill the project.
- MapReduce and Evolutionary Computation. The map reduce paradigm for distributed problem solving is interesting enough, but I've noticed more and more machine learning algorithms being ported to the approach to run on platforms like Hadoop. I am specifically interested in the approaches to map evolutionary algorithms to the paradigm as my intuition tells me there are a myriad of ways this could be achieved. I want to read the literature and bash out a few ways in small case studies (ruby) and see if there is something truly interesting to it, or if it really is equivalent to the classical parallel approach. New computational paradigms typically open up interesting avenues on classical approaches, and this has happened before with EC with the implementation of the algorithm to multiple-CPU and multiple-machine computing platforms in the 80's and 90's resulting in a sub-field of diffuse and parallel evolutionary algorithms.


