Archiv für Januar, 2010

Consultants

0

Helmut Schmidt schreibt in seinem Buch „Ausser Dienst: Eine Bilanz”:

„Während ich im persönlichen Gespräch mit Personen, deren Kompetenz und Urteilskraft ich vertraute, zeit meines Lebens viel lernen konnte, habe ich von institutioneller Beratung nie viel gehalten. Gremien, Kommissionen und sonstige Beratungsinsitutionen, die lediglich Gutachten erstellen und Empfehlungen aussprechen, aber nicht handeln müssen, haben nur selten wirksamen politischen Einfluss.”

Man könnte meinen, Helmut Schmidt arbeitet auch in der IT-Branche.

Verwenden Sie keine Verneinung nicht!

3

Wenn ich es schaffe, eine if-Anweisung zu vermeiden, dann versüßt mir das immer meinen Tag. Aber leider kann man als Entwickler nicht darauf verzichten, Bedingungen in den Code einzubauen.

Was ich jedoch versuche, an allen Stellen zu vermeiden, ist der schreckliche „not”-Operator, der in den meisten Sprachen durch den Einsatz von „!” implementiert wird. Der Einsatz dieses Operators macht den Quellcode immer schwerer zu lesen. Ich möchte keine Bedingungen wie die folgende in meinem Code haben:

if (!$this->isUserAuthenticated()) {
    $this->requireLogin();
}

So ein kleines Ausrufezeichen übersieht man einfach viel zu leicht und da es die Logik des Ausdrucks komplett umdreht, ist es einfach viel zu wichtig, um übersehen zu werden. Noch schlimmer wird es, wenn Sie den Operator mehrfach in einer Bedingung einsetzen.

if (!$this->isUserAuthenticated() && !$this->isInternalIP()) {
    $this->requireLogin();
}

In solchen Code-Stellen kommt es gerne auch mal vor, dass man UND mit ODER verwechselt. Denn wenn man etwas negieren möchte, sollte man dran denken, auch die Verknüpfung zu negieren oder entsprechend zu klammern. Die obige Bedingung ist mit der folgenden identisch, statt einem logischen UND verwenden Sie jedoch ein logisches ODER:

if (!($this->isUserAuthenticated() || $this->isInternalIP())) {
    $this->requireLogin();
}

Auf den ersten Blick erschließt sich mir nie, was die Bedingung aussagt, sobald ein „not”-Operator im Spiel ist.

Aber welche Möglichkeiten gibt es, um den ungeliebten Operator loszuwerden?

Verneinen Sie den Methodennamen

Statt einer Methode isUserAuthenticated() einen „not”-Operator voranzustellen, könnten Sie eine zweite Methode implementieren, die bereits auf das Gegenteil prüft und einen sprechenden Namen hat:

if ($this->isUserUnknown()) {
    $this->requireLogin();
}

So liest sich der gesamte Code viel flüssiger und es kann nicht dazu kommen, dass der Operator übersehen wird oder das Ergebis im Kopf evaluiert werden muss.

Prüfen Sie auf false

Statt den „not”-Operator zu verwenden, können Sie die Rückgabe der Methode auf false prüfen:

if (false === $this->isUserAuthenticated()) {
    $this->requireLogin();
}

Der Code ist zwar nicht so lesbar wie im vorherigen Beispiel, aber wenn Sie die Bedingung nur einmal prüfen müssen, kann es sinnvoll sein, auf die Implementierung einer Methode für diesen einen Fall zu verzichten. Achten Sie übrigens immer darauf, bei einer Bedingung den konstanten Wert auf der linken Seite der Klammer zu setzen. Sollten Sie zu wenige Gleichheitszeichen verwenden, so kann aus der Bedingung nicht aus Versehen eine Zuweisung werden.

Verwenden Sie unless

Sollten Sie Ruby verwenden, so haben Sie noch eine dritte, sehr elegante Möglichkeit. Ruby bietet Ihnen neben der if-Anweisung auch eine unless-Anweisung, die, wenn Sie sie als Modifier einsetzen, besonders elegant zu lesen ist.

require_authentication unless user_is_authenticated

In diesem Beispiel ist der Code kaum noch von einem englischen Satz zu unterscheiden. Unterstützt wird das natürlich noch dadurch, dass Sie in Ruby keine Klammern verwenden müssen, wenn Sie keine Parameter an eine Methode übergeben wollen.

Wenn Sie also das nächste Mal eine Bedingung negieren, dann denken Sie darüber nach, ob es keine bessere Lösung gibt. Und falls Sie in einer Bedingung zweimal negieren müssen, dann denken Sie nochmal über eine Alternative nach. Es gibt sie sicher.

Ruby on Rails on Windows

3

Nachdem ich Anfang des Jahres beschlossen hatte, Ruby zu lernen, habe ich das vor einer Woche in die Tat umgesetzt. Zusammen mit Holger entwickle ich eine webbasierte DVD- und Blu-Ray Verwaltung basierend auf Ruby on Rails. Dabei habe ich den Fehler gemacht, dass ich das auf einem Windows-Notebook machen wollte und erst mal fast einen Abend mit der Installation der neusten Ruby Version 1.8.7 verbracht.

Damit das anderen nicht auch so geht, versuche ich nochmal, zu rekapitulieren, welche Schritte dazu nötig waren:

  1. Laden Sie den Ruby One-Click Installer 1.8.6 von der Ruby Website herunter.
  2. Installieren Sie Ruby 1.8.6 (zum Beispiel in C:ruby).
  3. Laden Sie das Ruby 1.8.7 Binary von der Ruby Website herunter.
  4. Entpacken Sie das Binary in den selben Ordner (C:ruby), in den der Installer die Version 1.8.6 installiert hat.
  5. Laden Sie ZLib Packages von der ZLib Website herunter und Entpacken Sie das Archiv.
  6. Benennen Sie die Datei zlib1.dll nach zlib.dll um.
  7. Kopieren Sie die Datei zlib.dll nach C:rubybin.
  8. Laden Sie libiconv 1.91 herunter und Entpacken das Archiv.
  9. Kopieren Sie die Datei bin/iconv.dll nach C:rubybin.
  10. Laden Sie OpenSSL herunter und installieren es. Bei der Installation kann es sein, dass Sie aufgefordert werden, zuerst das Microsoft Visual C++ 2008 Redistributable Package zu installieren.

Damit sollte Ruby installiert sein. Überprüfen können Sie das einfach in der Konsole über:

C:Usersschst> ruby --version
ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-mswin32]

Um Ruby on Rails zu verwenden, sollten Sie nun auch noch SQLite installieren. Während der Entwicklung können Sie Ihre Models sehr komfortabel in einer SQLite Datenbank persistieren. Sollten Sie SQLite noch nicht installiert haben, reichen dazu die folgenden Schritte aus:

  1. Laden Sie die vorkompilierte Verson für Windows herunter.
  2. Entpacken Sie das Archiv
  3. Kopieren Sie die Datei sqlite3.exe nach C:rubybin.

Als nächstes können Sie sich nun daran machen, den gem Installer für Ruby zu installieren:

  1. Laden Sie die aktuelle Version von RubyForge herunter.
  2. Entpacken Sie das Archiv.
  3. Führen Sie ruby setup.rb aus.

Alle weiteren Schritte erledigt nun gem für Sie:

C:Usersschst>gem install rails
C:Usersschst>gem install sqlite3-ruby

Danach können Sie mit Ihrer ersten Ruby on Rails Applikation loslegen:

C:Usersschst> rails my-app
C:Usersschst>     cd my-app
C:Usersschst>     ruby script/server

Ihre Anwendung öffnen Sie nun im Browser über http://localhost:3000.

Die Saat

0

Die SaatSpätestens seit Pans Labyrinth gehört Guillermo del Toro zu meinen Lieblingsregisseuren. Nun hat Guillermo del Toro zusammen mit Chuck Hogan den Roman „Die Saat” veröffentlicht. Der Blutstropfen auf dem Cover läßt schon darauf schließen, dass del Toro ein Thema aufgreift, das dem einiger seiner Filme wie „Blade II” oder auch „Hellboy” sehr nahe ist.

Da ich sehr wenig Fantasy- und Horror-Romane lese (mit Ausnahme von Stephen King) habe ich eine Weile gezögert, ehe ich mich an dieses Buch gewagt habe. Überzeugt hat mich dann letztendlich der Klappentext des Buches:

Am New Yorker JFK-Flughafen landet eine Passagiermaschine aus Deutschland. Statt ans Gate zu rollen, bleibt sie abrupt stehen, der Funkkontakt bricht ab. Als die von der Flugsicherung alarmiere Feuerwehr anrückt, steht sie vor einem Rätsel: Sämtliche Fenster des Flugzeugs sind verdunkelt, kein Lebenszeichen dringt aus der Maschine. Eine Geiselnahme? Ein terroristischer Anschlag?

Leider handelt es sich weder um eine Geiselnahme, noch um einen terroristischen Anschlag. Stattdessen liefern die beiden Autoren einen Vampirroman ab. Abgrenzen möchte sich der Roman von anderen seines Genres, in dem die beiden Autoren versuchen, Vampirismus als einen Virus darzustellen und dies medizinisch begründen. Auch wenn das Buch die Spannung, die am Anfang aufgebaut wurde, nicht bis zum Ende durchhalten kann, wird es nie langweilig. Allerdings werden die Ereignisse gegen Ende Schritt für Schritt vorhersehbarer. Dazu kommen, dass die Personen nicht so überzeugend gezeichnet werden, wie dies in den Büchern von Stephen King der Fall ist.

Die größte Enttäuschung war für mich jedoch, dass das Buch den ersten Teil einer Trilogie darstellt und auch dementsprechend endet. Eigentlich nämlich gar nicht. Die Spannung wird am Ende nicht aufgelöst, sondern verpufft einfach. Mein Urteil über das Buch wäre wahrscheinlich anders ausgefallen, wenn ich nicht mit der Erwartung eines echten Endes an das Buch heran gegangen wäre.

Wer also einen Vampirroman lesen möchte, dem würde ich weiterhin „Brennen muss Salem” empfehlen, auch wenn man es hier eher mit klassischen Vampiren zu tun hat.

The XX – Neuentdeckung des Monats

1

Seit den Dresden Dolls hat mich nichts mehr so überrascht und begeistert wie The XX.

Entdeckt bei Tracks auf Arte.

23 Dinge #0: Menschen

0

Bevor ich über 23 Dinge blogge, möchte ich noch einen Artikel voran stellen, der die folgenden Artikel meiner Serie in einen entsprechenden Kontext setzt. Sie bekommen hier sozusagen einen Tipp, wie Sie die folgenden Tipps anwenden sollten.

Beginnen möchte ich mit einem Yogiism von Dale „Yogi” Berra, einem der erfolgreichsten Baseball-Spieler der US-Major League:

„In theory, there is no difference between theory and practice. In practice, there is.”

Frei übersetzt bedeutet dies so viel wie:

„In der Theorie sind Theorie und Praxis das selbe, in der Praxis sind sie es nicht.”

Meine 23 Dinge, die Sie über Software-Entwicklung ins Teams wissen sollten, entspringen zwar meiner praktischen Erfahrung, aber in diesem Blog werden sie auf Theorien reduziert. Die Tipps haben mir in den Teams, in denen ich bereits gearbeitet habe (sowohl in geschäftlichen, als auch im Open Source Umfeld), wertvolle Dienste geleistet. Das bedeutet jedoch nicht zwangsläufig, dass diese Tipps sklavisch bei Ihnen angewendet werden sollten. Manche Tipps müssen vielleicht an ihr Umfeld angepasst werden, andere funktionieren in Ihrem Umfeld überhaupt nicht.

Sobald Sie von Teamarbeit sprechen, sollten Sie nicht vergessen, dass es dabei auch immer um Menschen geht. Die Menschen sollten immer im Mittelpunkt Ihrer Bemühungen stehen, denn sie sind es, die Ihr Team formen und am Ende die Software produzieren.

Und Menschen sind nun mal verschieden. Also sind auch Teams verschieden und werden nicht genau gleich auf die Tipps in dieser Artikelserie reagieren. Achten Sie also beim Umsetzen der Tipps darauf, dass Ihnen nicht der Fehler auf diesem Poster passiert:

Conformity - It's the one who is different, that get's left out in the cold.

Schätzen Sie die Unterschiedlichkeit Ihres Teams und wenn ein Tipp nicht zu Ihnen oder Ihrem Team passt, dann passen Sie ihn an. Dieses Poster hängt im Büro übrigens auch in DIN A1 an meiner Wand, um mich und andere jeden Tag daran zu erinnern.

Last.fm / Twitter mashup – Die Zweite

0

Nachdem ich vor einer Woche gezeigt habe, wie man seine Lieblingssongs bei Last.fm automatisch twittern kann, stelle ich heute eine Applikation vor, die genau das Gegenteil macht.

Mit der Applikation lasttweet.com können Sie Ihre neusten Tweets in Ihrem Last.fm Profil anzeigen. Einfach auf der Website den eigenen Twitter-Usernamen eingeben, die Anzahl der Tweets und ein Layout auswählen. Lasttweet.com erzeugt dann einen Schnipsel Code, den Sie in den Last.fm Settings unter dem Punkt „About You” eintragen müssen, und das war’s. Wenn jemand dann Ihr Last.fm Profil aufruft, dann tauchen dort Ihre neusten Tweets auf:

An meiner Wand – mit Amilio

0

Nils Langner von phphatesme.com bietet mit amilio einen neuen Service an, mit dem man sich mit ein paar Klicks (und dem Ausfüllen von fünf Feldern) kleine Motivationsposter erstellen kann.

In Anlehnung an mein Posting „Don’t assume”, hat Herr Nils gleich noch ein Poster erstellt, das ab Montag mein altes Poster ablösen wird:

Wer sich wundert, dass das Zitat von meinem abweicht: In diesem Poster wird das Originalzitat verwendet, ich hatte das für mein Posting ein bißchen abgewandelt, da es auch in dieser Form an meiner Wand steht.

Neuer Animationsfilm von Tim Burton

0

Tim Burton produziert mal wieder einen Animationsfilm, den man sich anschauen sollte:

Auch wenn ich sonst kein Fan von animierten Filmen bin, haben mich die Filme, bei denen Tim Burton seine Hände im Spiel hat, bislang immer überzeugt.

Commercial Break: PHP Design Patterns

0

Die zweite Auflage meines Buches ist mittlerweile zwar fast schon ein Jahr alt, aber trotzdem darf natürlich ein bißchen Eigenwerbung in meinem Blog nicht fehlen.

PHP Design Patterns” ist das erste deutschsprachige Buch zu Entwurfmustern in PHP. Neben einer Einführung in objektorientierte Programmierung im Allgemeinen und mit PHP im besonderen (Kapitel 1) sowie einem kurzen Ausflug in die SPL (Kapitel 2), zeigt das Buch auf grundlegende Regeln für gutes Software Design wie z.B. „Vererbung sorgt für starre Stukturen. Verwenden Sie stattdessen Objektkomposition, um verschiedene Funktionen einfacher miteinander kombinieren zu können.” Kapitel 3 behandelt weiterhin auch Fluent Interfaces und Dependency Injection, samt der Verwendung des DI-Containers in Stubbles.

Kapitel 4,5 und 6 behandeln dann einige der Standard Gang of Four Entwurfsmuster, wie Abstract Factory, Prototype, Composite, Facade, Flyweight, Command, State oder auch Chain-of-Responsibility. Die letzten beiden Kapitel stellen das Schichtenmodell vor und zeigen, wie man dies mit Hilfe eines Model-View-Controllers und Patterns wie Active-Record, Template-View, Registry oder auch Event-Dispatcher implementiert.

Das PHP Magazin schreibt zur ersten Auflage (1/2007):

Ein rundes, das anvisierte Themengebiet hervorragend ausfüllendes Buch, das vom Leser nur eins verlangt: Zeit und Konzentration auf den Inhalt. Der Lohn dieser geringfügigen Investition sind verschiedenste Aha-Effekte und ein echter Schub an neuen Kenntnissen und Ideen. Und ein Nachschlagewerk, das man nach dem ersten Lesen nicht mehr vom Schreibtisch nehmen möchte.

Das Buch wurde für die zweite Auflage komplett überarbeitet und an PHP 5.3 angepasst. Dabei wurde ein Großteil der Kapitel erweitert:

Details zu Buch:

nach oben