LazyBotz

2010.04.26

I’m still trying to work out exactly how to livecode this, but I’ve written a little language for building robots in fluxus:


(Audio: “Dang Spot” by Plaid)

These fellows were premiered at Lazy Sunday yesterday, raving to DJ Conehead’s early 90s hardcore techno lushness.

The idea (inspired by Gabor Papp’s marching maggots) was to make a high level language in fluxus which takes care of all the physics operations – automatically creating active objects and joints in ODE. The code can be found here.

Categories : fluxus hacking   gig   livecoding

Fluxus 0.17

2010.04.12

Fluxus is a 3D game engine for livecoding worlds into existence.

“act of a flowing; a continuous moving on or passing by, as of a flowing
stream; a continuous succession of changes”

We spent too long livecoding and forgot to do any releases, so this is
your semi-annual fluxus release fanfare:

Changes:

* Render to texture makes recursive worlds possible
* Freeframe plugins supported
* Windows support
* OpenAL 3D sound playback
* AR/Camera module
* Planetarium/dome projection
* Livecode text effects to confuse your audiences
* Experimental voxel primitive
* Icosphere primitive
* Unicode support in the scratchpad
* Some proper games stuff – frustum culling, scene inspection etc.
* Stereo panning in fluxa.

Get it here:

http://www.pawfal.org/fluxus/packages/

Categories : fluxus hacking   livecoding

Pixelache #2: Kerava groworld installation

2010.03.31

Lina Kusaite and I installed the groworld project as part of Camp Pixelache at Kerava Art Museum. It was the first time the plant eyes game had been exposed to so many public – but as I’ve come to expect, younger visitors needed surprisingly little explanation to figure out how to play (i.e. none), while older people needed a little help. It was also the first showing of the huge pataforest drawing.

The arduino and plant sensor worked constantly throughout the day (not surprising as it’s sister has been working tirelessly for months) feeding the game with environmental information from the test subject plant – a pink Gerbera.

The camp in general was an interesting experience. The day started (after some last minute setup) with barcamp style discussions – I took part in one on Art and renewable energy before having to switch modes and present Fluxus and talk about livecoding with Gabor as part of the puredyne sprint debriefing. It was good to connect the two threads by using the groworld installation downstairs as an example of fluxus being used.

Aymeric Mansoux presenting the puredyne penknife.

Pixelache #1 Suomenlinna puredyne sprint

2010.03.31

Part one of my pixelache experience was on the ice surrounded island of Suomenlinna, where Gabor and I spent 3 days working on fluxus. With the help of the puredyne sprint team we got the debian packaging working on launchpad – which is Ubuntu’s system for organising software packages and making sure they build on the various architectures and Ubuntu OS versions. We now have a fluxus ppa so people running a debian based system can directly get updates from us with apt-get upgrade.

We also spent a little time discussing the situation with proprietary graphics card drivers and Linux. This has recently become a personal matter, as my graphics card is no longer supported by ATI for current Linux kernels. We talked about avoiding locked away features as artistic constraint, and looked at people trying to do something about this like the xorg crack pushers and phoronix. One plan is to make the more cutting edge xorg code availible as a puredyne package so we can quickly test these free software drivers for installations and performances.

Categories : fluxus hacking

Kansallisteatteri Building Projection

2010.03.19

The Kansallisteatteri is the Finnish National Theatre, and thanks to Miska Knapek and Ville Hyvönen I have the opportunity to try a quick bit of building projection as part of the Pixelache festival. I’m going to try growing plants from bits of the building that seeds would be able to rest on (i.e. any upward facing surfaces):

This is a test animation for the growing – they look quite a lot better now, but I like the style of this movie:

Categories : fluxus hacking   gig   groworld

wind shapes

2010.03.08

A simple test filling arbitrary shapes with particles:

Code here

Categories : fluxus hacking   rendering

More fluxus windows work

2010.03.02

I’m amazed when I have to do any windows programming now how much you can do using GNU software – the whole lot is available these days. I’ve been sorting out the windows version of fluxus so it actually releasable, and using MinGW and emacs (which I’m a recent convert to).

I’ve managed to get the script loading gui working, fix a load of crash bugs and most importantly get the more advanced rendering code working – here’s a screenshot of the GLSL shader example script running:

Categories : fluxus hacking

exquisite code

2010.02.23

A script that uses some material from last weeks intensive writing sweatshop. We generated a huge amount of nonsense of varying degrees, most of which didn’t make it into the novel and went into a “waste dump”. This text was exploited for the performances in various ways, my attempt picks words from the text and connects them together with a 3D spring model graph – a sort of parallel to what my mind was doing while taking part. The code is here.

Edit – finally managed to upload a video of this…

i18n

2010.02.14

I’ve spent a lot of time this week concentrating on internationalisation (shortened to i18n in coder speak) for the fluxus scratchpad editor. I didn’t have much luck finding comprehensible help online, most of this was done from memory of porting Evolva to Japanese years ago. I thought a blog post about it might be good for anyone treading this path in the future.

The gnome character map was very useful, as was this website which includes a bit more information.

Firstly the history of how text is dealt with is a rather shameful mess of assumptions and out of date compromises. With higher level programming languages this is almost a solved problem, but in C++ it’s not at all. It would also possibly be less of an issue if we could use an editor widget from a normal windowing toolkit, but we can’t as we need to render text in OpenGL with all sorts of whizzbang livecoding zooming effects.

It’s an often told story, first there was ascii, and assumptions of everyone speaking english, and 8bit having to be enough (actually 7bits) for all characters needed in text. Then a whole host of ascii extensions for different parts of the world, using the unused top 127 values of ascii for special characters, while the Japanese for example having their own system entirely called Shift_JIS.

Then in an effort to sort out this mess, lots of committees were formed and Unicode was the result – with the following aim: “Unicode provides a unique number for every character, no matter what the platform, no matter what the program, no matter what the language.”

In order to do this, unicode needs to support 107,000 possible characters – enough for all the languages ever spoken (including exotic scripts such as ancient Egyptian hieroglyphics, Canadian Aboriginal syllabics and Byzantine music scripts) and lots of room for new ones too. In order to do this, you need at least 32 bits, on their own 16, and obviously 8 bits are not enough.

The problem is that ascii is so prevalent, and 32bits per character is a lot for embedded devices, so unicode comprises multiple encoding formats. utf-32 is the easy, but memory eating one, where all characters are the same size, and there is utf-16 and utf-8 which encode variable length characters to save space. utf-8 has the interesting extra property of being compatible with ascii, it reserves the single byte ascii codes and uses the upper 128 values as control codes to signify multibyte chars. For this reason, utf-8 has become the text encoding of the internet, and therefore a standard for plain text files pretty much everywhere.

In the fluxus scratchpad, I decided to use utf-32 for all internal strings – using the std::wstring class, and encode from and to utf-8 at all points of input and output. The reason for this is that fairly simple operations like finding the length of a string, or moving back a single character is complicated with utf-8 – you need to detect the multibyte characters at each point. Using utf-32 it’s much simpler, but you also need to be able to read and write utf8/ascii files.

Ok, that’s the strategy, and you’d think there would be lots of code online to do conversions between these formats – or even standard libraries in C++ to do this. No. The only code I found was buggy (a ‘>’ instead of a ‘>>’ which took me too long to find) but some working code is here. In those functions string is assumed to contain ascii or utf-8 and wstrings are assumed to be utf-32 (even this is going to have to change on the windows version where wstrings are 16bit, sigh).

So, a big search replace for string to wstring in the scratchpad code with conversions in the loading, saving and entry and exit points for the PLT Scheme interpreter, and all was good…

Except keyboard input. I’m still trying to get to the bottom of this and find out what is an artifact of using GLUT and what is the underlying operating system, but at the moment it looks like the mac sends utf-8 keyboard codes, so multiple calls to the glutKeyboardFunc callback per keypress for multibyte chars. On Linux it seems like just the first utf-8 byte gets through, I can’t find where the others get stashed. The minimal information online seems to indicate that this is stretching the abilities of the GLUT toolkit somewhat so I’ve given up for now at least.

The last thing to do was switch the fluxus editor font from the minimal Bitstream Vera Sans Mono to the more characterful Deja Vu Sans Mono which other than having many more glyphs looks exactly the same.

Portuguese help in fluxus – from utf-8 in the code doc comments, to a utf-8 helpstrings file, read in by the scheme interpreter, converted by the scratchpad to utf-32 and rendered by fluxus’s OpenGL glyph renderer.

Categories : fluxus hacking

More feedback meshes

2010.02.02

And some more – must get on with some proper work today…