Tag Archives: sys.#2

projector night (5)

Blackspace: The Garden of Life

Image/Poster ATTRIBUTION: Callum Bayle-Spence, his work *sys.#2/blck.spce* What I ultimately called The Garden of Life, based on John Horton Conway’s Game of Life.
Blackspace System Description:
A 2D space that emulates Conway’s Game of Life, except the designs usually implemented are rejected in favor of something more {{floral}} – one tulip, that is one garden ‘node,’ determines its neighborhood, and then behaves accordingly as it moves through its life cycle (or not). Scaled up and projected into a dark space, this becomes a dynamic simulated garden as an installation piece where the isolated ‘flower,’ earthy and natural elements of the designs offset the stark black of this new environment, creating an effect of dislocated, floating intelligence perhaps: a system that auto-perpetuates.
shot (on iPhone, self) from further away, actually right though a group assembled for Boobies piece

shot (on iPhone, self) from further away, actually right though a group assembled for Boobies piece

This idea was developed out of figuring out how to do an animation sequence in Processing, from an image array, and loading that to the screen dynamically (System #2), and combining it with our class’s original simple_GoL code.
The System Description also gives an idea of what I had in mind going into the project: –something dynamic –integrating design ideas I had been developing in Pixel Art –permeated by a sense of intelligence –projectable, even decorative. Could be put to use as such in the future too! –needs to work nicely in a black, dark space I think I achieved these goals. Complications, and frustrations, include dealing with code errors, more or less descriptive and helpful in that sense, in Processing. This came to a head when I decided I really also want to port this to the web (see separate post for that.)
another angle, shot on iPhone, self

another angle, shot on iPhone, self

Putting the project on display at out Black Space event was illuminating (no pun intended), but to a degree, the results were also predictable. I was happy with them to be sure. The piece, understood as part of the collectively created space, was one of the less obtrusive. It was not a live group performance in the middle of the room, with or without bottles! It was instead on the wall. There, however, it was all the more persuasive, encapsulating the ideas in the System Description, and as such, striking surprise in more than the occasional passer-through and visitor: they would stop, and look more closely to see what is actually going on in this presentation. I really enjoyed that more subdued engagement the work was producing! Another aspect of this work I enjoyed is, that once the thing is built, I can lean back and enjoy these sorts of pleasures: the code is running on its own. It’s a system!
another close-up like the one used for Callum's poster: shot on iPhone, self

another close-up like the one used for Callum’s poster: shot on iPhone, self

Having a dark, black in fact, background was a no-brainer, though I did experiment initially. The black background is what ultimately gave the animated tulips their sense of suspension, just floating in the darkness.
close-up, angled shot of the piece live @blackspace

Black Space: the Garden of Life; & Porting to the Web, a Technical Post-Mortem, as a Guide for When You Want to Put (Black Space and Processing) Stuff Online

Image/Poster ATTRIBUTION: Callum Bayle-Spence, his work *sys.#2/blck.spce/sys.#3* The transition from local to web was a little less than straight-forward. What follows is an exploration of the tech of assembling this piece for showcasing not on my computer locally, not on a project in Blackspace, but for a global audience online! First, there are some syntactical differences to work through, that go hand-in-hand with file structure changes ( – on the web, there is actually not a data folder that is used for images and other media!) /* @pjs preload=”/static/processing/Garden_of_Life_fix/tulip_01.png,/static/processing/Garden_of_Life_fix/tulip_02.png,/static/processing/Garden_of_Life_fix/tulip_03.png,/static/processing/Garden_of_Life_fix/tulip_04.png,/static/processing/Garden_of_Life_fix/tulip_05.png,/static/processing/Garden_of_Life_fix/tulip_06.png,/static/processing/Garden_of_Life_fix/tulip_07.png,/static/processing/Garden_of_Life_fix/tulip_08.png,/static/processing/Garden_of_Life_fix/tulip_09.png,/static/processing/Garden_of_Life_fix/tulip_10.png,/static/processing/Garden_of_Life_fix/tulip_11.png,/static/processing/Garden_of_Life_fix/tulip_12.png,/static/processing/Garden_of_Life_fix/tulip_13.png”; */ The above is now the first line in my file set-up, required to pre-load media so that the code can pull them as soon as they are ready. This process of getting images ready is the major limitation to performance on the web! (To consider when implementing image-intensive application such as an array of animation frames, as the present writer found himself doing.) Apart from this there was one particular error that made my life harder – it was an error that we actually talked about in class, in the Game of Life code. In my case, I was adding up neighbors that did not exist, so an out of bounds thing ultimately: I changed //add up neighboring cells for(int x = 0; x < columns; x++) { for(int y = 0; y < rows; y++) { int neighbors = 0; for(int a = -1; a <= 1; a++) { for(int b = -1; b <= 1; b++) { //throws error processing-v1.4.8.js:13556TypeError: undefined is not an object (evaluating ‘$this_1.grid[(x+a+columns) % columns][(y+b+rows) % rows].previous_state’) in browser ?? neighbors += grid[(x+a+columns) % columns][(y+b+rows) % rows].previous_state; } } to //add up neighboring cells for(int x = 1; x < columns – 1; x++) { for(int y = 1; y < rows – 1; y++) { int neighbors = 0; for(int a = -1; a <= 1; a++) { for(int b = -1; b <= 1; b++) { neighbors += grid[(x+a+columns) % columns][(y+b+rows) % rows].previous_state; } } The important thing is, the error did not show up as an Out of Bounds Error, but a Type Error! So things like this kind of error conflation make troubleshooting a bit harder. I think I caught on to the issue when I used the developer console in Chrome (Safari was not showing any details apart from Type Error): another thing to keep in mind when going about these things ( – different browsers do also handle debugging differently!) Final, little, thing was this issue: I was not able to use fullScreen(); command in Processing for online stuff. Which was hard, because I use that a lot for local.