Nov. 12, 2010

I've recorded the sixth tune, "Oval BA", for the squeakyshoecore algorithmic acid album. Click the shoe to have a listen!

Here are some articles that nice people have written about squeakyshoecore:

To use GarageAcidLab (the engine used to make squeakyshoecore) on your Android phone or on your PC with Pure Data, click here:

Nov. 10, 2010

amulet design 1

amulet design 1

amulet design 1

amulet design 1

amulet design 1

amulet design 1

amulet design 1

amulet design 1

amulet design 1

Printed in stainless steel and plated in gold by Shapeways.

Nov. 6, 2010

Update: There appears to be some weird bug on WebKit (at least in Chrome) making objects randomly not get drawn in both demos. Will have to figure this one out!

Update 2: The WebKit bug is now fixed and was due to the strage fact that Array.sort is unstable in WebKit - one to remember. Have fun!

jsGameSoup logo - a bowl and chopsticks

Here's another demo built using my HTML5 and Javascript game engine, jsGameSoup.

I also updated the AsteroidsTNG demo to support collisions so that the ship no longer passes through the asteroids.

I'm finding it pretty fun to fly around this almost infinite asteroid field finding interesting little places amongst the virtual space rocks. I really want to add some kind of multiplayer component to this demo.

After these changes jsGameSoup now has the following new features:

  • Collision engine with support for circle, poly, and axis-aligned bounding-box (rectangle) collisions.
  • Sprite engine which is capable of basic animation.
  • Seedable random number generator, useful for procedurally generated worlds where you want the same seed to generate the same thing for everyone every time.
  • Basic support for touch on WebKit browsers (like in the iPad and Android devices).

The collision, sprite, and random number engines are each simple and self-contained, and can be used independently of the jsGameSoup library by just including the respective javascript file in your project. If you use the library though, you also get cross platform events and robust entity management thrown in for free.

Unfortunately I still haven't updated the documentation or the jsGameSoup page to reflect these changes. Whoops!

Oct. 29, 2010

When people try to engage me in iPhone vs. Android arguments, I usually concede to almost all of their pro-iPhone, anti-Android arguments. The iPhone user experience is paramount. I do not know of a greater technology user experience than that of using those hand held Apple products. Android is a total ghetto.

The problem for Apple is that all of the interesting things come from the ghetto. Hip hop and punk rock came from the ghetto. Apple does not have a single gram of punk rock in it's entire being - they are the furthest possible thing from punk rock in the technology world. Apple is the U2 of the technology world; bland, pleasant, and pushing all of the right buttons to make us feel good. Apple is easy, and easy is utterly boring.

Examples of this are clearly emerging now into mainstream conciousness. Brilliant apps which simply can't work on the Apple platform because of the restrictions placed on them there, are emerging on the Android platform right alongside the multitude of hideously ugly, broken apps which are also emerging. This is called evolution. It's ugly, and complicated, and it is much better at optimising for survival. It's the exact same reason why Free Software (also a technology favela, upon which Android is based) has been so incredibly successful in the last 20 years.

Android is succeeding because it is the ghetto. Sorry Steve Jobs, you will never understand how people can reject your pristine perfect jail for the thriving, ugly richness of the software underbelly.

"I have an important message to deliver to all the cute people all over the world. If you're out there and you're cute, maybe you're beautiful. I just want to tell you somethin' - there's more of us UGLY MOTHERFUCKERS than you are, hey-y, so watch out."

-- Frank Zappa

Oct. 18, 2010

If you want an easy interface for someone to input regular data, you might like to use a Google Spreadsheet. You can extract the resulting data from the spreadsheet into Python using this code snippet:

import urllib2
import csv

url = GOOGLE_DOC_URL + "&output=csv"
request = urllib2.Request(url)

cookie_handler = urllib2.HTTPCookieProcessor()
redirect_handler = urllib2.HTTPRedirectHandler()
opener = urllib2.build_opener(redirect_handler,cookie_handler)

u = opener.open(request)

data = list(csv.reader(u))

You will need to share the document as "Anyone who has the link can view" because there is no authentication happening here. The variable GOOGLE_DOC_URL should be the URL shown in the "Sharing settings" panel. The final variable 'data' will hold an array of arrays of strings - the spreadsheet values are the strings.