Thursday, February 25, 2010

My Projects

My current projects include:
Delphi, a tool for iterative refining lists of priorities: a web app fronting a cute algorithm for merging lists of priorities. But the real jewel here is using node.js on the server side, which gives me validation code shared by the server and client, no more duplicating that logic; and, by structuring code as a pipeline and exposing different pipeline entry points on the server I can migrate processing between the client and server.

AudioTools.js: an audio synthesis library, following the model of generating wave forms in the client and dynamically embedding them as Base64 encoded data URIs. In it's heart of hearts this is a hack because the audio support of browser clients is sadly neglected.

The Guitarist's Ear Trainer: one of the key musical skills is being able to identify the sounds you hear, but most of the very good software is about naming the sounds, I want to make the naming of sounds a secondary concern, going directly from sound to identifying where fingers go on the guitar neck is my priority. And I want it to work on mobile phones so I can get some practice in while I'm travelling to work.

And some code I've cobbled together from various sources that I may put out there, (I'm reluctant because I'm relying on cut and paste from jQuery, prototype, and underscore):

patch.js: a library that extends the standard classes of earlier versions of JavaScript with the basic functions you find in the most up to date versions. I depend on good list processing functions, and they are part of the latest versions of the language, but there are dozens of names given to them in various libraries, and a philosophical reluctance to extend the core classes. Generally I don't like polluting the core classes and the global object, but I'm comfortable with extending the core classes the now established standard names.
Looking into the future:
GA-FLRB: a fuzzy logic rule base with a genetic algorithm system. My honours year project involved writing a cellular automata system with an FLRB as the automata, and neat little language to describe the FL rules, still have a soft spot for such systems.

JavaScript

Love it or hate it JavaScript is one of the big languages.

I like the Tomas Fuchs paraphrase of Bruce Sterling: "JavaScript is the duct tape of the internet". With CommonJS and the growth of server side JavaScript, it will be much more.

It's a language that quietly accepts laziness and ignorance, saving up the pain so that it can all rain down on you at some unforeseeable moment in the future. It's a language that rewards discipline: I recommend developing discipline.

JavaScript has become my language of choice, for all it's imperfections, because:
  • It's the only language that's available on all the platforms I want to target: major mobile phones and desktops.
  • It's remarkably simple, scheme in C-drag, so I focus on getting things done rather than fooling around with the language and tools.
  • I like the forward facing side of development, it's a language that's frequently used to tune the user experience and that plays to my motivations.
Of course there are essential tools, work flows that need to be optimised, and developers skills that haven't been widely applied to JavaScript that should be:
  • Editors and IDEs; test frameworks facilitating the writing of tests and the execution of tests; debuggers and profilers; libraries and toolkits; command line JavaScript implementations.
  • Isolation of dependencies: the chief dependency is with the DOM, the second is with DOM wrapping libraries, the third is with widget libraries, all of which should be wrapped so that you're working with logical elements rather than (other people's) stuff on your page.