Archive for July, 2006

The Ask Later, not (T**** K****)©™ event

Thursday, July 27th, 2006
Am currently uploading my video “bootleg” of a fine, little Pecha Kucha™ inspired event from Tuesday night at Westminster University. SteveC and TomC, of Open Streetmap (amongst others) fame, have managed to organize a fabulous lineup of speakers talking about everything from the political decline in the UK (not just), Extreme-Suduko cheating/hacking with handmade OCR in Ruby, livecoding music with Haskell98 (Alex, you’ve got to check out Brainfuck), Harry Potter & 3D scanning entire buildings, levels of indirection and comparing programming languages to football teams, cloning applications and the links Ning has with LambdaMOO; more about ubuntu, Rails and using constraints for your own benefit (also read here), Ghost dog, Hagakure, Braitenberg, Maeda and the general interconnectness of things, the joy of functional programming (in JavaScript), Topic maps (vs. RDF), usability testing and especially usability issues with mapping, story-driven software development, allowing user narratives to unfold online etc….

All in all there were 13 speakers and I have to say it was ++good and highly inspiring. The chosen presentation format really kept everyone’s attention focused. I was meant to be a speaker myself, but sadly had to cop-out last minute. I really hope this will become a regular event… Congrats to all involved!

The above mentioned video was recorded with my 6680. I managed to fill up the whole memory card, but only got the first ~50 mins of the event…

Saturday, July 22nd, 2006
Well, ive been attempting to learn myself code in a proper way… using classes and things.

So I am continuing on with processing and learning C++ on the side.

Here is one of my first classes experiments… yes I know its pathetic, and youd think Id already know how to do this stuff, but I dont.
move the little box with your cursor keys…



link

Hacking an LED tile

Tuesday, July 11th, 2006

Daniel Shiffman

Daniel Shiffman has been hacking a Color Kinetics LED tile and documenting the process.

By packet sniffing the data from Color Kinetics software to the tile enabled Daniel to figure out how it worked. He has now created a Processing library that reads the pixels of the display window, converts them to a 12×12 matrix, and writes them out as UDP packets to the data/power supply for the LEDs.

I imagine that the Color Kinetics software and hardware is closed source, so I hope that if they see this work they will encourage such use of their products.

Video 1, Video 2, Video 3 (requires latest Quicktime player). Photos on Flickr.

Related posts: Lightspace Corporation, DIY disco dancefloor, Kabarets Prophecy.

How to build a (camera tracking) multi-touch

Tuesday, July 11th, 2006

Jens Wunderling

Ok my last multi-touch post for a while. Jens Wunderling, a student of digital media class UDK Berlin, had also been creating a multi-touch surface for a community noticeboard project.

Jens began his project quite some time ago, but has had to put it on hold to complete other university work. The whole process has been documented on his blog, from buying the right cameras, hooking up the infrared LEDs and vision tracking software.

Whilst there are no examples of interaction techniques, the technology works and Jens has provided all Processing source code, Eyesweb and VVVV patches. If anyone else out there is working on multi-touch interaction, let me know.

Tuesday, July 11th, 2006
Okay, there are 4 pieces of Unreal script required to make everything work…
I want to:-

1. monitor which keys are pressed in unreal
2. make an object move based on the keypress
3. constantly be sending the positions of the players out via udp

okay, lets start with send the positions of the players out via udp.
a class is needed Ive called it “udptest”.

—————————————

class udptest extends UdpLink;

event prebeginplay()
{
local UdpLink.ipaddr dest;

Log(”ullo charlie”);
BindPort(9001, true);
StringToIpAddr(”192.168.2.8″, dest);
dest.port = 9000;

SendText(dest , “imtext”); //this is the first message to be sent via UDP
}

defaultproperties {}

—————————————

Then we need a mutator to actually do stuff… its called “watcher”

—————————————

class Watcher extends mutator;

var() int counter;
var UdpLink myudp;

event PreBeginPlay()
{
SetTimer(1.0,true);
myudp=Spawn(class’udptest’); //ensure the class we just made runs
}

function Timer()
{

local UdpLink.ipaddr dest;
local Controller C;

myudp.StringtoIpAddr(”192.168.2.8″,dest);
dest.port=9000;

for (C = Level.ControllerList; C != None; C = C.NextController)
{
if(C.Pawn != None) {
myudp.SendText(dest , “nextthree”);
myudp.SendText(dest , C.Pawn.Location.X);
myudp.SendText(dest , C.Pawn.Location.Y);
myudp.SendText(dest , C.Pawn.Location.Z);
}
}
}

DefaultProperties
{
FriendlyName=”Watcher”
Description=”I log the positions of the players every second and send this informaton to ip:192.168.2.8 , port:9000″
}

—————————————

Now then, monitoring keypresses… a mutator which starts an interaction, the mutator is called “keyinteract_mut”
note: I dont understand most of this code, I pretty much copied it off the wiki other than the bit that refrences keyinteract_inter, which is my final class

—————————————

class keyinteract_mut extends Mutator;

var bool bAffectSpectators; // If this is set to true, an interaction will be created for spectators
var bool bAffectPlayers; // If this is set to true, an interaction will be created for players
var bool bHasInteraction;

function PreBeginPlay()
{
Log(”key interact Mutator Started”);
}

simulated function Tick(float DeltaTime)
{
local PlayerController PC;

// If the player has an interaction already, exit function.
if (bHasInteraction)
Return;
PC = Level.GetLocalPlayerController();

// Run a check to see whether this mutator should create an interaction for the player
if ( PC != None && ((PC.PlayerReplicationInfo.bIsSpectator && bAffectSpectators) || (bAffectPlayers && !PC.PlayerReplicationInfo.bIsSpectator)) )
{
PC.Player.InteractionMaster.AddInteraction(”keyinteract_inter.keyinteract_inter”, PC.Player); // Create the interaction/ run my class
bHasInteraction = True; // Set the variable so this lot isn’t called again
}
}

DefaultProperties
{
FriendlyName=”interaction creator”
Description=”I do something that starts let interactions happen, apparently im needed if you want triggers to go off with key presses”
bAffectSpectators=false
bAffectPlayers=true
RemoteRole=ROLE_SimulatedProxy
bAlwaysRelevant=true
}

—————————————

and finally what to do with keypresses, a class called “keyinteract_inter”
note: for this I have a series of movers in my map waiting to certain triggers eg.
a mover with the tag “move1″ will activate (accordin to the code) when Numpad0 is pressed.

—————————————

Class keyinteract_inter extends Interaction;

Function Initialize()
{
Log(”Interaction Initialized”);

}

function bool KeyEvent(EInputKey Key, EInputAction Action, FLOAT Delta )
{

if ((Action == IST_Press) && (Key == IK_NumPad0))
{
ViewportOwner.Actor.TriggerEvent(’move1′,ViewportOwner.Actor,None);
}

if ((Action == IST_Press) && (Key == IK_NumPad1))
{
ViewportOwner.Actor.TriggerEvent(’move2′,ViewportOwner.Actor,None);
}

if ((Action == IST_Press) && (Key == IK_NumPad2))
{
ViewportOwner.Actor.TriggerEvent(’move3′,ViewportOwner.Actor,None);
}
if ((Action == IST_Press) && (Key == IK_Y))
{
ViewportOwner.Actor.TriggerEvent(’move35′,ViewportOwner.Actor,None);
}

if ((Action == IST_Press) && (Key == IK_Z))
{
ViewportOwner.Actor.TriggerEvent(’move36′,ViewportOwner.Actor,None);
}

return false;
}

DefaultProperties
{
bActive=True
}


—————————————

Floating Boxes / OpenGL Powered

Saturday, July 8th, 2006

More images…

Poster 4 USDI @ ITB OpenHouse 2006

Saturday, July 8th, 2006

Download PDF [size A0]:

Poster 1 [308kb]
Poster 2 [204kb]
Poster 3 [300kb]
Poster 4 [212kb]

“I am a consciousness, a strange creature which resides nowhere and can be everywhere present in intention.”

Friday, July 7th, 2006
Ever since I started working with computers I’ve developed a somewhat latent, yet nevertheless recurrent interest in philosophy and psychology. I always found asking questions (and reading them) about the nature of the mind most inspiring and helpful creatively, as well as for finding and questioning my own personal way(s). For the past few weeks I’ve been feeling the need to satisfy my appetite once more and finally got hold again of a book which I simply had to put down after the first few pages when studying Philosophy at A-levels, some 14 years ago.

The book is “Phenomenology of Perception” by Maurice Merleau-Ponty. Written in 1945, it starts with an incredibly dense cross-examination of the definitions and supposed acts of perception, the role of reflection, as seen by different schools of philosophy — before developing a radical definition of perception around the “embodied mind”, by using (amongst others) studies of brain damaged survivors of WW1 (which did remind me of similar experiences reported in Oliver Sacks‘ books).

In any way, I’m still only near the beginning and this is not a review of the book (due to lack of qualifications), but I did already find some very inspiring quotes, which also do prove the fact the text is still timely and relevant today.

Even though the below quote is slightly taken out of context (from a much wider definition of “data”), yet I think there’s some truth in there in respect to developments in information/data visualization:

“It would follow… the mind runs over isolated impressions and gradually discovers the meaning of the whole as the scientist discovers the unknown factors in virtue of the data of the problem. Now here the data of the problem are not prior to its solution, and perception is just the act which creates at a stroke, along with the cluster of data, the meaning which unites them — indeed which not only discovers the meaning which they have, but moreover sees to it that they have a meaning.” (p. 42, not my emphasis)

I find that last statement certainly fitting for some of my own work and also to art in general. We can create anything and our minds will always find ways to project some meaning onto (into?) it… We construct meaning, and not “aquire” it from data directly.

Here’re some more of his thoughts for your perusal:

“Pure sensation, defined as the action of stimuli on our body, is the ‘last effect’ of knowledge, particularly of scientific knowledge, and it is an illusion (a not unnatural one, moreover) that causes us to put it at the beginning and to believe that it precedes knowledge. It is the necessary, and necessarily misleading way in which a mind see its own history.” (p.43)

“[But] in reality I would not know that I possess a true idea if my memory did not enable me to relate what is now evident with what was evident a moment ago, and, through the medium of words, correlate my evidence with that of others[...] For never, as Descartes and Pascal realized, can I at one stroke coincide with the pure thought which constitutes even a simple idea. My clear and distinct thought always uses thoughts already formulated by myself or others, and relies on my memory, that is, on the nature of my mind, or else on the memory of the community of thinkers, that is, upon the objective mind. To take for granted that we have a true idea is to believe in uncritical perception.” (p.46)

London Graduate Fashion Week

Thursday, July 6th, 2006
About a month ago, Moving Brands, the company I work for won a pitch to design the stand for the London College of Fashion at the Graduate Fashion Week, opening tomorrow morning at Battersea Park Arena.

We wanted to do someting quite unusual for a fashion show, so our proposal for the stand was centered around an 8 meter long, interactive table showcasing the work of nearly 200 of students. Each student is assigned a cube holding their personal details and up to 5 pieces of work each. There’s a colour scheme in place to group students by courses attended. The cubes can be rotated individually or in groups by visitors hand movements on the table surface. To improve the illusion of a tactile response of this system, I made the cubes moving as if “floating” on water when they’re rotated. Also, there’s no limit to the number of simultaneous users.

UPDATE: documentation video is now available.

This was the first real camera tracking project I have worked on, and because of the current nightmare to get QT4Java working consistently and reliably with Processing almost forced me to use Director (with an embedded Flash sprite for the camera feed) instead. Though, not giving up that easily and as mentioned previously, I successfully managed to get something working using JMF. Alas, so far it’s largely untested (only with 2 different [and quite old] camera models) and is by no means ready for public consumption. But I really am working on it!

Speaking of cameras: Because the tracked surface is also used as projection screen we had to use infrared cameras. Thanks to the ingeniutity of this fine gentleman we modded some cheap webcams and turned them into IR cams for free. The only problem was to find the right models (a lot of the more recent models have their IR filter painted on the lens, not separate) and so it took quite some convincing the staff at PC World to let us open some potential candidates instore before finding the right ones…

I just returned from setting up the stand all day long whilst hacking on the last few changes. Rigging 8 projectors and cameras to join up seamlessly is no easy feat. I’ll be at the stand all day tomorrow and in the mornings until Wednesday, maybe see you there… ;)

Also expect semi-live Flickr coverage via ShoZu