Mein privates Git Cheat Sheet

Da ich in verschiedensten Projekten regelmäßig mit Git arbeite, habe ich mir überlegt, die wichtigsten Szenarien, denen ich begegne, in einem privaten Cheat Sheet zusammenzufassen.

Ich weiß, dass ich der Welt damit nichts Neues offenbare, aber es ist praktisch, das alles mal an einem Ort versammelt zu haben.
Mein privates Git Cheat Sheet weiterlesen

Back to COBOL – natürlich mit Unit Tests

Ich hätte nie gedacht, dass ich mich nach über 10 Jahren noch einmal mit COBOL beschäftigen würde. Aber nun habe ich ein Team, das mit COBOL arbeitet und Scrum machen soll.

Nun sind COBOL und Scrum zwei Dinge, die die meisten Menschen, die ich so kenne, nicht oft in einem Satz verwenden. Das soll aber kein Grund sein, sich nicht mit der Materie zu beschäftigen. Letztes Wochenende habe ich OpenCOBOL – neuerdings GNU-Cobol – via homebrew auf dem Mac verfügbar gemacht.

Das war aber nur der erste Schritt, denn mein eigentliches Ziel war die Grundvoraussetzung für agile Software-Entwicklung mit COBOL zu nutzen. Na? Genau: Unit Tests! Mit CobolUnit gibt es dafür auch ein Framework, das aber schon seit einer Weile nicht maintained wird. Die letzten Commits sind von 2009, das versprach ein Abenteuer.
Und das wurde es dann auch. Ich habe mich von Fehlermeldungen wie
error: indirect goto in function with no address-of-label expressions
zu
ld: can't link with bundle (MH_BUNDLE) only dylibs (MH_DYLIB) file '/Users/gbeine/GitHub/gbeine/COBOLUnit/COBOLUnitLib/lib/libCobolUnit.dylib' for architecture x86_64
durchgearbeitet.

Am Ende ist es mir gelungen, CobolUnit mit GNU-Cobol in der Version 1.1 und dem GCC 4.9.1 zum Laufen zu bringen. Das Resultat schaut recht erfreulich aus:

|--- Suite1
| Test 'CTU0S1T1 * SUCCESS * (006 Assertions, 000 Failures. 000 errors)
| Test 'CTU0S1T2 * SUCCESS * (006 Assertions, 000 Failures. 000 errors)
|--- SUCCESS

|--- Suite2
| Test 'CTU0S2T1 * SUCCESS * (008 Assertions, 000 Failures. 000 errors)
|--- SUCCESS

********************************************************************
* SUCCESS *
* (003 test cases, 003 success, 000 failures, 000 errors) *
********************************************************************
(00 min:00 sec:01 ms)

Meine Änderungen dazu habe ich – natürlich – auf GitHub zur Verfügung gestellt. Nur für den Fall, dass das außer mir noch irgendwo auf der Welt irgendjemand nutzen möchte…

Lokale Umgebungen für Perl, Python und Ruby

Hin und wieder hat man auf einem System keine root-Rechte oder möchte diese nicht nutzen. Und oft will man gerade in solchen Situationen Perl-Module, Ruby Gems oder Python Eggs verwenden, die auf dem System nicht verfügbar sind. Erfreulicherweise bieten alle diese Sprachen Mechanismen an, mit denen sich Erweiterungen im Heimatverzeichnis des Benutzers installieren lassen.
Wie das im Einzelnen geht, beschreibt dieser Artikel.

Lokale Umgebungen für Perl, Python und Ruby weiterlesen

Der Fluch der Wiederverwendung

Wiederverwendung ist der Fluch des modernen Software-Designs.
Nicht die Wiederverwendung, die man entdeckt, weil es sich so ergibt.
Sondern die geplante Wiederverwendung – oder, besser beschrieben, die geforderte Wiederverwendbarkeit.

In Lastenheften lese ich sehr häufig die nicht-funktionale Anforderung der Wiederverwendbarkeit.
Sofern ich Einfluss darauf habe, lasse ich diese Anforderung streichen, denn sie ist praktisch nicht zu erfüllen.
Eine nicht näher spezifizierte Wiederverwendbarkeit impliziert die Fähigkeit, mögliche Szenarien zur Wiederverwendung vorauszusehen.
Leider gibt es nur sehr wenige Menschen, möglicherweise gar keine, die mit der Gabe der Vorhersehung gesegnet sind, die jedoch dafür notwendig wäre.
Der Fluch der Wiederverwendung weiterlesen

Unscharfe Hamcrest-Matcher für Elemente in Collections

Hamcrest bietet von Haus aus eine breite Palette von Matchern für verschiedenste Situationen an.

Um zu prüfen, ob ein Elemente oder auch mehrere in einer Collection sind, gibt es z.B. contains() und containsInAnyOrder() sowie hasItem() und hasItems(). Alle vier funktionieren sehr gut, solange man sich auf die mitgelieferten Matcher von Hamcrest beschränkt.

Sobald man aber Objekte unscharf prüfen will, also nicht mit equals(), sondern sich auf einige Attribute beschränken möchte, muss man etwas außenrum denken.
Unscharfe Hamcrest-Matcher für Elemente in Collections weiterlesen

Eclipse Mirror anlegen

Man kenn es ja, ab und an braucht’s ein Update der Eclipse Plugins.
Dann werden 23 mal die JBoss Tools runtergeladen und 47 mal die Juno-Updates für die Scala IDE.

Kann man so machen, muss man aber nicht.

Die Eclipse stellt mit P2 nämlich einen ziemlich coolen Mechanismus bereit, um Update Sites zu spiegeln.
Das habe ich mir gestern mal hergenommen und ein Script gebaut, dass sämtliche (mir) wichtigen Update Sites spiegelt und auf meinem internen Web Server bereitstellt.
Ich will auch meinen Beitrag zur Bandbreitenschonung leisten 😉

Eclipse Mirror anlegen weiterlesen

Code-Reviews, ganz persönlich

Immer wieder begegne ich Entwicklern, die Tools für Code-Reviews benutzen. Ich tue das nicht mehr. Bisher ist mir kein einziges Review-Tool begegnet, das es mir ermöglicht, einen Review in der Qualität durchzuführen, die ich anstrebe. Weder Crucible, noch Jupiter oder mein Namensvetter Gerrit.
Code-Reviews, ganz persönlich weiterlesen

Firefox Bookmark Backups konvertieren

Manchmal ist es notwendig, die Bookmarks eines alten Firefox-Profil in ein neues Profil zu übernehmen. Schlecht, wenn man dann nur noch die Sicherungsdateien hat, die als JSON abgespeichert werden. Importiert man diese mit Firefox, werden alle anderen Lesezeichen überschrieben. Das ist ärgerlich und überhaupt nicht elegant.
Ein Backup der Lesezeichen in einen Ordner zu kopieren, ist aber im Firefox nun mal nicht vorgesehen.

Da ich genau dieses Problem hatte, habe ich ein kleines Perl-Script geschrieben, das die eine JSON-Datei einliest und diese in der HTML-Bookmark-Format ausgibt.
Firefox Bookmark Backups konvertieren weiterlesen