This planet is made of fresh clean feeds by members of the Entropia bunch
The Harvester is made of fresh flesh, clean design by Tigion, hacked-together Ruby scripts by Astro and Atom support by Neingeist
wget the RSS-1.0 feed!
Missing something?
Contact Neingeist via Mail or Jabber: neingeist@23bit.net
I recently started working with Compojure, a web framework for programming language Clojure. After playing around with basic GET and POST requests I tried to store and load data from a session. As Compojure is quiet new, there is not much documentation how to deal with sessions, particularly as Compojure and it’s API still changes fast.
In the following post I’ll show a brief example on how to create a login page with Compojure 0.3.2 running on Clojure 1.1.0.
Clojure is a Lisp dialect. So it’s a programming language based on the principles of Lisp. The interesting part about Clojure is that it runs on the Java Virtual Machine. As a developer you can therefore use the bright variety of Java written libraries in your code without touching one line of Java. Use the power of Java libraries together with the power of Lisp.
Compojure is a web framework for Clojure. It handles incoming request, offers an easy way to create servlets and provides basic functionality for HTML templates. The current stable version 0.3.2. Compojure is a young project and things change fast there, so be aware that a 0.3.2 application might not run on 0.4.
Basically it’s a per-user store managed by the server. For example a server backend can store the credentials of a user that it received in a request in this store making it possible to identify the user again when he or she does a second request. Usually this functionality is achieved by a library or by the interpreter itself (for example in PHP) and is implemented by storing the session data either in memory or on disk together with a unique identifier that is then stored in a cookie at the users computer. So when the user comes back, the cookie is read and the identifier is used to find the data for the user.
Before we work with a session, let’s create a simple webpage that displays hello world for us.
The example is straight forward. We define a set of routes. In our example the route is “/*”, so it matches everything. The route then takes a function as a second argument. In our case we use the templating mechanism of Compojure and create a simple HTML response with the (html) macro.
We then start the server using the (run-server) macro and binding our routes to a specified mountpoint. I won’t go into details about servlets but usually it is sufficient if you have a servlet running on the mountpoint “/*” and then a set of routes.
To run the server you can use a small script like this one:
#!/bin/sh
CLASSPATH=.:~/dev/clojure/compojure.jar:~/dev/clojure/clojure.jar
java -cp $CLASSPATH clojure.lang.Script net/experimentalworks/clojure/serve.clj
Before we can start adding sessions we have to be aware that Compojure has a mechanism called decorating. So you can decorate a set or routes with what Compojure calls a middleware. We will think of it as a way to enable advanced mechanism. To add the session mechanism to a set of routes use the (decorate) macro as shown in the following code:
Note the that we define a session decoration. At the moment sessions only support in-memory storage (which by the way should be usually the way you want to manage sessions). The :memory keyword here is to tell Compojure to store it’s sessions in memory. Although you can omit the keyword, I prefer writing it down so people can easily figure out how our session is stored.
Let’s create a login. We will first add a new route called /login/:user. This will tell Compojure that the last part of the query string is a parameter and it should extract it. We can then access the value using (:user params). We use the (session-assoc) function to associate our username with the session-key :loggedin. Here is what the code looks like:
You can then “login” to your site using http://localhost:8080/login/test and you Compojure will recognize you again if you go back to http://localhost:8080/
To logout, we clear the key itself. Let’s a have a look directly into the code. We use the (session-dissoc) function to drop the key (it seems that clear-session is broken in my Compojure checkout for whatever reasons..need to debug *debug*).
Use http://localhost:8080/logout to get rid of your session.
The basic idea behind Compojure sessions is simple and I hope you were able to grasp the idea a little bit. What can be annoying and what I didn’t show you is that you might run into problems within the actual implementation, although the basic stuff should work fine. Once you figured out the basics you can read and write sessions withing seconds and the code becomes clean and beautiful. Feel free to comment on this article if you like the post, it’s the only measurement for me that I can use to make sure I’m not writing stupid stuff.
I really enjoy giving talks. This is particularly because I like to teach people something and because I’m really enthusiastic about the technical things I talk about. Once of these things are obviously decentralized version control system, in particular Git and Mercurial. Finally after two years of submitting talks to various conferences, people and conferences in the PHP community start to pick up this topic. Seems that 2010 is the year of DVCS, and I’m really looking forward to give a talk about the advanced features of Git at
The talk will give a very brief overview how Git works, and will then give a more detailed insight in how Git handles commits, files, etc so that people get a very good understanding about the concepts that are needed to fully understand tools like git rebase, git reflog and git svn. The aim is to provide them will all necessary information and a few examples to get lost commits back, rebase their branches and design more complex git workflows in the future without needing to search the web or ask a guru.
A second talk will be more focused on beginners and developers coming from subversion. This talk will be part of a series of talks the german telekom is organizing. I’ll also give an extended version of this as an in-house workshop at a Munich based company.
So for me it seems that after five years, DVCS is mature enough to get into companies and that we can expect a bright variety of companies to adopt new tools and workflows. Let’s see what’s coming…
For sure I still offer Git and Mercurial trainings, so feel free to contact me (dsp ~at~ php ~dot~ net)
probably shameless self promotion
Nach zwei Naechten in Auckland zum Jetlag ueberwinden und mich-organisieren gings mit Stray Travel (dazu spaeter mehr) nach Northland zur Bay of Islands. Dort ist alles voller Straende, Inseln, usw. und das Klima ist mindestens subtropisch. Nach einer kurzen Kajakfahrt auf eine kleine Insel (mit Wein am Strand) gings am naechsten Tag zum Cape Reinga, den noerdlichsten Zipfel der Nordinsel:
Rueckfahrt ueber den 90-Mile-Beach, der uebrigens offizieller Highway ist. Auf dem Bild sieht man rechts von dem hintersten Felsen einen Baum wenn men genau hinschaut. Von dort aus begeben sich die Seelen der Maori nach dem Tod auf ihre Reise. Weitere Aktivitaeten: Sandboarding (ja, der kleine Punkt bin ich) und Bootstour in der Bay. Dann gings auch schon wieder nach Sueden zurueck.
Heute bin ich in Thames auf der Coromandel Peninsula, dem idealen Ausgangspuntk fuer die fantastische 7-stuendige Wanderung zu den knapp 800 Meter hohen Pinnacles, von denen man fast rundum auf die umliegenden Berge schauen kann und das Meer zu beiden Seiten der Halbinsel sieht.
Die Vegetation ist hier auch deutlich gruener als im leicht trockenen Norden: schoene Baumfarne und diverse Palmen wechseln sich mit anderem Gruenzeug ab.
Morgen gehts nach Hahei auf der anderen Seite der Halbinsel.
Achja, mein aktueller Transportmodus ist wie folgt: Stray Travel faehrt kreuz und quer in mehreren miteinander kombinierbaren Routen durch die Gegend, haelt auch zwischendurch an den interessanten Orten an (Supermaerkte, Vogel-Krankenhaus mit Kiwi-Streichelmoeglichkeit, Aussichtspunkte) und setzt einen abends an einem Backpacker-Hostel ab mit garantierter Unterkunft fuer die erste Nacht. Am naechsten Morgen faehrt man weiter oder bleibt eben wo man ist. Hier in Thames halten sie zwar nicht, aber man kann sich auch einfach so absetzen und wieder aufsammeln lassen. Sehr praktisch, aber natuerlich auch etwas unentspannt weil man immer zusammen mit einer Busladung Backpacker ankommt.
Bin auch bisher nie alleine unterwegs gewesen, man findet im Bus oder in den Hostels sehr leicht Leute fuer alle Aktivitaeten. Achja, apropos Hostels: Mein Lebensstandard hat sich zusammen mit meinem scheinbaren Reichtum dramatisch verringert: fuer das Geld, das in Thailand einen Bungalow am Strand und 3mal Essen im Restaurant ermoeglicht, bekomme ich hier ein Bett im 8er-Schlafsaal (ohne Essen). Aber dafuer habe ich auch mal wieder gekocht...
tja, tja, die pilocka krach wollte ich schon im sommer bloggen, nu passiert’s halt im februar. enjoy!
(Dieser Artikel ist auf englisch, weil ihn die Mitglieder der Intrepid-Reisegruppe vielleicht lesen moechten)
I am now in Saigon a.k.a. Ho Chi Minh City. We have traveled there entirely by land (and by boat) from Bangkok, where our tour started with a bus ride to the Thai-Cambodian border at Poipet where our group leader's stories about Cambodian corruption got instantly confirmed by the extra $5 we paid for faster visa processing... After another 3 hours or so we reached Siem Reap where we would stay for three nights. Siem Reap is located right next to the Angkor Archeological Park and seems to be Cambodia's tourist center for this reason: there are lots of modern hotels, bars, restaurants and the ubiquitous souvenir shops. The Angkor Park itself contains many individual sites (temples, cities, ...) of the Angkor Empire and is most famous for the temple of Angkor Wat (where we watched a particularly unspectacular sunset) and the city of Angkor Thom, containing many more interesting places. The temples are in various states of decay (and reconstruction) and some of them had been converted from Hinduism to Buddhism and back many times, resulting in an interesting mix of symbolism. There are about a million pictures of the temples on the net that are all better than mine, but here you go:![]()
Cambodia is a very flat country (a "pan" with mountains at the borders) with the Great Lake "Tonle Sap" in the middle. It is currently dry season which means that most of country's rice fields look gray and deserted, only a few are irrigated and provide a saturated green for contrast. The lake's water level fluctuates accordingly. Here is what it looks like without water:![]()
Another trip from Siem Reap brought us to the "floating" village of Kampong Phulk at (or in) the lake where about 800 families live in houses built on stilts up to 10m in height. In the wet season the Tonle Sap's water level rises to just below the houses' floor and transport is only possible by boat, but now we could just walk on the ground below. Buying and distributing schoolbooks to the village's children sure was a unique experience..
.
We continued to Phnom Penh, where the depressing part of our trip awaited us and during our Visits of the Genocide Museum and the Killing Fields mass graves the group didn't talk much.
After a bunch of other activities in the city (Cyclo-tour, Silver Pagoda, Emerald Buddha, Royal Palace, Partying at the Mekong Promenade) we left after two nights via boat, crossing the Vietnamese border on the Mekong river and finally arriving in Chau Doc where we did a motorbike tour to the top of a nearby mountain and tested the local dalicacies of rat and snake, fruitbat being sold out. We continued to Saigon, which feels a little bit like Italy: warm climate, christian churches, crazy traffic.
I have just bought a (photocopied) LonelyPlanet guidebook for New Zealand for a mere 130000 Dong and will now start looking for a nice accomodation in Auckland. Cleaning my shoes with a toothbrush to comply with the crazy biosecurity laws is next.
Thanks to Tom, Lynda, Rebecca, Kieren, Matt, Brendan, Michael and especially Limny for an amazing trip!
Mehr zur Warnung an alle Leser: Ich bin gerade dabei mal ein Punkte auf der Todo-Liste für diesen Blog abzuarbeiten:
It is still kind of hard for someone who is okay at writing code, but has no idea about the Nintendo DS, to get started writing DS code. As you might or might not know, I’ve written a demo and other small things for the NDS before, so here is a bunch of random things that are really useful when writing DS code, and enough to get you started, as compressed as I can manage, somewhat geared towards wanting to write demos. (Yes, bullet points. So sue me.)
PS: About the master bright register: Here is everything you should need to know.
// LOVE COLORED MASTER BRIGHT <3 mode flags:
// 0 0000 fail, nothing
// 1 0001 fail, nothing
// 2 0010 fail, nothing
// 3 0011 fail, nothing
// 4 0100 brightens
// 5 0101 fail, all white
// 6 0110 brightens
// 7 0111 fail, all white
// 8 1000 darkens
// 9 1001 fail, all black
// A 1010 darkens
// B 1011 fail, all black
// C 1100 darkens
// D 1101 fail, all black
// E 1110 darkens
// F 1111 fail, all black
u16* master_bright = (u16*)(0x400006C);
u16* master_bright_sub = (u16*)(0x400106C);
void fade( s16 fade_val ) {
memset( master_bright, (1<<7) | fade_val, 2 );
memset( master_bright_sub, (1<<7) | fade_val, 2 );
}
void fadew( s16 fade_val ) {
memset( master_bright, (1<<6) | fade_val, 2 );
memset( master_bright_sub, (1<<6) | fade_val, 2 );
}
PPS: Excuse the conversational tone, this was originally written for a private forum. I’ve cleaned it a little, but not much. The DS is a fun plattform to write stuff for. Go have fun and make a kickass demo. :3
After reading a lot about interesting stuff happening at this years FOSDEM, I decided very short term to go there. The FOSDEM in Brussels is probably one of the biggest (if not the biggest at all) meetings of free software developers. Unlike similar events (like several Linuxtag-events in Germany), it's focus is mainly on developers, so the talks are more high level.![]()
Diese Woche war ich fast schon regelmäßig in der Butze, um endlich mal ein paar Dinge an der CB in Ordnung zu bringen und zu erledigen. Angefangen hat das ganze mit einem recht entspannten Tag zusammen mit Peter, welcher mir beim Entfernen des kompletten Auspuffsystems behilflich war. Aber von vorne:
Auch wenn ich letztes Jahr nicht allzu viel gefahren bin hat es gereicht, die 48Mm zu erreichen, womit mal wieder eine Inspektion mit fast allem drum- und dran fällig ist. Das meiste ist nur Prüfen, mit dem Ölwechsel werde ich noch etwas auf wärmere Temperaturen warten, da ich erst vor 7Mm bei Übernahme des Krades gewechselt habe, und das neue auch nicht gleich wieder mit kaltem feuchten Kurzstreckenbetrieb "ruinieren" möchte. Bleibt an aufwändigen Aufgaben primär die Ventilspielkontrolle übrig, für die Vergasersynchronisation will ich mir nochmal einen Synchrontester in Art von diesem selbst bauen, auch wenn bei einem Zweizylinder wohl ein simples Schlauch-U ausreicht. Zusätzlich war noch das lackieren des Krümmers geplant, da dieser doch farblich eher nach Rost aussieht. Zu Beginn dachte ich auch nur an eine optische Maßnahme, später (s.u.) sollte sich das noch ändern. An Farbe habe ich mir eine Dose Ofenrohrfarbe 1200°C besorgt, in der Hoffnung, dass sie die Temperaturen halbwegs lange überlebt.
Also stehe ich zu Beginn des Tages (Nagut, um 12 Uhr, aber es ist meine Urlaubswoche) in der Butze, im Rucksack ein paar Schleifblätter für den Exzenter und einer Drahtbürste für die Bohrmaschine. Und fluche. Eigentlich hatte ich mal vor, zuerst den Endtopf zu lösen, um danach den Krümmer möglichst Lastfrei abbauem zu können. Etwas Vorsicht schadet ja nie, erst recht nicht bei eher empfindlichen Aluminiumstehbolzen und einem gefühlt 5kg schweren Ofenrohr am anderen Ende. Aber ‘Slip On’ scheint mehr ein zweitklassiger Euphemismus als eine Vorgangsbeschreibung zu sein, so dass ich nach einigen Versuchen die Krümmerschrauben am Motorblock löste, nicht ohne sie davor sicherheitshalber mit WD40 zu behandeln, und die komplette Einheit mit Peters Hilfe abnahm.
Das folgende Trennen dauerte dann unter Zuhilfenahme von Hammer und Meißel (um das Anschlussstück des Endtopfes etwas konisch zu weiten) eine geschätzte Stunde, wobei daran auch die immer wieder zwischengeschobenen Unterhaltungen mit Peter mit Schuld sein dürften. So stark wie die Auspuffdichtung dann noch am Krümmer klebte verwunderte mich dieser innige Zusammehalt dann aber nicht mehr weiter.
Danach begann der Fleißteil der Arbeit, mit Drahtbürste an der Bohrmaschine sämtlichen Dreck, Schmodder und Rost von der Oberfläche entfernen, bis alles wieder schön glänzt. Auf den Bildern erkennt man ganz gut die rostigen Stellen, bei den auf ebenen Flächen liegenden konnte ich mit dem Exzenter noch halbwegs gut das rostige Material komplett entfernen, in den Ecken der Verdickung zur Befestigung am Motorblock oder zwischen den Krümmerrohren war dies leider nicht so möglich. Damit beendete ich den Tag auch mit einem fast fertiggestellten Krümmer und weiteren, günstiger geformten Drahtbürsten auf dem Einkaufszettel.
Why lisp can be sooooo sweet. A clojure class extending java.
compile it
(set! *compile-path* "build") (compile 'net.experimentalworks.clojure.outdegree)
Ah yeah and hsv2rgb transformation:
So, Lena ist heute morgen Richtung Deutschland abgeflogen :'(
Und nach ein wenig Rumgerenne bin ich nun im Besitz des richtigen Visums fuer Vietnam und damit steht dem Trip, der in 25 Minuten mit einem ersten Meeting beginnt, nichts mehr im Weg.
Aber zuerst noch ein wenig zu Bali : Das auffaelligste (neben der wunderschoenen Natur, die man schon bald fuer selbstverstaendlich haelt) ist die Religiositaet der Leute. Jeden Morgen und jeden Abend hat der Familienvater unseres Homestays in Tirtagangga (selbstredend mit Blick von der Terrasse auf den Sonnenaufgang ueber den Reisfeldern beim Fruehstueck) an den drei Schreinen (Minitempeln?) Opfergaben dargebracht und auch auf den Boden vor unserem Haus wurden Gaben abgelegt um die im Boden befindlichen Daemonen abzulenken. Das war nicht etwa ein Einzelfall, auch in den touristischeren Orten sieht man staendig die Menschen ihre Religion ausueben, im Gegensatz zu uns auch nicht vorwiegend die aelteren oder konservativeren Menschen, sondern einfach alle. Haustempel, Dorftempel (pro Dorf mindestens 3 Stueck mit verschiedenen Funktionen), inselweite Tempel... alles ist voll davon, und aktiv benutzt und gepflegt.
Von unseren Aktivitaeten sind wahrscheinlich vor allem zwei erwaehnenswert: Erstens Schnorcheln im Nationalpark, mit fantastischen Korallen und zehntausenden von Fischen aller Groesse und Farbe. Die Tauch- und Schnorchelortie hier sind beruehmt, aber uns fehlt natuerlich der Vergleich... viel bunter kann es aber nicht mehr werden. Fotos gibts davon natuerlich leider keine.
Zweitens unsere Besteigung des Gunung Agung, des hoechsten Berges der Insel (ein Vulkan, wie alle groesseren Berge auf Bali). Aufstehen um 1 Uhr nachts, Fahrt zu einem einsamen Bergtempel auf 900m Hoehe, von da aus ab 2 Uhr mit Taschenlampe und oertlichem Fuehrer in 4 Stunden 2000 Hoehenmeter Aufstieg, um den Sonnenaufgang als erste zu sehen. Und nebenbei ganz Suedbali, morgens noch wolkenlos. Vom Muskelkater fang ich garnicht erst an zu erzaehlen :)
Hier ein Dschungeltempel der nur bei Vollmond benutzt wird und einige Merus (Pagoden) in Besakih, dem Muttertempel:
Und der Blick vom Gunung Agung um 6 Uhr morgens:


It’s kind of a no-brainer to visualize the Earth, any other planet, or moon on a spherical display. But besides rotation, the multi-touch interface allows us to do even more. We are thinking about games and new forms of interactive visualizations to be more precise. We are very busy right now as Johann is exploring Asia, New Zealand, and Australia, whereas I’m working two jobs, so it’s all taking us a little longer. Nonetheless, bear with us and stay tuned for more.
Return-Path: info at packstation.de
X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=disabled
Received: from s153*****.onlinehome-server.info (EHLO s153*****.onlinehome-server.info) [87.106.*****]
by mx0.gmx.net (mx087) with SMTP; 22 Jan 2010 00:39:08 +0100
Date: 18 Jan 2010 03:31:47 +0100
Message-ID: 20100118023147.2224.qmail at s153*****.onlinehome-server.info
To: meineemailadresse_neinnichtwirklich at gmx.de
Subject: PACKSTATION Systemupdate
From: DHL AG info at packstation.de
X-GMX-Antivirus: 0 (no virus found)
X-GMX-Antispam: 0 (Mail was not recognized as spam);
Content-type: text/html;
Sehr geehrte(r) Sebastian Raible.
Da wir in den letzten Wochen unser Serversystem auf den neusten Stand gebracht haben, bitten wir Sie, aktiv bei unserem umfassenden Systemcheck mitzuwirken.
Dieser dient dazu, eventuelle Fehler zu beseitigen. Wir bitten Sie daher darum, sich auf der DHL-Seite einzuloggen um Ihre PACKSTATION-Daten zu überprüfen.
http:// PACKSTATI 0 N.6x. to/index.php?id=***************
Schlägt der Loginversuch fehl, bitten wir Sie, sich unter folgender Nummer zu melden:
0800 343 *** ** (0 ct/Min*)
Viel Spaß weiterhin mit Ihrer PACKSTATION wünscht Ihnen
Ihr PACKSTATION Team
*) Aus dem deutschen Festnetz
-----------------------------------------------------------
DHL Vertriebs GmbH Co. OHG
Rathausplatz 1
10234 Berlin
Für mein Wohnzimmer wünschte ich mir aus zwei Gründen eine etwas besondere Heizung. Durch die vormalige Nutzung als Pferdestall und des dabei abgesekten Fussbodens sind alle Wände mit einem ziemlich unpraktischen Betonsockel versehen. Vor diesen Sockel jetzt noch einen dicken Heizkörper zu schrauben würde meiner Meinung nach einfach nicht gut aussehen. Am liebsten wäre mir da ja eine Wandheizung gewesen, doch graute mir vor dem damit verbundenen Aufwand. Da entdeckte ich das Prinzip der Heizleisten. Heizleisten bestehen aus kleinen Konvektoren die sich an allen Außenwänden befinden. Durch die grosseflächige Verteilung der Heizleistung soll weniger Staub als bei einem herkömlichen Heizkörper aufgewirbelt werden und durch die gleichmässige Erwärmung aller kalten Aussenwände stellt sich die Wohnfühltemperatur bei deutlich niedrigeren Temperaturen ein. Man kann das im Winter sehr deutlich vor großen Glasflächen spüren. Trotz warmer Luft im Raum, fühlt man immer die Kälte.
Heizleisten gibt es von verschiedenen Herstellern, die alle Ihre Vor- und Nachteile haben. Fest mit den Rohrleitungen verlötet Konvektoren haben natürlich einen deutlich besseren Wärmeübergang, worauf die Hersteller auch immer hinweisen und versuchen damit die anderen Systeme abzuwerten. Ein schlechterer Wärmeübergang bedeutet aber nun nicht das da Wärme verloren geht (Physik: Energierhaltung) sondern nur das man etwas mehr Konvektorenfläche oder eine leicht höhere Vorlauftemperatur benötigt um auf die gleiche Leistung zu kommen. So schlecht kann der Wärmeübergang bei den gestekten Konvektoren auch nicht sein, auf ein heisses Rohr gesteckt vergingen nur wenige Sekunden bis der Konvektor überall heiss geworden war.
Ein großer Vorteil aller Stecksysteme ist das man beliebige Rohrlängen verbauen kann und gerade im Altbau macht sich diese Freiheit schnell bezahlt.
Normalerweise gehört zu diesen Heizleisten auch immer eine Abdeckung aus Holz oder Metal. Um die unschönen Betonsockel zu verstecken entschied ich mich aber für eine andere Lösung. Mit der Oberfräse entstand aus Kiefernleisten und Kiefersperrholz eine passende Wandverkleidung. Die Ablageplatten sind aus geöltem Birkenholz, welches der örtliche Baumarkt zu einem günstigen Preis verkauft.
Wie man auf den anderen Bildern sehen kann, werden diese “Fensterbänke” bereits ausgiebig genutzt
Scala is a fascinating language. Running on the Java VM, Scala offers a powerful mixture from both the imperative Java world and functional programming including modern techniques like Actors. Personally I prefer to not just learn programming languages, but also try them out while reading through the book.
As I wanted to have nice a build system for my PHP subversion checkout, I used this need as a project to start coding Scala. So what do I exactly need? I want to build multiple versions of PHP from the same branch without checking out the code twice. I also want to configure these builds somewhere without always typing in the parameter list or so. For further versions I want to be able to configure these in a file that can easily be distributed to other machines.
I set down and wrote a parser for a configuration file that can configured build targets which is then build by
the program. The configuration file I used is specialized for this purpose, which is why I didn’t used something like ant or so. The result is called bauaffe-3.0.0a1.jar.
I’ll just show a few things done in the project, but mainly focus on what the nice script can do. Further blog posts will be about the actual implementation.
The configuration looks like this
$ cat ~/.buildmaker
begin default configuration
define source "/Users/dsp/dev/c/php-src"
define build "/Users/dsp/dev/c/php-src/build"
define defaults as
with "iconv=/opt/local"
build trunk as
"php60" using defaults
"php60-debug" using defaults
enable "debug"
build branch "PHP_5_3" as
"php53" using defaults
environment PHP_AUTOCONF="autoconf213"
"php53-debug" using defaults
enable "debug"
environment PHP_AUTOCONF="autoconf213"
.
Proper indention is not necessary (as e.g in python).
def begin : Parser[Configuration] =
"begin" ~ ("default" | stringLiteral) ~ "configuration" ~ rep(define | build) ^^ {
case "begin"~name~"configuration"~confs => new Configuration(name, confs)
}
config ::= "begin" ( "default" | string ) "configuration" ( define | build )*
Did I mention that the actual parser is 170 lines of code with usual indention and formatting?
Configuration
The configuration file is searched in ~/.buildmaker, or if ~/.builmaker doesn’t exists, buildmaker.conf in the current directory. How do you configure the tool? First of all you can specify a configuration. It is usually called “default”. It is not yet supported to name it differently, although the parser is able to parse it. In further versions multiple configurations per file are allowed.
Variables
Variables are set using the define syntax. At the moment you can set the build and source variable as well the defaults variable, which is usually a block of statements that can be used in the branch configurations.
Branches
A branch is configured using the build syntax. You first have to specify which branch to build. Every branch can then configured to have build target with a given set of options. Branch options are:
. You can specify using defaults which will cause the runner to use the options specified in the defaults define.
At the moment the parser will not do a good job in notifying you what you are allowed to do and what not, although pure parse error will be emitted. You can also not set any other variable than the described once.
Building
Calling
$ java -jar bauaffe-3.0.0a1.jar list TARGET LAST BUILD php60 None php60-debug None php53 Sat Jan 09 16:55:12 CET 2010 php53-debug Sat Jan 09 16:59:37 CET 2010
gives you a list of parsed targets and their last build date. You can build a target using
$ java -jar bauaffe-3.0.0a1.jar
or build all using
$ java -jar bauaffe-3.0.0a1.jar all
Please notice that the current version requires that you now what you are doing. You might miss some error messages or find them not useful. I’ll change this before the first release, if I’ll do a final version of it. I hope you like the little tool.
Scala (pronounced /ˈskɑːlə, ˈskeɪlə/) is a multi-paradigm programming language designed to integrate features of object-oriented programming and functional programming.[1] The name Scala stands for “scalable language”, signifying that it is designed to grow with the demands of its users.
A new page is created:
Releases, on which demoy things I made a part of are linked.
(Also, a picture that stares into your soul.)
Following up on last year's "algorithmic music in a box", here is the video of wesen's 2009 talk at the CCC congress: "advanced microcontroller programming". A big shoutout to the video crew that managed to put all the videos online in a matter of days (wow!). This talk is not about music or MIDI at all (although the subject is used as an example), but about the development "discoveries" that were made during this intense year of programming. Put your geek hat on, download the slides and notes and enjoy some nerdy programming fun!.

Since we have been back from Piksel09 in Bergen, Norway, Johann was working very hard to get the visualization right which turned out to be not that easy and involved some serious math. In theory it should be easy, but with hardware and software involved, the devil is in the details.
Much kudos to Johann for pulling it off!
This is getting old, isn’t it?
Well, a happy new year to you. May you have a great 2010.
(If the video does not work yet, check back later, or try the video at http://aka-san.halcy.de/happynewyear.mp4 )
Recordings of all the presentations and live events at Piksel Festival 2009 are available online in the Piksel09 Distributed Multimedia Data Base.
Embedding our talk didn’t really work, so I put it on Vimeo after it was rejected on YouTube because of this ridiculous time limit they have.

We recently participated in the Piksel Festival in Bergen, Norway. Besides Bergen being a very rainy but lovely place, Piksel09 was very inspiring, and we met lots of interesting people. Our talk was scheduled for Sunday, November 22, at Bergen Kunstmuseum, and I suppose that, according to the audience response, our presentation went quite well.
Here are some pictures of our hemispherical multi-touch installation we took for the presentation. Unfortunately, WordPress doesn’t really like images with a resolution of 16:10, so you have to make just another click.
Last but not least, we would like to thank the Karlsruhe Institute of Technology and Prof. A. Schmitt for supporting us.
OH, and we even got free T-shirts!!11!einself!

We are currently very busy, so to keep you waiting, the video of wesen's talk "algorithmic music in a box" at last year's 25c3 in berlin. This video is actually pretty interesting cause it showcases the very few steps along the current opensource vision of the minicommand. Wesen will hold another talk at this year's 26c3, this time focusing on straight-on technical facts about developing for microcontroller architectures.