Thursday, December 27, 2007

My Linguistic Profile

Your Linguistic Profile:

50% General American English

30% Yankee

10% Dixie

5% Upper Midwestern

0% Midwestern

Sunday, December 23, 2007

Buchtipp: Programming Collective Intelligence

Meine neueste Buchanschaffung und Buchtipp ist
"Programming Collective Intelligence" von Toby Segaran.


Was der Titel elegant verschweigt (vielleicht um potenzielle Käufer nicht abzuschrecken): Das Buch ist Machine-Learning angewendet auf moderne Web-Anwendungen. Das Inhaltsverzeichnis offenbart dies sehr deutlich. In dem Buch werden behandelt:

  • Clustering (Item-based und Hierachisches)
  • Künstliche Neurale Netzwerke
  • Stochastische Optimierung (Hill-Climbing, Simulated Anneling, etc)
  • Support Vector Machines
  • Naive Bayesian Classifier
  • Decision Tree Learning
  • Genetic Programming
  • Nicht-negative Matrix Faktorisierung

Dies ist schon eine ziemlich beeindruckende Liste von Verfahren. Viel mehr steht im "Mitchell" auch nicht.

Eine Besonderheit des Buches ist die absolute Abwesenheit von Pseudocode. Jeder Algorithmus wird in lauffähigen Python-Code dargestellt. Bei einigen komplexeren Ansätzen finde ich Pseudocode immer noch lesbarer, aber so sinkt die Hürde mit den Algorithmen direkt "zu spielen" ungemein.

Hinzu kommt, dass für jeden Ansatz auch immer praktische Beispiele für das Web angegeben werden. Es werden u.a. Empfehlungen auf Basis von del.icio.us-Daten gegeben, Personen auf Facebook gematcht und Preise auf eBay geschätzt. Alles extrem aktuelle Anwendungen inkl. Input (meist: HTTP-Request and Rest-Webservice und XML parsen) und Output z.B. ein Entscheidungsbaum als Image exportieren) der Ansätze, die in Python-Code dargestellt werden.

Ein weiteres Highlight des Buches z.B. im Vergleich zur Vorlesung "Maschinelles Lernen" ist in meinen Augen die Diskussion über die Auswahl und Parametrisierung der Ansätze. Es wird dargelegt, wann welcher Ansatz möglicherweise bessere Ergebnisse liefert, aber auch welche Auswirkungen Parameter haben und z.B. auch die tendenziellen Unterschiede zwischen Gini-Koeffizienten und Entropy beim Entscheidungsbaum-Lernen. In der Vorlesungen werden die Verfahren zwar skizziert, aber es gibt keine Beispiele realistischer Größe oder andere Hilfestellungen. Dies ist in der Form auch nicht unbedingt Aufgabe der Vorlesung. Ich sehe das Buch deshalb komplementär zur Vorlesung.

Diesen Zweck erfüllt das Buch meiner Meinung nach hervorragend und es macht Lust die Beispiele sofort zu nehmen, auszuführen und weiterzuentwickeln.

Allerdings sind einige Ansätze schon ziemlich abgefahren - Wird genetische Programmierung tatsächlich irgendwo eingesetzt? Auch habe ich teilweise das Gefühl, dass mehr Hintergründe/Theorie notwendig sind, um einige Ansätze auf neue Probleme anwenden zu können. Ob für Entwickler ohne Informatik-Background eine 2-seitige Einführung in Lineare Algebra ausreicht, um nicht-negative Matrixfaktorisierung auf andere Problemen anwenden zu können, bezweifele ich.

Saturday, December 22, 2007

Artikel über Unittesting (in .NET)

Als ich noch vor zwei Wochen bei dem Wort "JUnit" angeguckt wurde wie ein Alien und nachdem etwas schief gegangen ist hämische Bemerkungen kamen, habe ich wieder bemerkt, dass Unittesting von den meisten Uni-Absolventen immer noch nicht wirklich wahrgenommen wird.

Da kommt es mir gerade gelegen, dass Karl Sequin diese Woche einen ausführlichen Artikel über die Unittesting veröffentlicht hat. Die von ihm vorgestellte Toolchain ist zwar auf .NET ausgerichtet, aber ersetze NUnit durch JUnit und RickoMock durch jMock und auch der Toolchain-Abschnitt ist weiterhin grundsätzlich gültig:

Sein Fazit ist:

But after my first project [using unit testing], I learnt a lot about what did and didn't work. One thing that immediately became clear was how much cleaner my code became. I quickly came to realize that if something was hard to test and I rewrote it to make it more testable, the entire code became more readable, better decoupled and overall easier to work with. The best advice I can give is to start small, experiment with a variety of techniques, don't be afraid to fail and learn from your mistakes. And of course, don't wait until your project is complete to unit test – write them as you go!

Der Artikel ist Teil der Serie "Foundations of Programming", die insgesamt sehr lesenswert ist.

Monday, December 17, 2007

Die Prüfungsordnung: Notenberechnung im Master

Für eine Bewerbung soll ich gerade meine Master-Endnote schätzen. Zeit einmal in die Prüfungsordnung die Notenberechnung nachzulesen. Im Gegensatz zur komplizierten Berechnung im Bachelor ist es erstaunlich einfach:

Die Note nach §19(2) setzt sich auf folgenden Elementen zusammen *:

  • Modulnote "Softwaretechnik" (8 ECTS)
  • Modulnote "Eingebettete Systeme und Systemsoftware" (8 ECTS)
  • Modulnote "Modelle und Algorithmen" (8 ECTS)
  • Modulnote "Mensch-Maschine-Wechselwirkung" (8 ECTS)
  • Modulnote "Vertiefungsmodul" (8 ECTS)
  • Modulnote "Projektgruppe" (8 ECTS)
  • Modulnote "Nebenfach" (12 bzw. 10 ECTS bei Wiki)
  • Note Abschlussprüfung (16 ECTS)
  • Note Master-Arbeit (50 ECTS)
Wichtig ist die Beschränkung der Projektgruppe auf 8 ECTS-Punkte anstatt der 26 ECTS, die ihr nach der normalen auf der Zeit-basierenden Rechnung zustehen würden.
Die Master-Arbeit hat damit einen Anteil von 40% an der Gesamtnote. Die Abschlussnoten (Masterthesis, Abschlussprüfung) machen insgesamt mehr als 50% aus. Wenn ich damit zum Zweck meiner Recherche zurückkehre: Eine Schätzung der Gesamtnote ist nicht wirklich möglich. Aber immerhin ist die Note hier einfach zu berechnen.
* Ich gehe hier der Einfachheit wegen davon aus, dass die Projektgruppe in dem Vertiefungsgebiet absolviert wird. Wenn dies nicht der Fall ist, dann muss eines der Modulnoten durch das 3. Modul im Vertiefungsgebiet ausgetauscht werden.

Video: High-Performance Wordpress

This is a video about scaling the blogging site wordpress.com using techniques like WP-Cache and horizontal database partitioning using a "a plugin" called HyperDB.

The video is really interessing, but I woundered about the calculation of the maximal number of pages views possible with several configurations. The speaker claimed for example that the base wordpress installation can handle 8 requests per second and the can therefore handle 691.000 requests a day. But this is only true if the requests are uniformly distributed around the day.

When I plan to handle the requests even at the peak times (I mean day peak times not really extraordinary events like a Digg-attack), you can handle 8 requests per second at the peak, not on the average. Using the average over-the-day distribution of juli-blogs.de (based on the hours average) with peaks at 19h, I get a number that is smaller by more than a factor of 4. And even that is highly aggregated and not conservative calculation. Ok, even that number is clearly high enough for most wordpress sites (sure for dirkmeister.de ;-) )

Saturday, December 15, 2007

Alte Erinnerungen

Vor vielen Jahren war ich während meiner Wehrdienstzeit u.a. als Rollenspieler ("darstellender Soldat") in der Ausbildung für Auslandseinsätze eingesetzt. Es war eine interessanter, aber auch harte Zeit.

Das Video "Wie die Bundeswehr auf Extremsituationen in Auslandseinsätzen vorbereitet" von zeit.de gibt einen kleinen Einblick in eine solche Ausbildungsarbeit (nicht meine!). Die Szenen mit dem Sozialwissenschaftler kann man dabei mal getrost ignorieren.

Wednesday, December 12, 2007

Die Prüfungsordnung: Vorlesungen auf Englisch

Es gibt doch immer wieder Kleinigkeiten in der Prüfungsordnung, die im Zweifelsfall extrem wichtig (um nicht zu sagen Studiums-verlängernd) sein können.

Heute: Englisch in der Master-Prüfungsordnung

§3(3): Alle Studierenden müssen Module und zugehörige Prüfungen im Hauptfach mit einem Umfang von mindestens 24 Leistungspunkten in englischer Sprache absolvieren.

Artikel §16(5) konkretisiert diese Anforderung weiter:

Module und zugehörige Prüfungen im Hauptfach mit einem Umfang von mindestens 24 Leistungspunkten müssen in englischer Sprache absolviert werden. Dies bedeutet im Rahmen dieser Ordnung, dass Vorlesungen bzw. Materialien in englischer Sprache gehalten werden bzw. vorliegen und die Prüfungen einen englischsprachigen Anteil von mindestens einem Drittel besitzen.

24 Leistungspunkte entsprechen 6 Master-Vorlesungen. Von den 10 normalen Vorlesungen, die man mit Hauptfach absolviert müssen also 6 auf Englisch sein. Das ist mal ordentlich. Bisher bin ich immer davon ausgegangen, dass ich relativ viele Vorlesungen auf Englisch gehört habe, aber so viele sind es dann auch wieder nicht - Woher auch nehmen, wenn nicht stehlen? So viele Vorlesungen werden ja auch nicht auf Englisch angeboten.
Und auch hier gilt mal wieder meine Aufforderung: Bitte weniger Einschränkungen im Studium. Ich möchte die Vorlesungen mit interessanten Themen belegen. Solche Regeln zwingen Studenten dazu Vorlesungen nach derartigen - ich nenne es mal so - willkürlichen Regeln auszuwählen anstatt nach Schwerpunkt.

Sunday, December 09, 2007

Ahlblog: Der Wert kleiner Klassen

Eine Schande, dass ich das "Ahlblog" von Martin Ahlborg nicht schön früher erwähnt und verlinkt habe. Die kleinen Programmiertipps und seine Gebote für Programmierer sind schon lange eine Erwähnung wert gewesen.

Herausgepickt habe ich mir hier den Artikel "Klein aber Fein - Der Wert kleiner Klassen" vom 3. September. In diesem Artikel beschreibt der Autor die Daumenregel, dass Klassen nicht zu groß werden sollten.

Klassen können [...] zu groß werden, weil sie borgmäßig Aufgaben von anderen Klassen assimilieren. In vertikaler Richtung kann eine Klasse beispielsweise gleichermaßen Highlevel- und Lowlevel-Funktionen haben. Dieses Problem findet man oft bei Kommunikationsschnittstellen. Da gibt es dann eine Klasse, die sowohl die ganzen Lowlevel-Kommunikationsdetails kapselt als auch Funktionen, die eigentlich ins Datenmodell gehören. In horizontaler Richtung kann eine Klasse Funktionalität implementieren, die eigentlich auf mehrere Klassen aufgeteilt werden sollte. Man kann dies gut erkennen, wenn man einen Teil der Klasse entfernen kann, ohne den Rest kaputt zu machen.
Was bringen mir eigentlich kleine Klassen? Nun, hauptsächlich wird man flexibler. Programme lassen sich leichter erweitern, da sich Erweiterungen auf die Implementation neuer Klassen und hier und da ein paar kleinen Codeänderungen beschränken. Ebenso erhöht sich die Wiederverwendbarkeit des Codes. Dadurch kommen weniger Codewiederholungen vor, eine der Hauptursachen für so richtig fiese Bugs.
Kleine Klassen lassen sich auch besser testen. Große Klassen tendieren dazu, viel Funktionalität intern zu kapseln. Es gibt keine Möglichkeit diese Funktionen direkt zu testen. Nutzt diese Klasse jedoch andere Klassen, die jeweils einen Teilbereich der Funktionen implementieren, dann lässt sich dieses Konglomerat besser testen, weil ich damit quasi Testschnittstellen geschaffen habe. Ich kann jetzt interne Funktionen testen, ohne dass ich Raum und Zeit verbiegen muss.

Meiner Erfahrung nach, ist die Regel, dass eine Klasse nur reine Aufgabe haben sollte, die entscheidendere und passendere Daumenregel. Eine Folge dieser Regel sind dann meist kleinere Klassen. Deshalb störe ich mich auch etwas an dem Hinweis auf 400 Lines of Code (aber auch der Autor sieht es nur als ungefähren Wert). Dennoch ein gut geschriebener, lesenswerter Artikel wie (ich befürchte ich wiederhole mich) viele Artikel in dem Blog.
"Head First Design Pattern" nennt diese Regel "Eine Klasse sollte nur einen Grund haben sich zu ändern", aber im Endeffekt läuft es auf das Gleiche hinaus.

TR: A Pattern Language for Overlay Networks

Durch Zufall bin ich auf ein interessantes Paper zum Softwareentwurf von Peer-to-Peer-Systemen gestoßen: "A Pattern language for Overlay Networks - Design Patterns in Peer-to-Peer Systems " von Dominik Grolimund, ETH Zurück und heute Entwickler des P2P-Storagesystems Wua.la.

Durch eine Untersuchung des Quellcodes von zahlreichen Open-Source-P2P-Systemen aus dem praktischen und dem akademischem Umfeld (von LimeWire über Bamboo to FreePastry) hat der Autor des technisches Berichtes erfolgreich verwendete Lösungen für häufige Entwurfsprobleme (Pattern) extrahiert. Die Pattern gliedern sich in die Abschnitte "Application Interaction", "Messages", "Message Handling", "Routing", "Local Node", "Protocol", "Remote Node" und "Network Interaction".

Ich finde den Artikel schon deshalb interessant, weil er sich mit dem Softwaredesign von P2P beschäftigt. Normalerweise liegt der Fokus in dem Bereich quasi ausschließlich auf dem Systementwurf. Aber reale Systeme mit der hohen Komplexität brauchen auch ein angemessenes Softwaredesign.

Da Algorithmen für Sensornetzwerke aus der Softwaredesignperspektive eine hohe Ähnlichkeit mit Peer-to-Peer-Systemen (aus Systemdesignsicht ist dies so nicht der Fall, aber auch dort existieren Gemeinsamkeiten) ausweisen, wäre der technische Bericht auch in der Projektgruppe hilfreich gewesen. Wir müssen zwar nichts "real" implementieren (Pattern wie "Abstract Node Handle" sind dann nicht notwendig), aber viele der Pattern wären auch in den simulierten Algorithmen und den verwendeten Simulator sinnvoll einsetzbar gewesen. Zu spät.

P.S. In der Sidebar dieses Blogs werden nun auch neben meinen öffentlichen del.icio.us Bookmarks (RSS) auch die öffentlichen CiteULike-Bookmarks (RSS) aufgelistet. Die automatisch generierten del.icio.us-Artikel wird es nicht mehr geben.

Friday, December 07, 2007

dirkmeister.de up

May be you noticed it. dirkmeister.de is up again and I rescued some of the articles. Most of them through the unreleased Google Reader API and some other using archive.org and the Google Cache.

However, some of the articles are gone (I assume forever). Particularly most of the longer articles (e.g. the Java Concurrent Series) are lost.

HNF-Ausstellung: Fahren ohne Fahrer

Am Sonntag startet die neue HNF-Sonderaustellung "Fahren ohne Fahrer".

Es ist schon ein paar Jahre her, dass ich in dem Museum gewesen bin, obwohl ich quasi jeden Tag vor dessen Tür her gehe. Aber diese Austellung muß ich sehen!

Schon alleine wegen "Stanley", dem Gewinnerauto des "Grand Challenge"-Wettbewerbes. Auf der Webseite heisst es dazu:

Das Heinz Nixdorf MuseumsForum zeigt vom 9. Dezember bis 24. Januar zwei Modelle, die ohne Fahrer hinter dem Lenkrad auskommen. Der VW Touareg „Stanley" hat Technikgeschichte geschrieben und als erstes Auto vor zwei Jahren die „Grand Challenge" gewonnen. 23 Fahrzeuge waren für das Rennen zugelassen worden, weniger als ein Viertel erreichten nach 220 Kilometern durch die Mojave-Wüste das Ziel. Als zweites Auto präsentiert das HNF den Golf GTI 53+1, dessen Name auf den berühmten Filmkäfer verweist. Er ist in der Lage, einen Hütchenparcours ohne Fahrer schneller zu fahren als mit.

Zur Einstimmung nochmal das "Winning The DARPA Grand Challenge"-Video: Coole Fahrszenen und einige Skizzen der dahinter liegenden Machine Learning-Algorithmen.

Wer kommt mit?

Monday, December 03, 2007

How addicted to Apple are you?

The website justsayhi.com asks "How addicted to Apple are you"?

The result of me:

54%How Addicted to Apple Are You?

Someone already said: "as little?".