Post about your for-fun programming projects here!

OK, this is for nerds who are so nerdy as to do programming for fun. If you really, really, really like your day job, you can post about it here, but mostly this is for non-work projects.

So. What are you hacking on, and why, and how are you coding it, and what rocks, and what sucks? What oddball games or random toys or tools are you noodling with?

I’ll start. I’ve posted periodically here about my dream live-looping “theremin for Ableton” project. Here’s the pitch: imagine you’re standing in front of your TV, being watched by Kinect (hooked up to a Windows PC). In one hand you’ve got a microphone, in the other hand a Wiimote. There’s a sphere in the center of the TV. You point the Wiimote at the sphere and pull the trigger; it turns red. Now you’re being recorded. You sing a measure or two and release the trigger. A second sphere splits off of the center one and floats off to the side, vibrating in time with what you sang. That second sphere is the sound you just made. You can point at it and press A to select it, then you can warp its sound (pitch, tempo, whatever) by pressing the cross-pad in different directions and waving your arms around. Hold the trigger while doing this to make the warping stick (e.g. to record the effects you’re applying). Point back at the center sphere (which represents your microphone) to apply effects to your voice or to record additional loops.

Basically, this is a gestural direct manipulation Kinect/Wiimote interface for doing live-looping performance, where the sounds you make become visible things you can grab and further manipulate. It’s kind of like a holodeck symphony, implemented as a Windows XNA app.

Ultimately I’d like the sound spheres/blobs to be colorized based on an FFT spectrum analysis (so you can visually see what the sound sounds like), to have a beat indicator so you can beatmatch different sounds, and to have sound effects alter the visual appearance (apply reverb and the sphere gets some mirror-image copies; apply stereo and the sphere distorts to show where the stereo is going; apply pitch shifting and watch the spectrum change). The PC should also have two video outputs, so you can perform in front of an audience, facing the audience, with a monitor in front of you (showing an over-the-shoulder third-person Kinect wireframe and the sound spheres you’re conducting, including various UI elements – this is what you watch while performing), and a projector in back of you (showing an audience-viewpoint rendering of the same scene, with your wireframe conducting the sound spheres, and considerably more flash and dazzle). The audience should be able to see as well as hear the whole soundscape you’re creating.

It’s been very slow to get going, partly because I know almost nothing about audio processing. So over the last year I’ve been researching Ableton Live (which is cool – I even splurged and bought a copy – but which doesn’t seem to have the real-time flexibility that I want for this), ASIO for low-latency audio, various random audio and FFT libraries (NAudio, Math.NET), ways to get Wiimote data to a PC via .NET (WiimoteLib), and so forth.

I’ve also been thinking hard about how the hell to architect this thing so that it’s reasonably pleasant to prototype with. Got a tiny hierarchical state machine library and a tiny XNA scene graph library, developing plans for how to represent the evolving performance (so it can be saved and replayed), that sort of thing.

I asked around about how to use ASIO from .NET recently, and got two solid pointers to the BASS audio library, which truly seems like the shit. Dropped their sample code into my XNA game app and it worked the first time. Documentation seems good, forums are active, this thing looks like it will save me months. So that’s awesome.

The one big remaining missing piece is the Windows Kinect SDK, which is supposed to be out more or less anytime now. I also need to buy a bluetooth receiver and an actual Wiimote. Once I have those things, all the pieces will be in place, and it’s just a matter of flinging a lot of C# around and prototyping like hell while trying not to get my goddamned right-hand coordinate spaces mixed up. (I have never been that much of a math nut…)

Anyway, that’s the hacking project I can talk about. There’s another one I’m being mentored on at work, but that one is still hush-hush.

What about you all?

I always have too many things going on at once, so a while ago (in a fit of procrastination) I’ve started coding my own task/todo/project management/brain mapping thingy so that I can keep track of it all, heh. I’m not sure it will be of any help, I simply enjoy creating tools way more than actually using them.

I wish I had more time and motivation to work on side projects like that, especially as I wind up doing less and less actual coding at work (I don’t wanna be a manager!), and there are a few gaming ideas rattling around in my head. But between work and also playing games, it feels like I ought to be getting away from the computer more, too.

I’ve been working on a project to create fake countries with detailed maps that look like they were taken from Google Maps. Why? Dunno. I’m having a hard time with the coastline generation and the hill shading. I not a programmer by trade and have no official training, though – it’s just a hobby. I’m working on this in Obj-C and Cocoa.

I also am working on an epidemiological model of malaria spreading in a village. Working on this in Processing.

Ooh, epidemiology. I always loved cellular automata – my biggest teen hack was a version of the Game of Life, with the display code in Applesoft BASIC and the core recalc loop in 6502 assembly. Bet Processing is fun!

Fugitive, I know what you mean. Game playing has taken a huge hit lately, there’s not enough time to do both. I got inspired by my boss, who does side hacking purely as a creative outlet. (And also by Beardyman, who makes the kind of music I wish I could come close to making… if I finish my project, that is…)

Candide, what language are you working in?

I want better notification for gigs by bands I care about. I’m sick of discovering them two days before (or worse, two days after). I’m writing a website that will email you with information whenever a gig is announced by a band you care about in your city.

The project is a good opportunity to try writing a web-app in “modern” python. I’m using Python 3, an ORM (so data from the database is represented using native python objects) and an undecided templatig system. It will all be exposed to the user using a Python webserver too.

I’ve finished the core data model, so now I have to write all the edge bits and stick them on:

  • Website frontend
  • Email system
  • Gig finder

Hope to have the website up within a week, once that’s done this will start feeling like a project with an end in sight.

Wow, I want that. Hook me up with a beta invite please! Are you going to host it in some cloud or other? Single server or horizontally scalable? What’s your web-scraping (gig-harvesting) story?

It’s a computationally trivial project, so Single Server Forever scaling. It will just go on the same machine as my other websites.

Gig scraping is going to be the hardest part of the project. I’ve written a HTML scraper once before (in Python) (to get my mobile phone account balance) and it’s not fun. Some gig guides use javascript too, but hopefully there’s a simple backend URL I can hit. There are multiple gig guides per state and then a small number of global ones (label sites,, etc). So that’s a lot of custom parsers :)

Oh, I’m a Smalltalk guy whenever I can get away with it (mostly using the open source Squeak), the web framework is called Seaside and for storing my data I’m using the comfy CouchDB.

Can’t you use Beautiful Soap? Or are you writing it from scratch for fun?

Candide, that’s awesome, your project involves your squeaky couch by the seaside.

Yes, I’ll be using BeautifulSoup. But HTML parsing is just another form of using code to parse human readable content: your code writing is trial and error of the worst ckind, and when you’re done you ar eleft with unreadable code that needs to be rewritten every few months as the data format changes.

A question for RepoMan: What the heck inspired this project? Actually, it’s too big to be a mere project, you must pause, lower your voice and say “…vision”. How long have you been sitting on this idea? A lot of the pieces have only really appeared in a home-usable form in the past few years (wii, kinect, low latency audio). Did the idea appear now too or is this a high-school dream?

Last serious home programming project I undertook was an in-engine object placement editor for VtM: Bloodlines. Imagine an incredibly lame command-line driven version of Garry’s Mod. At least it’s been useful to the modding community, since last I heard no publicly available version of Hammer is compatible with Bloodlines maps.

At my crappy job we use windows live chat to communicate but general Internet use is forbidden.

So I am working on a windows live chat bot that uses the tapatalk API to let me browse qt3 from within windows live messenger.

Published it about a month ago. Sales aren’t great, but I’m taking a little time off before doing things like marketing, a free ad-supported version, and so forth.

This was my learn-to-program iOS project. It’s a solitaire game that’s popular in my mother’s family, but which I’ve never run across anywhere else. I got it to a working state, decided that I’d never convince anyone to play it, and never put in the work required to polish it up enough to put on the app store.

I go through periodic phases of playing it obsessively. It’s a great game–very cerebral, unlike most versions of solitaire–and not needing to deal with two decks worth of physical cards is nice. The only problem is that it’s also very hard, which makes it tough to get into.

I start lots of things, finish none.

I made a Flash game last year, straight ActionScript edited in vi and compiled in the command line. I wasn’t too sure about the gameplay so I didn’t go any further after the basics were working. It was a match-3 / tower defense mashup that played better on my mind than when I had it working.

I also have the skeleton of an Erlang MUD server that talks to a Flash graphical client from last year.

Then I started learning Lisp and made a Lisp version of the 2D API I was using for the Flash game, but when I got a few features working I got bored.

Then I started on a Lisp compiler for the Zx-Spectrum 8-bit computer, got bored too when the basics worked.
It’s fun to watch (in a crazy nerd way): I have a Makefile in my MacBook that
-takes the Lisp source and calls my compiler, written in Common Lisp
-then takes the generated Z80 assembly and uses a third party assembler that with a few options produces a file simulating a magnetic tape with a BASIC loader and my code.
-and then finally launches an emulator that automatically boots, loads the tape and displays the results.

A couple months ago I made a javascript crawler using node.js that mined QT3 and presented some cool real-time SVG social network graphs in the browser via websockets.

Then a couple of friends have come to me with different startup ideas and now I’m dabbling in some Erlang for one of them and a small prototype in Rails for the other.

I find hard to keep going at things that take more than one week. I guess if I really thought they would be worth anything I might find the motivation, but so far I guess these things at least keep me sharp against my dull PHP-monkey day job.

I love procedural generation and simulation. Last year I played a bit with a little ruby script that generated fake place names that looked like real ones using Markov chains. You fed it a bunch of, say, real Russian city names and it came up with a bunch of words that looked like Russian cities but were just nonsense.

Post the qt3 graph! I want to see who’s best buddies with who.