Magnolia CMS: Unit Testing

Wenn man sich einlesen möchte wie man am besten Unit-Tests für das eigene Magnolia Module schreiben kann, dann landet man schnell auf der Seite „Unit Tests“ im MagnoliaCMS-Wiki.

Die dort zu findenden Infos sind schon sehr wertvoll, aber leider fehlen die letzten Prozent Information um das beschriebene direkt umzusetzen. Zum Beispiel sind die beschriebenen Helfer-Klassen wie MgnlTestCase, MockSession oder SessionTestUtil nicht in einem eigenen Maven-Artefakt (wie z.B. beim Spring-Framework mit spring-test) sondern im magnolia-core unter src/test. Also muss auch das Test-Jar von magnolia-core mit in unsere Abhängigkeiten:

<dependency>
   <groupId>info.magnolia</groupId>
   <artifactId>magnolia-core</artifactId>
   <version>5.2.4</version>
   <type>test-jar</type>
   <scope>test</scope>
</dependency>

Dadurch sind die beschriebenen Helfer im Classpath und damit benutzbar. Leider ist auch das JavaDoc dieser Klassen nicht einfach online zu finden, weil auch das JavaDoc von Tests von Maven als extra Artefakt behandelt wird und auf der Magnolia-Maven-Site leider nicht veröffentlich ist. Am besten klont man sich also das MagnoliaCMS git-Repository um einen Blick in den Code und vor allem auch die vorhandenen Tests zu werfen (in magnolia-core finden sich ganze gute Beispiele).

Ohne den Code der Magnolia-Tests waren mir persönlich die Lücken in Dokumentation und JavaDoc für einen produktiven Start zu groß.

Veröffentlicht unter Allgemein | Verschlagwortet mit | Kommentare deaktiviert für Magnolia CMS: Unit Testing

Gelesen: The Phoenix Project

The Phoenix Project ist eine Novelle über eine Firma die einen Kulturwandel von alten und starren IT-Strukturen hin zu neuen Methoden wie Agile und DevOps vollzieht. Dabei beleuchtet die Geschichte die Probleme die durch „Silo-Denken“ entstehen und die Einfluss auf das gesamte Geschäft einer Firma haben. Bill entdeckt mit Hilfe seines Mentors Eric eine andere Sichtweise und implementiert zusammen mit seinen Kollegen agile Prozesse.

Für mich war das Buch ist erstaunlicherweise wirklich spannend zu lesen. Ganz anders als ein Sachbuch. Es gibt eine Handvoll Stellen wo man den Bezug zu einem Sachbuch deutlich spürt und die etwas holprig zu lesen sind – zum Beispiel wenn es um Continous Delivery und John Allspaw geht, aber darüber kann man gut hinwegsehen. Manche Personen aus der Novelle kommen mir aus meinem beruflichen Alltag bekannt vor, ebenso wie manche der beschriebenen Ereignisse.

Insgesamt ist The Phoenix Project ein guter Einstieg und Motivator wenn man einen Einblick in DevOps und agile Methoden bekommen will. Wie in einer Rezension steht „A must-read for anyone wanting to transform their IT to enable the business to win.“ – dem kann ich mich anschließen.

 

Veröffentlicht unter Allgemein | Verschlagwortet mit , | Kommentare deaktiviert für Gelesen: The Phoenix Project

Mac OS: FileVault verschlüsselte Festplatte ohne Passwort löschen

Ich hatte das Problem ein MacBook Pro mit einer verschlüsselten Festplatte neu aufsetzen zu wollen. Leider ließ sich die Festplatte nach einem Netzwerk-Boot mit Mountain Lion im Festplattendienstprogramm nicht formatieren – man hätte erst den „Schutz aufheben“ müssen und dazu das Passwort für FileVault kennen müssen. Kannte ich aber nicht.

Zum Glück hatte Devin Ranger bereits das gleiche Problem, aber sein Blog-Eintrag war vergleichsweise schwer zu finden. Deswegen das wichtigste auch hier noch einmal zusammengefasst.

Die Lösung liegt in der Kommandozeile und dem Tool diskutil.

Mit dem folgenden Befehl lassen sich alle Volumes anzeigen:

diskutil coreStorage list

Die Ausgabe sieht dann in etwa so aus:

$ diskutil coreStorage list
CoreStorage logical volume groups (2 found)
|
+-- Logical Volume Group 41E53F86-28AF-1A6C-7D48-36C940D0437A
| =========================================================
| Name: Macintosh HD
| Size: 499248103424 B (499.2 GB)
| Free Space: 16777216 B (16.8 MB)
...

Darunter finden sich noch weitere Ausgaben über die Partionen und eventuell weitere (externe) Festplatten.

Nachdem man die zu löschende Platte gefunden hat, kann man sie mit

diskutil coreStorage delete $UUID

löschen. Das $UUID muss der UUID aus dem Output oben entsprechen, also in diesem Fall würde der Befehl

diskutil coreStorage delete 41E53F86-28AF-1A6C-7D48-36C940D0437A

lauten. Anschließend ist die Festplatte gelöscht und Mac OS kann neu installiert werden.

 

Veröffentlicht unter Allgemein | Verschlagwortet mit , | Kommentare deaktiviert für Mac OS: FileVault verschlüsselte Festplatte ohne Passwort löschen

Gelesen: Web Operations

Web Operations – Keeping the Data On Time von John Allspaw und Jesse Robbins ist eine Sammlung von Texten rund um das Betreiben von Web Applikationen. Die Texte selber sind von verschiedenen Autoren und haben unterschiedliche Themen, wobei es sich niemals um Tutorial oder Code Beispiele handelt – wer so etwas sucht, der ist bei diesem Buch falsch.

Stattdessen werden die Prinzipien und Best Practices der behandelten Themen ausführlich behandelt. Die Wichtigkeit von Monitoring und dem Erfassen von Metriken zum Beispiel.

Einige Texte gehen sehr auf das menschliche Miteinander ein. Wie man zum Beispiel richtig mit seinen Kunden und den Mitarbeitern aus der PR/Marketing Abteilung kommuniziert. Oder wie man „Post Mortem“ Analysemeetings durchführt, so dass das Team am Ende auch profitiert und lernt anstatt das in solchen Meetings zur Jagd auf den Sündenbock geblasen wird.

Auch das Thema Datenbanken und die Prinzipien der Skalierung werden ausführlich behandelt, und es gibt auch einen Einblick in die gängigen NoSQL Datenbanken.

Es handelt sich um eine Sammlung von Best Practices und Vorgehensweisen für alle Bereiche die beim Betrieb von Web Applikationen einen Rolle spielen. Dabei ist das Buch nicht nur für Admins interessant, sondern auch für den ambitionierten (Backend-) Entwickler der letztlich mit den Kollegen aus der Operations Abteilung zusammenarbeitet. Die Texte geben einen Einblick in die Denkweisen der Admins so dass man die andere Seite besser versteht.

Dadurch ist es auch ein gutes Buch wenn man seine IT in Richtung der DevOps Bewegung ausrichten bzw. fortbilden will. Wer ein Gefühl für die Inhalte bekommen will, dem sei der Vortrag Anticipation: What Could Possibly Go Wrong? (Youtube) empfohlen, den John Allspaw auf der Velocity Konferenz in Berlin gehalten hat. Die Texte in Web Operations fühlen sich ganz ähnlich an.

Veröffentlicht unter Allgemein | Verschlagwortet mit | Kommentare deaktiviert für Gelesen: Web Operations

User Stories aufteilen

Seit kurzem ist der Workflow zum Theme User Story Splitting von Richard Lawrence auch in deutsch abrufbar. Er beschreibt übersichtlich und auf einen Blick wie man am besten eine zu große User Story in mehrere kleine aufteilen kann

Der Workflow ist ein sehr guter Spickzettel für die 8 Patterns zum Story Splitting die Lawrence in einem Blog Post beschrieben hat.

Veröffentlicht unter Allgemein | Verschlagwortet mit | Kommentare deaktiviert für User Stories aufteilen

Sprite Sheets einfach erklärt

Dieses Video ist eine super schnelle Einführung in Sprite Sheets. Meiner Meinung nach sehr gut geeignet um Neueinsteiger in weniger als 5 Minuten auf Fahrt zu bringen:

Veröffentlicht unter Allgemein | Verschlagwortet mit | Kommentare deaktiviert für Sprite Sheets einfach erklärt

Autocomplete Everything

Eines der besten und schnellsten Hilfsmittel bei der Software-Entwicklung ist autocomplete. Sei es in der IDE oder auf der Kommandozeile (in meiner Arbeitsumgebung die bash). Für einige Tools muss man das automatische Vervollständigen erst einrichten, aber dann ist es wahnsinnig praktisch. Im Folgenden deshalb ein paar Beispiele für  git, ssh und Maven, die ich privat und beruflich unter Mac OS 10.6 und Linux benutze:

git

Für git gibt es ein Script das man einfach nur in seine Konfiguration einbinden muss. Erst dann macht das arbeiten mit vielen Branches (die am besten noch lange, sprechende Namen haben) erst richtig Spaß.

Um die git-completion zu nutzen muss man sich zuerst das git-completion.sh-Script aus der git Distribution besorgen, zum Beispiel via github.

Danach muss man noch folgende Zeile zur seinem .bash_profile oder .bashrc hinzufügen (vorausgesetzt man speichert das git-completion.sh unter ~ als .git-completion.sh, sonst muss man den Pfad den eigenen Vorlieben entsprechend anpassen:

source ~/.git-completion.sh

Anschließend kann man zum Beispiel seine Branchnamen per Tabulator auto-vervollständigen lassen.

ssh

Ich verbinde mich per ssh auf viele verschiedene Hosts mit teilweise doch recht langen Namen. Da ich den Username und key je nach Domain bereits in meiner ssh Konfiguration hinterlegt habe, benötige ich keinen Username mehr. Ein einfaches ssh $servername ist also für meine Zwecke vollkommen ausreichend. Um hier nun Autocompletion für die Servernamen zu aktivieren, kann man folgende Zeile in seine .bash_profile Datei eintragen:

Da hier die known_hosts Datei als Quelle für Servernamen verwendet wird, dürfen diese darin natürlich nicht gehasht sein, sondern müssen im Klartext vorhanden sein. Ansonsten gibt es noch Alternativen, die zum Beispiel die history auswerten. Unter Mac OS 10.6 funktioniert es jedenfalls wie oben beschrieben problemlos.

Maven

Auch für Maven gibt es bereits ein fertiges Script, dass man nur noch wie bei git einbinden muss. Leider wird es nicht mit Maven mitgeliefert, aber man kann sich die maven-bash-completion bei github ziehen. Eingebunden wird sie wie bei git mit einem

source ~/.maven-bash-completion
Veröffentlicht unter Allgemein | Verschlagwortet mit , , , | 1 Kommentar

Koans

In meinem Artikel über das einfache Lernen von Scala mit Hilfe von scala-labs, habe ich den Begriff Test Driven Learning verwendet. Ich finde, der Begriff eignet sich auch ganz gut und er wird auch unter anderem für solche Projekte verwendet, nur findet man relativ wenige ähnliche Projekte zu anderen Sprachen wenn man „Test Driven Learning $language“ in eine Suchmaschine eingibt.

Vor einiger Zeit bin ich endlich auf den auf den Begriff Koan gestoßen, der für ähnliche Projekte benutzt wird und viel gebräuchlicher ist. Vor allem findet man unter dem Begriff Koan auch viele Projekte für andere Sprachen, zum Beispiel Python-Koans oder JavaScript-Koans.

Veröffentlicht unter Allgemein | Kommentare deaktiviert für Koans

Developer Conference Hamburg 2011

Am Wochenende hat die erste Developer Conference Hamburg im Otto-Forum stattgefunden. Glücklicherweise war ich mit einem Großteil unseres Entwicklungsteams dort, wir hatten sogar noch extrem günstige Karten gesichert, waren uns bei der Buchung über das Speaker Line-Up aber noch ziemlich im unklaren. Aber für 50 EUR kann man bei einer Konferenz nicht viel falsch machen.

Erster Tag

Unsere Entscheidung war jedenfalls goldrichtig. Der Freitag startet mit einem ausführlichen Frühstück bei dem alle auf ihre Kosten kamen. Gleich der erste Vortrag von Dr. Johannes Mainusch (Xing) zum Thema Abstract Monitoring war ausgesprochen gut! Das von Johannes gepredigte MacGyver Monitoring, also mal schnell was mit einfachen Mitteln (Munin + Logfiles + awk) zu monitoren, versuche ich öfter mal in die Praxis umzusetzen. Dabei impliziert der Name MacGyver schon, dass es sich nicht um einen kruden Hack handeln soll, sondern um eine einfache Lösung die auch funktioniert.

Der anschließende Vortrag zum Thema Projekt-Entwicklung in der Cloud kam dagegen nicht an. Mir persönlich ging der Vortrag viel zu wenig in die Tiefe, aber für komplette Neueinsteiger war die kurze Einführung in AWS & Co. sicher gut.

Nach dem sehr reichhaltigen Mittagessen ging es wieder sehr gut mit Many-Cores & Functional Programming von Prof. Dr. Friedrich Esser weiter. Der Vortrag war eine Einführung in die Vorteile funktionaler Programmierung mit vielen Seitenhieben auf die aktuellen OO Sprachen. Mit Get functional or get out! hat Prof. Esser seinen Vortrag passend zusammengefasst. Für die devcon war dieser Vortrag erfrischend theoretisch.

Der Titel Agile Entwicklung mit PHP des nächsten Vortrags hatte mich erst etwas abgeschreckt, letztlich hatte PHP aber gar keinen Anteil an dem sehr gelungenem Vortrag über extreme Programming. Lars Jankowfsky hat viele Zwischenfragen zugelassen und es war doch sehr interessant zu hören mit welchen Problem andere Teams zu kämpfen haben. Letztlich kochen alle doch nur mit Wasser und viele scheinen die gleichen Gäste zum Essen eingeladen zu haben.

Den Tag beendet hat Jens Fischer mit seinem Vortrag zum Website Performance Boosting für einen der Otto Shop-Systeme. Ein interessanter Einblick in die In-House Entwicklung bei Otto. Die Toolchain kam uns allerdings sehr bekannt vor, so dass es weniger etwas neues zu lernen gab, als viel mehr die Bestätigung dass es andere ähnlich machen wie wir.

Ausklingen konnte der Abend im 13. Stock nach einer kleinen Stadtrundfahrt in den bekannten Doppeldeckerbussen. Die Orga wirkte, als würde die Konferenz zum 10. Mal stattfinden… dabei war es ja die Premiere. Auf der Party habe ich mal wieder gemerkt, dass die Hamburger IT irgendwie ein Dorf ist: Jeder kennt jeden – irgendwie.

Zweiter Tag

Der zweite Tag begann mit leichter Verspätung. Die Baustelle am Hauptbahnhof und die vielen Getränke-Gutscheine von Xing waren wohl die schuld. Der erste Vortrag war Zero Bug Policy. Durchaus nah an der Praxis und mit einigen guten Hinweisen für den Alltag.

Beim Workshop Frontend Performance Tuning fühlte ich mich hingegen eher unwohl. Zum einen waren viele der Tipps aus meiner Sicht eher „snake oil“ zum anderen wurden Backendentwickler einige Male gebasht…

Das Mittagessen hat die Stimmung aber wieder sehr gehoben und der Doppel-Workshop von Prof. Esser zum Thema Scala war ebenfalls sehr gut. Allerdings war es aufgrund der großen Teilnehmerzahl eher kein Workshop sondern eine Vorlesung, was dem ganzen aber nicht schlecht getan hat. Letztlich konnte ich für mich nicht viel neues mitnehmen, aber gelerntes noch einmal aus einem anderen Blickwinkel betrachten. Es war einfach ein guter Vortrag und die meisten Teilnehmer wollten sich später einmal näher mit Scala beschäftigen.

Als abschließenden Vortrag habe ich mir Testing untestable code angehört. Eigentlich ein tolles Thema, hat man es doch öfter mal mit legacy code zu tun. Leider war der Vortrag sehr stark auf PHP gemünzt (was leider aus dem Titel und der Beschreibung nicht klar hervor ging). Die Wege um untestbaren code zu testen verursachten dann auch manchmal eine Gänsehaut.

TL;DR

Die #dchh war absolut super! Die verschiedenen Themen und Schwerpunkte haben der Konferenz sehr gut getan. Die Organisation und die Verpflegung sowie der Veranstaltungsort bei Otto waren hervorragend.

Nur die Workshops waren etwas zu groß um wirkliche Workshops zu sein. Aber ob Vortrag oder Workshops war letztlich auch egal. Hoffentlich machen die Veranstalter ihr Versprechen wahr, so dass es auch 2012 wieder eine Developer Conference in Hamburg geben wird.

Veröffentlicht unter Allgemein | Verschlagwortet mit , , | 1 Kommentar

Mit der Jenkins Script Console Maven Goals ändern

Das ist nur ein Ausschnitt, da will man nicht alles von Hand ändern

Das ist nur ein Ausschnitt, da will man nicht alles von Hand ändern

Beruflich nutze ich unter anderem Jenkins als Continous Integration Server. Wir haben recht viele Maven Projekte die damit regelmässig gebaut werden.

Bislang haben alle diese Projekte im Prinzip ein mvn clean install aufgerufen. Dadurch lagen immer die aktuellsten SNAPSHOTS im lokalen Maven Repository des Jenkins, jedoch nicht in unserem zentralen Maven Repository Manager. Es sollte also statt dem mvn clean install ein mvn clean deploy aufgerufen werden.

Um nun alle Projekte möglichst schnell und ohne viel Maus-Geschubse zu konfigurieren, habe ich die Jenkins Script Console verwendet. Mit der Scrip Console ist es möglich, Groovy Scripts auf dem Jenkins auszuführen, die zum Beispiel alle Projekte umkonfigurieren. Einige Beispiele für solche Scripts finden sich im Jenkins-Wiki. Um in allen Maven Projekten aus dem install ein deploy zu machen, habe ich das folgende Script gehackt (das sicher keinen Schönheitspreis gewinnt, aber als Vorlage dienen kann):

 

Veröffentlicht unter Allgemein | Verschlagwortet mit , | Kommentare deaktiviert für Mit der Jenkins Script Console Maven Goals ändern