What have you done for me lately?

December 24th, 2006

So, things have been quiet here for a while. I’ve been really busy at work, and haven’t been very involved in the community for the past while – I’ve been concentrating more on doing experimental stuff, like my VJing work and more art based work. I’ve been working with performance artist Hellen Burrough on some video art, which is still WIP, and doing interactive and installation work with Finite State Automata, which I’m pretty excited about.

However, I am planning to present at LFPUG in the next couple of months, so keep an eye out for that. I’m also planning on keeping a regular portfolio of work, as I’ve been doing lots of stuff at Republic which I’m quite proud of.

An Phoblacht

April 29th, 2006

So, as some of you may be aware, I’m no longer at tonic, having moved to agency republic last week. So far, things have been going really well, and this will hopefully be the beginning of a fun and productive stage in my career.

Strength Through Joy

January 22nd, 2006

Next saturday, I’m doing my first ever vj/installation work at London’s premier industrial nightclub Strength Through Joy. I can’t guarantee it’ll be any good, but I’ll do my best… If you feel like coming along to laugh and point as everything goes wrong, the details are:

Strength Through Joy
Date: January 28th
Venue: Upstairs at The Garage – 20-22 Highbury Corner, Highbury, London N5 1RD
Nearest Tube: Highbury & Islington

Streetmap Link

STJ Flyer(front)

STJ Flyer (back)
(print out flyer for cheap admission)

Creating your classes with XUL in version 2.7 alpha

November 13th, 2005

The latest version of ASUnit has a new cross platform XUL application for creating your classes and automatically creating classes for your unit tests and test suites – this version solves a lot of . issues and strangeness that occurred with the JSFL command version, which I generally found a bit mystifying. XUL is pretty interesting as technology, once you get it working. I must admit, though – everytime I see that

xmlns=”http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul”

tag, I just want to scream NEEEEEEEEEERRRRRDS!

But that’s just me.

Joshua Davis workshop

November 6th, 2005

So the Josh Davis workshop was really awesome. I had this horrible fear that he’d be some egotistical asshole, but he’s really down-to-earth, personally accessible, and just generally a very fun guy to be around.

After meeting him, and talking to him about his work, and the processes he uses, I’m inclined to say that Joshua Davis isn’t really the same as the old school Algorists. I’d say that he still very much uses a painter’s methodology, and that the random generative process is still very much subordinate to the composition. A lot of human intervention and critique goes into his work – writing the algorithms is only a small part of the end result. This is in stark contrast to the more formal Algorists, whose creative process is essentially over by the time the algorithm is finished. Davis’ process, however, is a highly evolved cycle of critique, disposal, and experimentation, marked by a constant jorney of deterministic self-appraisal.

He also says ‘fuck’ a lot.

I’d most definitely recommend his workshops if you ever get the chance to go to one. Also – if you’re in Barcelona next month, check out his show at the Maxalot gallery, where he’ll be exhibiting some of his Maruto & Once Upon A Forest work, and some other cool stuff as well.

The Algorists

November 4th, 2005

So, I’m doing a creative workshop with Joshua Davis tomorrow. As part of my preparation I’ve been reading up on art history relating to the branch of computer art known as “Algorism” or “Algorithmic” art, which, (if you subscribe to the concept of movements), Mr. Davis could be considered part of. A lot of his ideas, especially the concept of an art making machine, are very much in line with the algorists’ school of thought. Interestingly, the movement goes back to the 1950s, and also includes artists who do not use computer displays or prints as their medium. For example, Jean Pierre Hebert works with dry sand, creating incredible intricate patterns over time. In some ways, this is an ancient idea – monuments such as Stonehenge and Newgrange could be described as algorithmic, in so far as they follow a repetetive, logical (yet intricate) patter throughout their construction. Somehow, to me, sand – which is usually seen as a symbol of impermanence (see the Tibetan Sand Mandalas) seems more permanent than purely digital art does now.

What’s unique about the Algorists though, is that their work takes “non-representational” art to another level. Most non-representational art works from emotional or temporal subjects, concepts which are very much rooted in our objective reality (happiness, abjection, a nude descending some stairs, etc.) – so in that sense, they actually are representational – just representing non-visual subjects, or visual subjects in a more expressive way. However, Algorithmic art creates a microcosm of its own, in that each algorithmic work creates a system, a closed form in itself. Algorithmic art is beautiful, because each piece creates its own frame of reference – the inherent qualities of the algorithm. These can be beautiful to us, either because we can deconstruct the algorithms which make up the ordered rigour of mathematical iteration, or because we can recognise the mysterious yet familiar echoes of the natural world.

Here’s a great quote from Roman Verostko:

For the past 40 years I have worked with pure visual form ranging from controlled constructions with highly studied color behavior to spontaneous brush strokes and inventive non-representational drawing. Such art has been labeled variously as “concrete”, “abstract”, “non-objective”, and “non-representational”. In its purest form such art does not re-present other reality. Rather “it is” the reality. One contemplates a pure form similar to the way one might contemplate a fine vase or a sea shell.

Eclipse Template Joy – Sorry, I’m Single

October 4th, 2005

I’ve recently become increasingly enamoured with the joyful wonder that is Eclipse’s code templates – be they in FDT or ASDT, they fill my heart with a warm fuzzy sense of joy and make me tipsy with the raw coding power available to me. So, here’s a code template for my particular flavour of the ubiquitous Singleton Pattern:

/**
 * @author ${user}
 */
class ${enclosing_package_and_type} {

	private static var _instance : ${enclosing_type};

	private function ${enclosing_type}() {
		${cursor}
	}

	/**
	 * @return singleton instance of ${enclosing_type}
	 */
	public static function get instance() : ${enclosing_type} {
		if (_instance == null)
			_instance = new ${enclosing_type}();
		return _instance;
	}
}

This is slightly cleaner than the more traditional version (which ships with FDT) in that it uses an implicit getter function for the instance – this just means that you can write slightly cleaner looking code – for example:

MyManagerClass.instance.myFunkyMethod(myParams)

vs.

MyManagerClass.getInstance().myFunkyMethod(myParams)

Works for me, anyway.

Actionstep

September 23rd, 2005

Ok – this project really inspires me. For all the slashdot weenies who say “flash isn’t open source” – here’s a project which implements an open source unix UI API, based on NextStep, (OpenStep), which uses an open source compiler (MTASC) and is run within an open source community (OsFlash.org), and released under an open source BSD style licence.

Did I mention that it’s open source?

The World/Controller design pattern

August 26th, 2005

One of the most basic things you will always need when making any sort of game is a World – that is, a class object which will track and mediate between your game logic and your display view. In conventional programming, the design pattern Model/View/Controller(MVC) would be popular in this situation – however, due to the unique nature of flash, some things bear consideration:

  • As flash itself has a Stage, there is an inherent, built-in View tier, which you have to use – for better or worse
  • One of the overheads in the MVC pattern is the draw phase – the model needs to be analysed, rendered and passed to the screen – however, to an extent, flash already does this for us, and making this a seperate phase is a duplication of work.
  • Although in many ways quite elegant, the flash stage interface can be cumbersome from a programming point of view – e.g. sometimes we experience difficulties traversing the tree, creating/destroying objects, and keeping track of the game’s movieclip structure.
  • The World/Controller pattern is an attempt at approaching all of these problems at the same time. Instead of having a seperate model & view, in our game, the model and view will be combined, so that essentially, the model *is* the view – that is, as soon as a change is committed to the model, it will be set to draw on the screen, eliminating the need for a seperate view pass. It also proivides a facade to the stage, allowing us to organise our movieclips in a more intuitive manner, and giving us a single interface to different types of object.

    For example:

    Suppose we want to create several different types of object on the stage, each of which will behave differently. Let’s keep it simple – let’s sat they all have a different move() method which needs to be called. If we have the move method situated in a controller class object, we’d need to do something like this:

    function moveSprites(){
        for (i in _root.group1){
              if (typeof _root.group1[i] == "movieclip"){
                    switch (_root.group1[i].type){
                        case enemy: doEnemyMove(_root.group1[i]);
                                            break;
                        case bullet:   doBulletMove(_root.group1[i]);
                                            break;
                   }
                }
    }
    

    As you can see, the sprite’s movieclip path is tightly coupled with the code, and if we decided to change the grouping of the different types, we would have to change a lot of code. However, let’s say we have a class World, which will handle the creation and management of our objects for us – our code would then look something like this:

    //world is passed a reference to the current clip scope:
    var world:World = new World(this);
    world.addGroup("enemies");//create a group callled "enemies"
    world.addGroup("bullets");//create a group called "bullets"
    //add an 'enemy' type object to the world, inside the 'enemies' group:
    world.addObject("enemies","enemy",{x:10,y:20});
    var enemies:Array = world.getGroup("enemies");
    for (var i in enemies){
        enemies[i].move();
    }
    var bullets:Array = world.getGroup("bullets");
    for (var i in bullets){
         bullets[i].move();
    }
    

    As you can see, it would be a matter of just adding an extra line to add another object, and we don’t have to worry about depth, instance names or identifying the type, as the World class does all that for us. It also acts as a factory to create the appropriate clips in the correct levels in the movieclip tree. We don’t ever need to know where they actually reside in the tree, we can just get at them through the World class. Moreover, they could all reside in totally different coordinate systems and movieclips, and our code wouldn’t care.

    The grouping is useful when it comes to be time for our collision detection to be worked out, as we’ll need to carefully plan how different objects are grouped – for example, static objects can be placed into lookup trees, and moving objects which don’t need to detect collisions between themselves (such as bullets) can be handled seperately to other objects.

    Performance:
    As far as performance goes, there is no noticable disadvantage, and possibly even a speed increase, depending on how you handle things – provided you follow a couple of basic rules:

    1) Always create a local var reference to the group – otherwise the World class will keep calling the accessor methods and this will make things *slow*.

    2) If possible, try and loop through the arrays by number, as this is much faster (up to x3 according to some of my recent tests)

    3)Generally, local registers are your friend – they will perform much faster than performing lookups on the tree – var myClip = _parent.myClip will be faster than always calling _parent.myClip – it will also make it easier to use in the debugger.

    The World class can be as generic or as specialised as you want it to be – it could handle a number of diverse tasks, such as creating/destroying objects, building a tree hierachy for space partitioning, or even saving game state.

    Blog back up!

    August 26th, 2005

    PENIS ENLARGEMENT XXX PILLS CHEAP!

    I’ve moved my blog over to the WordPress platform, which seems (so far) to have eliminated all the random comment spam. So after a long hiatus, I’ll be blogging again.

    Yay!