We were given JSON data representing which government URLs were being visiting, along with user-agents, location, time and other relevant information.
At first I was more interesting in spending my time on a completely unrelated project writing OCaml bindings to libsmf, a Standard MIDI File library. My efforts can be found on the OCaml smf library page or on my github.
Soon, however, I started to look around at other people s projects and decided I should participate. Since I was working on a MIDI library, I decided that the perfect project for me would be to translate the data into MIDI. Using the Yojson library to parse the data and OCaml Portmidi another MIDI library I work on to generate MIDI events, I created a simple program that hashed the URL to determine which note to play, and hashed the user-agent to determine how long to play the note.
In order to better share this with other people, I went back to working on the smf library and added in the functionality to allow writing MIDI data to a file. Once that was complete, I added that into my project and created a MIDI file. Using timidity I converted it to an mp3 so I could share it with the internet!
Last weekend I attended the 3rd annual Global Game Jam, hosted at NYU. The Global Game Jam is a 48 hour video game development competition you are given a theme and you have two days to create a game based on that theme!
I arrived a little bit late to the game jam this year, but when I got there people were still forming teams. A friend of mine informed me that this year s theme was Extinction. I mingled for awhile, chatting with old friends and discussing ideas. Groups had already started to form, but none of them had ideas that interested me or they already had enough programmers. My friend and former co-worker Yury Pavlotsky was also looking for a team with little success. We discussed our ideas and when we realized we both wanted to create an eco-system simulation we decided to team up. Since we are both programmers we spent a few minutes wandering around looking for an artist to join our team. With only a few I have a team, but if I have time responses we decided to just start coding and worry about the art later.
Working with Yury could not have been easier. We both immediately agreed that we would use Microsoft XNA. We spent only about a half an hour discussing the design elements with almost no conflicts. While most teams were busy arguing over what kind of game they should make, what platform they should target, etc., we were already coding. Our idea was pretty simple we d have a grid of cells, and each cell could either be: empty, a plant, an herbivore or a carnivore. The plants would grow and the animals would eat, reproduce and die. The player s job was to keep the ecosystem in balance.
Each plant/animal had its own stats how long it lived, how often it reproduced, how much air it breathed, etc. If the air became too CO2 heavy the animals would die, conversely if it became too saturated with oxygen the plants would die. However we found this was extremely difficult to balance. Minor changes would result in huge differences with typical behavior being either everything dying too quickly, or the ecosystem rapidly bouncing back and forth between plants and animals. We ended up taking out the air balance and later, putting it back it, but only for the plants.
The plants were pretty simple they would reproduce asexually if there was an empty cell next to it. The animals, however, could move around and needed food to survive. They also needed a mate to reproduce. At first their behavior was totally randomized and based solely on the cells in their immediate area. This stupid behavior would result in the animals dying from starvation or simple not reproducing quickly enough. To fix this I decided that the animals should seek out food if they were starving and a mate if they were at the peak of their reproductive cycle. This involved a simple breadth-first search. What was really interesting, however, was the emergent behavior it caused. Each animal acted independently, and yet we would see flocking/swarming behavior! Groups of animals had the tendency to get hungry together and would all seek out food at the same time.
The search algorithm would cause significant slow down when there were a lot of animals and little food. After some simple optimizations removing almost all memory allocations in the search the speed improved but not enough. I eventually added a limit to the number of vertexes it would search. This too led to some interesting behavior animals could only see food that was within a certain distance. Since the animals would tend to group together due to mating and would flock together, it would often result in the ecosystem rotating the herbivores would eat all the plants on one side while the plants grew on the other and would start to chase the plants. The carnivores would follow the herbivores in the same manner.
At this point the programming was almost entirely done and we could finally think about art, gameplay and a name. Yury had made some placeholder programmer art earlier and we ended up loving the aesthetic. Some of our programmer friends offered to make new art for us but they agreed that the current style was perfect and didn t really need anything from them. With the art and programming out of the way, we spent the last few hours tweaking the stats for each organism, trying to get it so that it was impossible to create a stable eco-system of just plants and herbivores, and getting it so that the eco-system was just barely unstable with all three otherwise the game wouldn t end!. We also needed a name but had trouble coming up with something good. I knew I wanted it to sound kind of old-school to match the aesthetic and suggested that our title be an acronym that extinction should be spelled xtinction. It was at that point that things went downhill and we took the Juvenile approach: S imulated E nvironment X tinction Simulator.
We were done! Now it was time to relax and wait for the demos. There were almost 20 games produced at NYU and each team got a few minutes to show off what they made in front of everyone else. There were a lot of really great games! My favorite was Ned, you really suck the life out of a room made by a few friends of mine. Other impressive games were VS also made by some friends, Goldbloom about the death of print media and Thawed a text adventure about polar bears. After the presentations each team got to vote for the following categories: best overall, most beautiful, best use of theme, wild card and most potential. NYU also had a panel of judges that would choose one game as their favorite. Ned ended up taking best overall, most potential and the judges choice. Our game won best use of theme and got an honorary mention from the judges!
I love dvtm. I do a lot of development over ssh these days and having an application handle multiple terminals is practically a necessity. At first I was using gnu screen, however I found it a little cumbersome to use for my purposes. gnu screen doesn t have many layout options you are either looking at one terminal or several terminals arranged in a single stack. Switching between these is annoying as well. dvtm on the other hand has several different layouts and makes it easy to switch between them.