It’s the morning after the night before. The night that was my Layer Tennis match with Jeffrey Kalmikoff. It had good bits, bad bits and things in between. Here’s how I saw it.
Well I have to say all day I had been pretty nervous about it. You realise that thousands of people are watching. Waiting to see if what you put up is good or crap. Weirdly I never get nervous when I speak at conferences. But this was different. This was new and totally outside my comfort zone. And that’s a good thing.
Having won the toss, I had a bit of a head start on JK. So I chose the theme of love with it being Valentines the following day and decided to fire up Nodebox, a lovely Python based application to create some code based visuals that would fit with this idea. I think it’s fair to say that it’s the first time Python has been used in a Layer Tennis match. Flocking motions of birds coupled with some other voodoo. It was all going well until some code that previously worked suddenly started throwing errors and I ended up having to rewrite it all, aided by the sound of cheezy lounge music on the stereo. Time was ticking. Why couldn’t I have just stuck to Photoshop - would have been much easier.
I fired my serve straight down the line and BAM - the tweet reaction from the crowd was wonderful. OK now I was a bit less nervous, but the fun/pain was only just beginning.
We then fired a few volleys back and forth, my next was a Photoshop thing, but by far my best shot of the match I think, came on volley 5. I cranked up Flash. Now it was time for a bit of fun interaction to truly get the crowd on their feet. Kapow. Slide action in your face and the reaction was wonderful. But oh dear. There was a big can of worms. And look out here comes a giant can-opener.
I was hoping that the theme of love would ride through the whole thing, but with volley 6, things started to get ugly. I’m sure JK was just ribbing me, in fact I know he was, but suddenly love had been kicked aside in favour of talking about technology. And within the crowd were people who jumped all over the “Flash must die” thing, blaming it for everything that is bad in the world. God I really thought we’d moved on from all that crap, but apparently not.
Volley 7 from me was pretty damn weird. Maybe it was the effect of the Manhattan. I should have tried to bring it all back to love, but instead I entered into hate (albeit tongue in cheek) and I created a tripped out pile of crap. But hey this is just a bit of fun yeah?
At this point the clock is like a big bad tick-tocking enemy. 15 minutes seems more like 15 seconds. There is literally no time to think. You just have to go with gut instinct, make something and fire it up. I think that some of the critics on Twitter would do well to bare that in mind.
Anyway.
Volley nine should have been amazing. It wasn’t. What I attempted to do was bring it on back to the love theme and react to JK’s iPhone thing. I think the idea was OK, but the execution was lacking. Later that night I realised what I should have actually done. But that’s all academic. No regrets. There’s no point.
And then it was game over. End of line.
The whole thing was a crazy ride which I enjoyed immensely. I think the thing that surprised me the most was how serious people took it. Some of the tweets were just out right vicious. But you have to take the rough with the smooth. It’s just human nature.There was also lovely tweets that made me smile. Regardless, I have a very thick skin - you have to.
Can I just publicly thank Jim Coudal for creating this wonderful thing called Layer Tennis. For me it’s as much about the creative process as it is about the end result. No over thinking things or chin-rubbing for hours in meetings. And I say we need more of that.
Below is the code I used for the first volley. If you’re on a Mac, grab Nodebox, and even if you’re not a coder, I encourage you to just play with the numbers and see what you get.
#layer tennis 02/13/09 The serve by Brendan Dawes.
#this code is for non-commercial use only!
#use with Nodebox (nodebox.net)
size (900,280)
colormode(RGB)
background(None)
boids = ximport("boids")
cornu = ximport("cornu")
colors = ximport("colors")
supershape = ximport("supershape")
global flock
amount = 10
update = 20
flock = boids.flock(amount, 0, 0, WIDTH, HEIGHT)
flock.goal(WIDTH, HEIGHT/2, 0)
paths = []
colors.shadow(alpha=0.1, blur=12)
clr = colors.rgb(1, 0.1, 0.1)
love = colors.analogous(clr)
def drawShape(x,y,factor):
strokewidth(0.5)
stroke(choice(love))
for i in range(30):
c = choice(love)
fill(c.r,c.g,c.b,0.5)
w = h = random(10,50) -i
m = random(0,3);
n1 = random(0.8,1.0);
n2 = random(0.5,2);
n3 = random(0.1,2)
p = supershape.path(x, y, w, h, m, n1, n2, n3)
drawpath(p)
def drawCornu(path,width):
strokewidth(width)
cornu.drawpath(path,tweaks=10, points=False)
for i in range (update):
paths.append([])
for boid in flock:
x = 1.0/WIDTH * boid.x
y = 1.0/HEIGHT * boid.y
paths[i].append((x,y))
if i == 0:
drawShape(boid.x,boid.y,i)
flock.update()
nofill()
stork = colors.rgb(0, 0.1, 0.1)
greens = colors.analogous(stork)
colors.noshadow();
i = 2;
for item in paths:
c = choice(greens)
stroke(c.r,c.g,c.b,0.5)
drawCornu(item,i)
i-=0.2

Great match and great analysis + explanation. We indeed need more of this!
Almar van der Krogt / 14/02/2009