The iPhone and toilet paper freedom

November 11th, 2009

Geoffg is playing a lawyer in declaring his interpretation of the GPL as the truth, lambasting the Free Software Foundation for not updating some old articles, accusing them of spreading FUD and declaring the iphone as a missed marketing opportunity.

He makes the mistake however of reading the GPLv2 as a definition of freedom, rather than an implementation of it. As this fine person pointed out last year, it’s no good being able to change software if you can’t run it. This is the freedom to change software and use it as toilet paper.

Fine, maybe you can run GPLv2 software on your iphone, but you can’t exercise all the freedoms which the FSF campaign for. According to them, GPLv2 software in closed DRM is exploiting a loophole which GPLv3 was in part written to close.

I can see it’s difficult for people to reconcile their love for free software and their love for Apple products, but maybe it’s best to be mindful of the fact that you’ve bought a computer that you can’t run software on without the permission of a large corporation.

There’s a lot of weirdness in the computer music community around this. RJDJ is a port of the free PureData language to the iphone. Many of those involved are free software developers, but have to give up all their rights to RJDJ, a venture capital funded company. RJDJ in turn license the code back to them under the GPLv3. This means they are free to change and run the code under open operating systems, but not on the iphone. This is weird, using the GPLv3 as a firewall to protect commercial interests on a closed platform, while exploiting the work of a free software community.

Just to clarify; I’m not saying that people shouldn’t run open source software on the iphone, particularly when a permissive license like MIT or BSD is involved. I’m just objecting to ignorance of the FSFs definition of software freedom, which I happen to subscribe to and which is incompatible with the iPhone. I find the RJDJ case weird, but while I know of at least some cognitive dissonance in the RJDJ team, I don’t know that any of the authors are otherwise unhappy with the situation.

UPDATE: Michael from RJDJ contacted me to point out something I got wrong. RJDJ don’t release their whole iphone port of PureData, just part of it — rjlib. This is indeed released under a GPLv3 though; if you want to contribute towards rjlib, you have to transfer your rights to RJDJ or fork the code.

BTW they are also releasing a rather nice looking cross-platform gui-less version of PureData under the LGPLGPLv3 and LGPLv3 called zengarden.

Patterns of Movement in Live Languages

November 11th, 2009

I’m giving a paper at the CHArt conference in Birkbeck tomorrow. I’ll edit it a little after the conference for publication, but here’s a draft of the paper, here’s the presentation (which I’m currently editing) and here’s the abstract:

Programmers do their work by writing — a piece of software is a structure made from words. These structures are generally too big to comprehend in their entirety, so programmers instead focus on small detail and overall plans; zooming in to find parts to combine and simplify and zooming out to find places to build. But this is not architecture: these structures are more like machines than static buildings. A programmer’s work is set in motion by a program interpreter, with information flowing in and around processing units before being directed outward in response.

Usually a programmer will write some text, and then step back to start it up, watch it work and decide upon the next edit. Live coding programmers however work on their software while it is running, as if they were modifying a machine without switching it off first. Because software is built from words, this is done by editing it as text, adding new routines or changing the character of an existing one. Such a change takes immediate effect, allowing fast creative feedback.

Where a written novel exists to describe human activity, written software exists to simulate it. Therefore the live coder can take the role of an artist, constructing simulators in order to generate patterns of movement, either as music, video animation or both. This can be done in front of a live audience, so that the process of writing software becomes the process of improvising music or video in performance art.

Programmers are finally taking to the stage. Introspecting and encoding their musical thoughts before an audience. A tradition of live coding has quickly formed where computer screens are projected, making the programmer’s reactions to their work visible. Questions of authorship disappear; the performance is live, the programmer improvising through the medium of written language.

Acid sketching

November 8th, 2009

I’ve been thinking about visual languages and the morphology of symbols (as opposed to words) for a while. I had the opportunity to start putting some of these ideas into code at a really excellent openframeworks workshop this week, run by Joel Gethin Lewis and Arturo Castro.

Here’s what it does:

Makes the point nicely that symbols and spaces can intertwine.

Using opencv blob detection, the regularity, direction and area of the shapes map to envelope modulation, resonance and pitch. The drawing is then sequenced into a melody using the minimum spanning tree (from the boost library) of the shape centroids, where distance maps to inter-onset interval.

It also has a mode for projecting the red circles and highlights back on the drawing surface which worked well.

This is only the second thing I’ve made with openframeworks, and while I don’t really get on with the codeblocks editor recommended for linux, I’m impressed with how accessible it makes opencv and all that.

Update: sourcecode

Transferring

October 2nd, 2009
slub at shunt (c) Evan Raskob

slub at shunt (c) Evan Raskob

Tom Armitage wrote a nice wired article interviewing us (slub) about live coding.

I’m still working on my upgrade, hoping to be a proper PhD student by the end of this month…

I’m excited to be organising an evening called transfer at Goldsmiths, London on Friday October 16th.  It’ll be fantastic with all my favourite electronic music superheroes — Leafcutter John, Finn Peters, Yeeking and friends, Sarah Angliss as well as slub. Tickets now on sale!

Congratulations to those who made it to the end of the hackpact, sorry for breaking my part of the bargain but I really had to get this draft done, and couldn’t justify taking time away from my family without also taking time away from my nightly practice.  Looking forward to spending time on other parts of my life this month, including a rather looser aim of recording and editing one track every week.  If I manage it there’ll be an EP at the end of it.

Nice drunken live coding at shunt last night, the atmospheric photo from Evan is about all the documentation though, got to fix that for the next gig…

hackpact week 4

September 24th, 2009

Ok the third fourth week of hackpact actually started yesterday, but I didn’t think my contribution then warranted a new entry.

hackpact23

Bit of an error with the screencast, see if you can spot the problem. Pretty happy with the sound though. (will take a while to appear due to vimeo’s encoding queue)

I’m musically humbled by my son who has taught himself how to play the guitar and sing the blues. He’s two today (24th), happy birthday Harvey.

hackpactoops

Well I made a blueberry birthday cake for young Harvey on the 24th, which is a hacklet at a push, photo when I find the transfer cable. No creations at all on the 25th or 26th, I was away for the weekend and thankfully didn’t get a moment with my laptop. I did record a session last night thought that I’ll upload at some point…

The hackpact has been really good for making me get bored with my software and develop it further. I need some longer term development time now though to play out some of my frustrations I’ve been feeling over the last month. In particular using a command line interface is feeling like a big limitation, I need to express relationships over more than one line. Maybe I can adapt the yi haskell editor for my needs.

Next month I think I’ll switch to making a fixed recording every week. I’ve never really made fixed recordings so should be interesting.

Now I’ve fallen off the hackpact wagon I’m not sure if I’ll be able to totally get back on, particularly as I need to finish my PhD upgrade report by the end of this month. We’ll see..

Hackpact week 3

September 16th, 2009

It’s the third week of the hackpact. A few have fallen by the wayside, others are doing impressively well. Adam is doing great learning supercollider, Sam is cracking away on a diverse range of ideas, Joe has put a lot of himself into his involved hacks, poetry with a smell of solder, Gabor pushing fluxus in wild new directions every day, Scott still soldiering on with ChucK every day, part of the inspiration for the hackpact and now part of it, and Cormac‘s easy sounding but in reality clearly really challenging rule based photography project that he’s tackling with increasing need for imagination. Honorary mention for Dan who threw himself at the project with some ace daily projects before going offline for a bit, hopefully he’ll rejoin us.
I hope I haven’t missed anyone, sorry if I have — let me know.

hackpact15

Another screencast with some good moments and also a couple of bugs found… I realised I forgot to switch off cpu scaling, so there might be more jumps in the recording.

hackpact16

Preparing for the haskell users group talk, so I tried to make some ultra quick demos of features of my pattern language. Failed really, I kept getting distracted at making the patterns sound better rather than demonstrate how they work, so I will likely just do a live demo instead.

The results are on youtube — I’m doing the presentation in google docs, and youtube is the only way of getting videos in there. In fact this is the only way I found of making a presentation with videos in under linux. Video support in openoffice sucks and didn’t work anyway, the html based s5 gets all slow and glitchy with videos in, the video library used in the python based bruce wouldn’t play any video I found, etc, etc…

hackpact17

Got through the haskell users group talk in one piece, happy with it actually. I managed to do some short sub-minute demos for it today which I think made it easier for people to follow, and I think count as today’s hackpact. Here’s the final presentation in full:

hackpact18

Uploaded my current Haskell stuff. Not very useful at all without instructions for how to install and use it which I’ll get to soon in a proper release, but some might be interested to read through the Pattern module at least.

Big shout out to Kassen, while he is behind on documenting his hackpact stuff he assures that he’s still doing daily hacks in the background. Hope to hear more from his side of our acidpact soon.

I’m pretty tired, going to try and make a new screencast tonight nonetheless.. Ah, here you are. Got rid of need for explicitly calling parser by using the overloaded string literals extension, thanks for the tip Ganesh.

hackpact19

Today’s screencast is here, although it’s not all that. No update tomorrow, we’re off to do some live coding at Plymouth Planetarium, documentation will hopefully surface eventually.

hackpact20

Well the planetarium experiment went well, hopefully will turn into a tour. Some documentation to appear sometime soon.

hackpact21

Too tired to make music, so worked on a poster design. Ended up too gloomy, to rework.

hackpact22
[[blue, blue [lightblue lightskyblue lightblue, lightblue lightskyblue lightblue ~] blue, blue], blue lightblue ~, blue]

Loebner prize

September 9th, 2009

GoldPrizeAMTNote: this post turned out to be controversial, if you read it be sure to read the comments too, particularly this one.  This comment on reddit is interesting too.

Here’s an annoying thing.  Alan Turing was a great thinker and forefather of computation, and certainly deserves an apology for the inhumane way he was treated.  The Loebner Prize, known as the “Turing test” is a competition supposedly based on predictions Turing included in a paper on machine intelligence.

The annoying thing is that the Loebner prize completely misrepresents Turing’s paper.  Embossed in the prize medal shown is the question “Can machines think?”  Also, the introductory text on their website states:

In 1950, in the article Computing Machinery and Intelligence … Alan Turing asked the question “Can a Machine Think?” He answered in the affirmative …

Did he?  Ok, so lets look at the first sentence of Turing’s paper:

I propose to consider the question, “Can machines think?”

Note that he is considering the question, not asking it.  In that same first paragraph, he goes on to consider trying to define the words ‘machine’ and ‘think’, and concludes:

… the meaning and the answer to the question, “Can machines think?” is to be sought in a statistical survey such as a Gallup poll. But this is absurd. Instead of attempting such a definition I shall replace the question by another.

So, Turing felt that the question “Can machines think?” was absurd.

Whoever wrote the Loebner text has perhaps read the first sentence of this paper they describe, but not got to the end of the first paragraph.  Based on the resulting misunderstanding they have stamped the question that annoyed Turing so much right there next to his face.  This amounts to posthumous intellectual torture, and disrespectful to the work of a fine man.

A comment thread removed after it went nowhere and turned into childish name calling.  Jeepers.

Hackpact documentation (week 2)

September 8th, 2009

Following on from week 1 of my hackpact hacks, here’s

hackpact8

I had this feeling that a nice visualisation of polyrhythmic structure would be to plot patterns in a spiral. I finally got it to work, and here’s the first few results, rendered with cairo in Haskell:

{red blue orange purple, yellow brown pink}
spiral1
[red blue orange purple, yellow brown pink]
spiral2
{orange tomato, blue ~ purple ~ ~}
spiral3
{orange yellow, blue green ~}
spiral4

Where colours co-occur, they’re mixed, thanks to the lovely Haskell Colour library.

I was surprised by the rhythmic gestalt these give. In retrospect I realise that Mick Grierson would not be surprised at all by this, and neither would John Whitney. Now I’m a spiral lover too.

I’ll release the code along with the rest of my pattern library next week.

hackpact9

Played around with spiral rendering, but came to conclusion that the spiral mapping itself was beautiful and not the patterns I’m trying to visualise, because just about anything you put into it looks good.  Although you can see the pattern length in the spiral, if you mix different pattern lengths into a polyrhythm, it’s very difficult to perceive more than one pattern length, one comes across more strongly than the others.  Perhaps a peano weave would be better, but I think I’ve gone far enough with this, back to music tomorrow.

beautyinthemapbluetree

hackpact10

My lack of headphones bit me so I couldn’t make music tonight.  Instead I played with context free art, which I’ve been meaning to do for years.  No great masterpieces, but healthy, grammatically constrained fun.

output

round.cfdg

hackpact11

Ok back to music finally.  I’m going to try to add a function to my pattern library before making a quick screencast of the first time I use it to make music patterns.  This time I made a ‘breakbeat’ function, which takes a pattern of integers and uses it to trigger playback positions in another pattern.  I also found a bug which breaks things at the end.  I could add exception handling so these bugs wouldn’t break everying, but hey, it’s good to livecode on the edge.

hackpact12

Added a couple of things:

  • stuff to my ghci interface so I can plug one active pattern into the composition of another.
  • an ‘onsets’ function that turns a pattern into a pattern of bools, true for the first beat of a phrase.

Used these things together to apply functions to effects that are responsive to the sound sample pattern. It takes me a while to work out how to do it, and the end result isn’t particularly musical. I’ll be playing around with this some more, but in the spirit of showing the first time I use a function to make sound, here’s the screencast.

(or it will be once the vimeo flash conversion finishes)

hackpact13

Implemented and played around with bpm patterns. Also implemented simple ‘tween’ pattern for linearly tweening between two values over a given period.

Screencast of first uses here and
here

Like yesterday’s, not particularly musical…

hackpact14

Did some good live coding practice for Sunday’s gig in Plymouth with Dave. We didn’t record anything though. Instead for hackpact I made a swirly processing patch while thinking about pattern visualisation.

Knowledge futures

September 4th, 2009

I’m very happy to be putting together the evening programme for knowledge futures on October 16th at Goldsmiths. Excitingly, my superheroes Leafcutter John, Finn Peters and Yee-King and Spacedog UK (Sarah Angliss + co) have agreed to play. I’m going to play too as part of slub.

Details are coming together over here. Buy your ticket early!

Hackpact documentation (week 1)

September 2nd, 2009

I started my hackpact month last night with this screencast, playing around with time offsets and functors.  I think the audio gets *slightly* ahead of the video, probably due to some jack-audio drops.  If for some reason you want a better quality version you can look at the source mpeg-4 file on blip.tv.

I was happy with applying a sine wave to the time offsets, giving a bit of swing to the rhythm.  Combining that with a straight (pure 0.0) pattern grounded it nicely I think, so the rhythm was played straight on top of shifting it forward and backward in time.  (although this is live I can play sounds slightly in the past due to a 0.2 second system-wide artificial latency).  I also played with a simple chorus effect by having lots of offsets on top of one another amongst other stuff.

Not sure I like the end result of this as music or not, I’ll listen with fresh ears before I decide on that.  But then I think the point of my hackpact is to practice live coding rather than doing great music so that doesn’t really matter.

hackpact2

For this one I used nekobee, it took quite a while to get haskell talking to it over DSSI (a nice way to talk to synths over OSC, but it turns out it uses a vaguely non-standard tag to send MIDI bytes).  I quite like the results although there’s much to tweak and I didn’t get the levels quite right.

hackpact3

Baas and bleeps… Trying to focus on the music rather than the language for this one. UPDATE: I screwed up the panning, and have updated the below with a mono version. The original stereo version is over here might be better quality due to the transcoding but the panning is annoying.

[Rather than choke up my loyal reader's RSS feed I'll add further day's hacks here on this post rather than make new ones, unless I do something major (like actually release some software).]

hackpact4

Oops, forgot to update the blog with this yesterday. Here’s some minimal acid from the 4th.

hackpact5

Getting harder to make myself make a screencast but I’m enjoying it more and more. Tried going extra slow for this one. Switched to vimeo hosting due to transcoding problems.

hackpact6

Tried going extra fast after the previous extra slow offering. Some nice bits towards the start but didn’t manage to keep it up really.

hackpact7

A low point today, have some pattern visualisation stuff I wanted to get done but didn’t manage to get it working tonight. Polar coordinates too much for my tired brain. I did manage to make a start on slides for my haskell user group talk next week though, very much a work in progress but any feedback much appreciated. Not a hack but bah.