Teaching at the Düsseldorf Institute for Music and Media

Last week I was kindly invited by Julian Rohrhuber to do a couple of talks and teach a livecoding workshop alongside Jan-Kees van Kampen at the Düsseldorf Institute for Music and Media. Jan-Kees was demoing /mode +v noise a Supercollider chat bot installation using IRC, so it was the perfect opportunity to play test the work-in-progress slubworld project, including the plutonian botzlang language. It also proved a good chance to try using a Raspberry Pi as a LAN game server.

IMG_20130620_163002

There wasn’t enough time to get deeply into botzlang, but we were able to test the text to sound code that Alex has been working on with a good sound system, and the projection of the game world that visualises what is happening based on the Naked on Pluto library installation:

world5

The Raspberry Pi was useful as a dedicated server I could set up beforehand and easily plug into the institutes wireless router. We didn’t need to worry about internet connectivity, and everyone could take part by using a browser pointed at the right IP address. With access to the “superuser” commands from the Naked on Pluto game, the participants had quite a bit of fun making objects and dressing each other up in different items, later making and programming their own bots to say things that were sonified through the speakers.

Plutonian Botzlang

Plutonian Botzlang is a new language I’m working on for a commission we’ve had from Arnolfini and Kunsthal Aarhus. The idea is to make the Naked on Pluto game bots programmable in a way that allows them to be scripted from inside the game interface, able to inspect all the objects around them and carry out actions on the world like a normal player. We can then strip the game down and make it into an online multiplayer musical livecoding installation.

Bots can be fed code line by line by talking to them, started and stopped and pinged to check their status. I toyed with the idea of making a one-line programming language with lots of semi-cryptic punctuation but opted instead for something a bit simpler and longer, but requiring line numbers.

Here is an example program that looks in the current node, or room for Bells, picks them up if found then saying their descriptions. Each time it loops it might drop the Bell and walk to a new location. This results in bots that walk around a game world playing bells.


10  for e in node.entities
20     if e.name is Bell
30        pickup e.name
40     end
50  end
60  for e in this.contents
70     say e.desc
80  end
90  if random lessthan 5
100    drop Bell
110    walk
120 end
130 goto 10

Here is a screenshot of the modified version of the game with a bot being programmed:

world4

Baltan Laboratories FaceSponge workshop

This is a very late report on a workshop on Facebook livecoding/hacking we gave at Baltan Laboratories in Eindhoven in May. We were invited us to run a workshop based on Naked on Pluto as part of their Tools Series:

The Tools Series is a series of Baltan Sessions that examines the complex and changing relationships artists and designers have with the technologies and tools they develop, modify or use to create, with an aim to explore social awareness around the tool choices they make as well as the (aesthetic) influences of these choices on the work they create.

During the Naked on Pluto project one of the key ways to confront the problems of centralised social networks turned out to be to encourage a deeper understanding of the processes and protocols of these sites.

So, like the previous workshop at CCCB, we centred this around a web application called FaceSponge, which we developed as a social programming interface giving quick access to the Facebook API and allowing participants to try out each other’s scripts. The other key issue was to find out people’s opinions, and so we collected answers on post-it’s to three questions for each area, which the participants later sorted for presentation to the public.

Social advertising

This workshop was perfectly timed with Facebook’s IPO, and as 82% of it’s revenue comes from advertising we started off by working on a simple spoof advert. We took one friend, and picked something they have ‘liked’ and wrote some code to promote it. This is what happens on social networks where a brand gets advertised to you because one of your friends follows or likes it. Being able to put a friend’s name in an advert is seen as an exciting future of advertising (or perhaps less so as the share price continues to drop).

function runme() {
    FB.api("/me/friends", function(friends) {
        var friend=friends.data[0];
        FB.api("/"+friend.id+"/likes", function(likes) {
            var like=likes.data[0];
            display(friend.name+" endorses "+like.name+" BUY SEVERAL TODAY!");
            FB.api("/"+like.id+"/picture?type=large", function(picture) {
                display_image(picture);
            });
        });
    });
}

Privacy

There are vast amounts of pictures available on facebook, and it was fun to write a script that presented them all back at in a chaotic manner without any other information. This also gave us a chance to show how the privacy on Facebook is imaginary, as the URL’s FB gives you for your friend’s pictures are public – regardless of anyone’s privacy settings.

// showing the holes in the walls                                               
// you think your photos are private?                                           
// these images are accessible without a login                                  
function runme() {
    FB.api('/me/friends', function(friends) {
        friends.data.forEach(function(friend) {
            FB.api('/'+friend.id+'/photos', function(f) {
                 if (f.data.length>0) {
                     var gallery=f.data[0];
                     // show the public url                                     
                     display(gallery.images[0].source);
                     // show the image                                          
                     display_image(gallery.images[0].source);
                 }
            });
        });
    });
}

Social pressures

The third area we were interested in exploring was the more subtle ways that social media are affecting communication methods. We came up with this strange script that collects the last things posted by your friends and puts them together without information on who posted them, or who they are for:

function runme() {
    FB.api('/me/friends', function(friends) {
        friends.data.forEach(function(friend) {
            FB.api('/'+friend.id+'/feed', function(feed) {
                if (feed.data && feed.data.length>0
                    && feed.data[0].message) {
                    display(feed.data[0].message);
                }
            });
        });
    });
}

We continued to play with and adapt these scripts in order to show more information. The mood was interesting as it flipped from serious to hilarity and then slight awkwardness at what we were dredging up. We followed each of these practical sessions by collecting feedback on thoughts and emotions for each section. Although this was a very demanding workshop (changing between coding, politics, funny juxtapositions of friend’s personal data and having to think about how it felt) we recorded a wide range of thoughts – from the dismissive, “doesn’t matter” to the outright enraged. Perhaps one of the most important aspects of this workshop was being able to expose these mechanisms to groups of people normally considered ‘users’.

Next week: Plant spirit drawing & social network livecoding

The next few days are going to be hectic – a train powered scramble between cities for various activities.

Firstly I’m taking part in FoAM’s Open House event on Saturday in Brussels:

Enter a rarity cabinet of people and experiments: a lively display of human-plant hybrids, tasty table conversations, crisis-proof clothing and other curios in their natural habitat – the FoAM lab. Expect to experience a colourful collection of sketches and prototypes in various stages of completion, providing an insight into the collaborative and creative processes developed at FoAM.

My part is going to involve various experiments with Germination X, some playtesting and getting more feedback so I can evaluate the mandrake avatar changes. I’ve also rebuilt the code for “draw your own plant spirit” – this time we can directly upload people’s drawings to the public server for testing their spirit designs in the game.

The second event I’m taking part in is Baltan Laboratories The Tool Series #5: FaceSponge Workshop with Aymeric Mansoux in Eindhoven on Wednesday 23rd. We’ll be examining and exploring our real data on social networks, looking behind the interfaces and protocols we are supposed to see, with a top secret collaborative social network livecoding interface which has emerged from the Naked on Pluto project.

Naked on Pluto/VIDA at ARCO2012 Madrid

Naked on Pluto entered the world of contemporary art last week as part of the VIDA/telefonica exhibit at the ARCO 2012 art fair in Madrid. This was the culmination of a lot of work making the game into an installation format, which represented the library as the centre of control and surveillance in Elastic Versailles. The installation consists of books printed from information stored in the game archives over the previous year, slogans and glowing LED books on the walls. We also had terminals running the game with the projection of the live game world in a circle in the middle of the space.

Most installations I’ve been involved with have tried hard to break the conventions of the art gallery, in this case we were very aligned with them, and we wanted to create a highly formalised space, all right angles, straight lines and consistent colours of blue, dark grey and white. VIDA’s crew of architects and builders put in a lot of effort for us to achieve this, and were also very helpful tweaking it according to our strange requests.

During the opening event and later on, it was interesting to see perhaps two different types of visitor. The older, perhaps more contemporary art focused groups had an extremely short attention span and presumably had their heads tuned to search out beautiful objects, and so were not really engaging with the work much. The younger visitors however were tending to stay longer, even logging in to Facebook in order to try the game (and alarmingly, sometimes leaving themselves logged in). I think the initial hook for this engagement were the slogans on the edges of the bookshelves – for future installations we need to consider different strategies for setting the scene, as it will need to change with different locations and context.

One of the great things about these events is meeting the other artists (and VIDA award winners) who were setting up and exhibiting their work – Paul Vanouse with Ocular Revision, Sebastian Muellauer and Toni Nottebohm with Protei and Verena Friedrich with Transducers. These projects are an interesting combination, with more finished and specifically designed for installation work (Ocular Revision, Transducers) mixing with the more in progress, or conceptual things like Naked on Pluto as software art, or Protei, which is a large collaborative project still very much in active development.

Check out the main Naked on Pluto blog.

Naked on Pluto: Starting work on a “live world” projection

Following on from the VIDA win, we need to work hard on Naked on Pluto’s gallery installation presence. Although we now have the news website style front page, we need to take the game externalisation to another level, and one of the things required is a realtime projection of the game world. This represents the unfiltered behind-the-scenes view of the game as seen by the bots as they attempt to keep track of what is going on. Technically we decided to do this work using HTML5 canvas, in keeping with the web based themes of the game it needs to work on a browser, which has the added bonus of making gallery setup quite simple.

My first approach was to write a scheme bricks representation for Javascript objects, and see how bits of the game looked if rendered in this way.

This is part of the ArrivalLobby, and all the internal information is present with no explanations, which is great, but it results in very large images. The next thing was to try filtering the objects to remove most of this information:

function node_filter()
{
    this.filter=function(obj)
    {
        return {objects:obj.objects.map(function(object) {
            return object.name;
        })};
    }
}

This code provides a single method for filtering locations in the game – it simply returns an object consisting of a list of names of things found at that location. These filters can be easily changed over time, to include different information or process it in different ways. Rendered with the same code as before, this makes the location diagrams much smaller:

Add a few more locations, put them together in a circular formation (the projection will be onto the floor space in the gallery), add some bezier curves to indicate paths between locations and it looks like this:

There is also some relatively complex jiggery-pokery to detect when bots have moved from one location to another and animate them. The moving bots display more detail including what they are wearing and who has ‘liked’ them. In this image you can see the AdverBot004 moving to the HelpDesk, and the HyperClock and GreenwichClock on the upper right as they move from the Palace Garden.

Two talks in Helsinki

Next week I’m presenting Naked on Pluto at Pixelache’s Pixelversity on Wednesday evening (9th November) at the Cable Factory. Owen Kelly will also be there to talk about Pixelversity’s ‘Social Identity, Augmented Reality & Virtuality’ Study Group’ which will take place next year.

On Saturday afternoon (12th November), Till Bovermann and I will be demoing Supercollider, Fluxus, Scheme Bricks and Betablocker DS and talking about what it means to be a livecoder at the Hacklab Helsinki.