Commando
When I was at University, I started writing a game called Commando. I used the SDL graphics library with C++ and developed on Windows.
I followed a tutorial that taught the basics of movement and input. I drew some horrendous graphics of some flat buildings and a stick man holding a gun.
I got the basic stuff working so that the protagonist could move, jump, shoot and lob grenades. I added a shooting star that periodically appeared in the night sky, stars that came out, distant backgrounds that scrolled by more slowly than the buildings in the foreground. I added fountains, grenade explosions and ricochets, all based on particle effects. I added gravity.
However, the protagonist was alone. He had no one to share these beautiful things with, or kill. My development stalled, but I’m not sure why.
I’m better at finishing things these days: playmary.com, theperceptron.com and my band’s records are all complete and consumable.
However, writing games is different to making websites and writing songs. With the things I finish, the dependencies are minimal and the units self-contained. Web pages may call on central functionality, but they can be written in relative isolation. My songs have different, minimally related sections and often change key and time-signature.
Games have a few central areas of activity - the input manager, the renderer, the object update loop - that are fed by hundreds of integrated parts. They are more like people.
Why do Capistrano deploys of git code take so long?
- I am a bumbrain.
- I am using git. Thus, the whole repository, including all previous revisions, is kept in a folder called .git which lives inside my local code copy. A Capistrano deploy involves uploading a tarred copy of the project via ssh to the server. This is slow.
I plan to dump Capistrano and change my deployment process to: log into server, git pull from Github (only a diff, so super quick), restart mongrels.
Collaborative zombies
Most recommendation systems that one sees on the internet are based on collaborative filtering. The idea here is that if Johnny, Jenny, Joseph, Julian and Gilly all like A and B, there is probably a connection between those items. Thus, if someone likes A, you can recommend them B.
There are a couple of problems with this technique.
First, it skews itself towards popularity and consensus. If A is a really popular thing, it is more likely to appear in people’s likes and, thus, more likely to be recommended.
Second, the calculations are computationally intensive. At the absolute worst, you could have (items owned ^ users) links to explore. With a modest 100,000 users, each with a tiny collection of 10 items, this would equate to a maximum of 1.0 × 10^50 connections.
Both these problems can be somewhat mitigated. If you want to err towards the eccentric and the niche, you can lower the threshold of people required to deem two items connected. So, maybe you would only require Johnny, Jenny and Julian to like both A and B in order to connect those items.
If you want to make collaborative filtering less computationally expensive, you can do a couple of things. First, cut out low-frequency items. Second, process data in chunks. Doing 50,000 users in one chunk and 50,000 in another will lose you some connections, but it will also massively reduce the computational load.
Recently, I found a way to extract user music library data from Emusic. First, I found that if you add an Emusic user username onto “http://www.emusic.com/profile/ajax/downloads/artists.html?nickname=", you get back a list of artists by whom the user has downloaded songs. I compiled a corpus of common words, first names and last names. I wrote a script to fuse these two things and ended up with 382,808 music library artist entries for 15,155 users.
I wrote another script to extract 588,425 artist connections from this data. To deem two artists connected, the script required that they occur together in at least twenty people’s music libraries.
As some of you may know, the perceptron uses a number of music recommendation data sources. Each has a weight that is based on the approval that users have shown the data source’s recommendations. At the moment, the Emusic data source’s weight is hovering around 12%. The top two sources each have weights of 34%. However, Emusic’s weight will increase as its recommendations are exposed to more users.
One of my favourite things about the perceptron is that the vast majority of its data sources are based on conscious human opinions. The data comes from gig line-ups, mixtapes, human recommendations, artist admiration, record labels and mp3 blogs. I find collaborative filtering a little depressing: it’s just SO mechanical. One way to a) further improve its efficiency and b) make it a little more human would be to cluster users based upon demographic indicators, and then do the filtering. How ace would it be to be able to do collaborative filtering on the music libraries of everyone who went to the same gig? Or everyone who is the same age? Or groups of people who are friends with each other? Or who all like the same film? If last.fm aren’t doing this, they are fucking crazy.
The icon
For me, every idea and dream and activity has a tableau associated with it. Like, when I think of making music with my band, I think the records I’ve already made. Or, when I think of having children, I think of lying in bed with my baby and my baby.
When I think of the central idea of the perceptron, I think of a giant web of connections between artists and the tendrils of recommendation spidering out from Des Ark to other bands I love.
However, these are idealisations and simplifications. More accurate versions would be simultaneously rushing my daughter to school and wiping her runny nose, sitting on a chair in my bedroom fiddling around on my guitar, a mess of pre-calculation and map-reading and planned routes.
Which is to say, things are beautiful and theoretical in the mind and then get ugly and practical.
So, in order to calculate recommendations in reasonable time, the perceptron does a few things. Every link between artists has a grade. Fine. But it has to be precalculated. In most cases, spidering does not go past direct links from the starting point. That tenuous, five-leap link between two bands that turns out to be brilliant: bullshit.
However, sometimes, that practicality can bring beauty. The moment of hitting upon a beautiful new melody. Your daughter saying, “I love you, Mummy”, as she gets out of the car. Exploring indirect links that go via artists that the user has said they like and getting recommended Converge from Des Ark.
Zach Hill, The Present, Trencher
Trencher were kind of good, but they only really have two songs: the doom one and the grind one. Here are the band:
The Present were half avant garde plinky plonky noise and half echoed-out rock music. The drummer drummed on his knees. The band had a wonderfully large amount of equipment on stage with them:
Zach Hill, the drummer from Hella, was the closest I’ve come to religious music. Over the last few years. his drumming has become a boring party trick. He’s like someone who still thinks the war is on, but instead of the war, it’s Spencer Seim.
However, he was born for his solo project. There were echoes of it in his Nervous Cop record with Greg Saunier of Deerhoof. However, what achieved with that record relied on cut-ups and post-processing. Now, he achieves it on his own, live.
Don’t listen to the record. There is some kind of switch in the brain that just like offers an unsubstantiated explanation for a purely audio experience of Hill’s drumming that is something other than the truth which is: he drums really fast. So, see him live, or get halfway there by watching a video: