On this noisy walk in the bush I start by giving a listen to the remarkable spring wildlife in the bush near our place on the east end of Rotterdam, and then I explain a unit test.

Now, what could be more exciting than a unit test?! I know. Actually, there's a very good reason why this unit test is absolutely crucial to building the infrastructure for the game, so there's no way around it. It's too important to skip over.

TestBeingMarshalling.java

Technorati Tags:

Good news for Java developers!

I worked all friday on the DaH code, rearranging everything so that I can start the final construction of the online game. All the parts are now available under one tidy subversion directory:

svn co https://fluidiom.svn.sourceforge.net/svnroot/fluidiom/dah/

If you can figure out how to install JOGL on your machine, you should be able to watch the program evolve in the coming weeks.

I had to separate off the core DaH classes into their own maven jar artifact when I realized that this exact same code must work on both the client and the server.

This is getting more fun! Just a few more sessions and I'll probably be able to put a demo online.

Technorati Tags:

Lots of things to talk about in this podcast, because in the couple of days I've had to work on things I could work quickly on the things I had already thought out in the meantime. I'll be presenting the blind watchmaker to a group of friends called the JavaKnights here in NL soon, so I built the presentation and now I'm working to get a convincing demo.

First there is the enum genome, which has now evolved into a genome that holds a gene for every combination of a group of enumerations. The number of genes can easily be made much larger now because instead of one-dimensional with one enum, it becomes an N-dimensional hypercube of genes. Enums are nice when you're coding because you can represent states like FORWARD, BACKWARD, LEFT, RIGHT, combined with EXCITED, CALM, etc.

Then I expand on how Java Generics are being used to create a watchmaker that is truly blind. There is a Body class, an Energy class and a class representing the World. The blind watchmaker is completely in the dark about what these classes contain. Generics enforce blindness. I'm tempted to call it the Generic Watchmaker.

The heartbeat was introduced to allow for something that could be called "ambient behavior", which in the case of darwin at home has the Fabric body experiencing physics. The blind watchmaker executes genes when the heart beats, and in between, the experienceTime() method is called so that the ambient behavior (physics) can act. The heartbeat delay is controlled by behavior classes, which might reflect a level of emergency.

Being is the class that holds the generic things which are evolving. Beings hold the body, the genome, and something new: an energy repository. People coding with the blind watchmaker are responsible for creating an energy class, and make an implementation of the repository that can hold it.

Every instruction in the behavior classes return energy objects, which is extracted from the repository, showing how much energy the instruction costs. Beings can be fed energy, but how do we decide when to feed the being? Here we revisit the Nuance class, since the being is set up to express its degree of hunger to the world. If the being is able to get some food where its body is, it's lucky and it will be fed energy extracted from the world.

To make the programming tight, there is now an annotation called Energy so that you can create an energy class and then annotate it, which allows the blind watchmaker to check that all the instruction methods return one of your energy objects.

Evolution by mutation, like the code has been doing in darwin at home so far, can now be done with a class of the bind watchmaker called Cauldron. It holds a population of beings who are mutating and competing, sortable by fitness.

But now with the EnumGenome and it's many individual genes, the door is open to implement gene crossover!

Technorati Tags:

Finally a new podcast episode, and once again one I made while walking in the bush, describing what I've been able to build in the few days I've been able to reserve for the project since the beginning of the year.

First I talk about the changes I've made in preparation for having the blind watchmaker cause muscle movements, which involved expanding the Span class. Span describes the relationship between the ends of an interval. Now you set the span with an amount of time attached so that the span changes to the new value, but slowly. Also, and more fun, is the "perturb" method which takes the span through a number of different lengths and then back to the original. This is a muscle contraction and it can be brought on by executing blind watchmaker instructions.

But more fun is the blind watchmaker itself, because I have completely refactored it so that now it's based on Java Generics! This is effectively proof that it cannot know what it is doing, because that's the way generics works. It's proof of blindness. I'm really happy with the result of the developments so far, and the whole time it still works for building darwinathome bodies.

Just like in Java you might make a "list of chickens" with generics, here you have to create a few classes to set up a blind watchmaker evolution scenario. I am, for example, creating an evolution of "fabrics".

First there is a "body" class (whatever that might be, for me it's a Fabric) and then there's the "energy" class which is now required to be the return value of every instruction method (in my case, just an Integer). Every instruction method must return an energy object to tell the blind watchmaker what the cost was of the instruction call. After defining these and a few behavior classes (behaviors on your body class, or implementing Behavior) and an evolution should be possible. My behavior classes so far are Growth and Movement.

This is just a first crack at explaining things, so if you don't get it all yet, don't worry. I plan to write up good documentation on this "generic watchmaker" system, because I think it'll be applicable to a whole bunch of domains, not just my geometrical stuff.

Don't miss Biota Live this week because Tom Barbalet and I will be chatting about Darwin at Home.

Technorati Tags:

Happy new year everybody! 2009 is a big year for Darwin, because it was 150 years ago that he published the bombshell that is still causing intellectual quakes.

I've just been contacted by a Civil Engineer from Switzerland who found the tensegrity stuff interesting. His name is Landolf and his blog looks promising. http://www.tensegrity-structures.blogspot.com/

In this podcast episode I continue to describe the developments on the way to the new version of the online darwinathome program. Marshalling is all about transforming fabrics (bodies) to a binary format and back into object graphs again. The Fablob (Fabric BLOB) class does the work and it can store fabrics in either lossy or non-lossy form, depending on what the situation demands. It will be used for database storage, http communications and also for fabric cloning (during evolution).

Also I've put together a datamodel using Hibernate and Postgres, and it maintains the genaeology of the fabrics; the parent-child relationships so we can store lots of fabrics in the database and we can brows through the ancestors of any fabric to see how it developed.

Technorati Tags:

In this podcast episode I describe two of the improvements that I have been able to make in the past couple of months during evenings and weekends. Time has been tight lately since I've been working intensely on my contract with the team at the European Library to finalize the site which is finally going live right now. The project is called Europeana and it functions as a search engine for a mountain of metadata about european cultural heritage collections from all over the continent.

There are now two different variations on the Physics class (two subclasses) which are identical except for the way they treat gravity and the walking surface. The original one, VerticalPhysics, has gravity pulling in the -z direction and the floor is the plane where z=0. The new physics has gravity pulling "inwards" and the floor is actually the surface of a spherical planet. The critters can now exist and move around on the sphere surface, and therefore they will tend to encounter each other for the first time.

Also, I've managed to implement a really nice simplification of how the Fabric class works. Fabrics used to be just joints and intervals with these two things mutually pointing at each other, so it was possible to ask a joint for the intervals that meet there. This involved a lot of bookkeeping when the fabric was being edited, and things started getting complicated when I introduced "faces" (trianglular), "tetras" (four joints), and even "vertebra" (those tensegrity modules). Should a joint also be aware of the faces, tetras, and vertebrae to which it belongs? Too much work.

The way the Fabric class works now is that it's centered around the joints, and they hold no references to any other entities. Instead collections of faces, tetras, and vertebrae can be extracted from a fabric using what looks a bit like an SQL query. Give me the tetras connected to joint X. Since it's all in memory these queries are lightning fast, and it makes the code quite a bit simpler.

I've built quite a bit of other stuff already too, but I'll talk about those things in subsequent podcasts soon, now that I have a bit more time available. Stay tuned!

Technorati Tags:

In this podcast I get on to the next step in the blind watchmaker development, assuming the first three steps described in the last podcast are meeting no resistance.

Sensory observations are to be communicated back to the genome interpreter in the form of instructions that return nuances.

We could choose among different subroutines, but in this episode I try to make a case for introducing symmetry.

Blind Watchmaker

  1. binary genome
  2. nuances
  3. cost
  4. forking
    • Instruction return values
    • void or null means continue normally
    • return nuance means make a choice
    • fork could choose different genome paths
    • ... but would it be legitimate to introduce symmetry??

Technorati Tags:

In this podcast episode I get into the first details of how the Blind Watchmaker works, since the design seems to be solidifying into something that looks tight and actually has proven to do something, building D@H bodies. The next step, as I said at the last Greythumb gathering, is to get the blind-watchmaker code to also manage behavior.

The plan now is to go step by step from the very basics of the blind watchmaker development, and see if people can contribute ideas and maybe code as we go. At least people can stop me from doing stupid things, if they're listening.

Blind Watchmaker

  1. Generic Binary Genome & Instruction Sets
    • Bit strings
    • Invented but remembered
    • Short bit string --> method call
  2. Nuance parameters (with bit precision)
    • Spectrum between two ends
    • They come from the genome
  3. Cost
    • Default is bit-length
    • Instructions represent expenditure
    • Observations are acts too
  4. Technorati Tags:

One of my first videos got a spike in viewership. Thanks Boing Boing and Make Magazine!

First Boing Boing and now Make Magazine.

I hope it brings more people into the community.

Technorati Tags:

The project just got some attention from Cory Doctorow (my son and I both just read his latest book) on Boing Boing!

Technorati Tags:

This podcast episode contains some audio of the three speakers at GTNL 2 in Den Haag. I hope you can overlook the audio quality. I'll do better next time.

Technorati Tags:

The second Grethumb gathering in The Netherlands was held at the KABK in Den Haag, in a really nice auditorium with a huge projection screen. The room was a little hard to find but Joost Rekveld, who teaches there, helped by sticking signs to the wall with pointing arrows. Eventually about 25 people found their way to the auditorium and we got started.


First off was Rudolf Penninkhof, who gave us a talk about Imagination Engines, describing the approach taken to neural networks. Rudolf had music playing in the background which was generated by their technology, and he expressed his regret that although the technology and the approach was extremely interesting and had great potential, it was not open source so you can't really dig in deep.

Rudolf had some good introductory video on the subject, some long and philosophical ones, for those interested.

Then Anne van Rossum (pronounced Ah-nuh, and yes it's a normal male name in the part of NL where he comes from) showed us a nice collection of movies about the Replicator project, which is central to his pursuit of a PhD degree. Anne told us about his adventures with this fascinating European project in which self-configuring robots are the dream they're working towards. Modules are to find each other, click together, network with each other, and form a body to accomplish some specific task. They would afterwards simply dissasemble and reassemble in another configuration.

Some of the most interesting parts of Anne's presentation were the videos and the stories about a 128x128 cell visual system that was a different kind of hardware. It was visual hardware that worked on the basis of "spikes", like when our neurons get hot and bothered and then eventually flash the accumulated energy in one shot. The fascinating effect that we saw was that only changes in pixels were registered. Imagine that looking through sunglasses from a distance makes it look exactly like the sunglasses are clear. Think about that. We saw it, and talked about how it is biologically inspired.

Finally, I got up and took the group through an accelerated history of Darwin at Home, going right into a demonstration of the program that I just got running a few days previously. I showed Bits Building Bodies which is the first application built on the basis of the fluidiom-core package I'm distilling from all the different D@H programs built in the last few years. This application represents the first application of the blind-watchmaker code that I've been developing for the last couple of months.

The demonstration showed a growing Darwin at Home body being built step-by-step over and over again, while along the top of the screen you could see the binary 00101001101011011010 genome as it is being read. The cool thing about it is that you can repeat it and watch the same building happen. It's genome building phenotype.

For the coders in the audience, I then proceeded to show the Embryology class where the blind-watchmaker annotations describe how the bits cause things to happen.

I ended off describing where I want the project to go now, as a kind of virtual world scenario where people can meet and chat while they watch things evolve. I asked them who could help me bring the evolution meme to as many people as possible.

Tamas Mahr, my Hungarian programmer friend made an insightful funny comment afterwards as we were walking downtown for a beer. He said that this binary scripting language knows no syntax errors. I thought that was a safe language to have a blind-watchmaker code with.

All in all, this was a very successful get-together, and some new faces appeared. There's a potential, according to Joost, that the Media Arts department of the University of Leiden may well be willing to host the next Greythumb NL.

Technorati Tags:

Done with building the tensegrity by hand, I've decided that for now it's too difficult for me to evolve anything interesting with tensegrity shapes. There's a lot of design to be done with them, And I'll be continuing that most definitely, but for evolution I'm going to search elsewhere

In this episode of the podcast I talk about this and the direction that things are going now. I've returned to the code that makes up all the previous versions of Darwin at Home and I'm working intensely to distill the best things from them all into a toolbox that can be used to build a number of applications.

Next tuesday the 23rd of September at the Dutch Royal Academy of Visual Arts in Den Haag we will be holding the second Greythumb Netherlands gathering. If you're interested, please join the group online.

I wanted pretty badly to present something interesting at that gathering, and finally my work of the last while is starting to pay off because I've been able to build a program where "bits build bodies". The blind watchmaker project with its genetic system, is now connected to the new fluidiom-core classes I've been distilling, and producing lots of interesting geometrical phenotypes.

Technorati Tags: