Anhand eines praktischen Beispiels veröffentlichen unsere Lehrlinge ihre eigene Open Source Software. Philipp Gassmann erzählt uns von seinen Erfahrungen.
Puzzle ITC setzt sich für Open Source Software ein, contributet zu Projekten und veröffentlicht auch eigene Projekte. Unsere Lehrlinge machen erste praktische Erfahrungen damit und erzählen von ihren Erfahrungen.
Ausgangslage: Notebooks im Notizbuch
Notebooks, Server und Zubehör wurden bisher in einer Tabelle im TWiki verwaltet. Mit der Zeit und dem damit gewachsenen Volumen an Geräten wurde diese Liste jedoch unübersichtlich und umständlich in der Handhabung. Um die Geräteverwaltung effizienter und systematischer zu gestalten, wurde schliesslich ein Lehrlingsprojekt gestartet. Ziel war es, neue Konzepte, Techniken und Methoden anhand eines praktischen Beispiels zu erfahren.
Scrum und User Stories als Grundlage
Als Vorgehensmodell wählten wir Scrum. Martin Gafner übernahm dabei die Rolle als Product Owner, Roman Alt (2. Lehrjahr als Applikationsentwickler) und ich (1. Way-Up Lehrjahr als Systemtechniker) entwickelten die Lösung. Als Erstes wurden die Anforderungen und Wünsche als User Stories gesammelt und daraus konkrete Entwicklungs-Tasks formuliert.
Umsetzung mit Ruby on Rails
Für die neue Lösung in Form einer Webapplikation wurde Ruby on Rails 3 verwendet. Das Open Source Framework nimmt einem viel Arbeit ab – vorausgesetzt, man versteht auch die Konzepte dahinter. Diese Konzepte waren jedoch Neuland für uns, da wir noch kaum Programmiererfahrungen aufweisen konnten. Da wäre die Objektorientierung, der Model-View-Controller Aufbau, die Tücken von HTML-Formularen oder auch die vielen Tricks und Kniffe, die Rails mit der dynamischen Programmiersprache Ruby umsetzt.
Trotz anfänglicher Schwierigkeiten freundeten wir uns zunehmends mit der Materie an. Mit der Zeit entwickelten wir ein Gefühl für die Konstrukte und wussten somit, wo wir anpacken mussten, um eine Anforderung umzusetzen. Regelmässig wurden dabei der Stand der Dinge zwischen Product Owner und Entwicklern besprochen und die Schritte für den nächsten zweiwöchigen Sprint definiert. So konnte flexibel auf neue Wünsche und auftretende Schwierigkeiten reagiert werden. Je konkreter das Tool Form annahm, desto mehr machte das Entwickeln vom InventarTool richtig Spass.
Wenn Open Source, dann richtig
Von Anfang an war definiert, dass die Applikation als Open Source Projekt veröffentlicht werden soll. Mit der Annäherung an die Fertigstellung beschäftigten wir uns deshalb intensiver mit den Anforderungen für eine saubere Freigabe. Als Erstes muss dabei die passende Lizenz gewählt werden. Da es sich beim InventarTool um eine Webapplikation handelt, entschieden wir uns für die AGPLv3. Diese stellt eine angepasste GPL dar, speziell für Software, die übers Netzwerk genutzt wird. Die GPL schreibt unter anderem vor, dass der Quelltext einer Software dem Benutzer, d.h. demjenigen der sie installiert und bei sich auf dem Rechner/Server hat, zur Verfügung stehen muss. Diese Bestimmung greift jedoch nicht bei Webapplikationen, wo der Benutzer nur auf die Ausgabe Zugriff hat, das Programm aber nicht weitergegeben wird. Die Verfügbarkeit des Quellcodes für den Benutzer wird in diesem Fall durch die AGPL sichergestellt.
Automatische Headeranpassung mit Ruby
Damit auch rechtlich alles wasserdicht ist, muss bei einem OSS Projekt in jeder Datei ein Header eingefügt werden, der auf die Lizenz und den Haftungsausschluss hinweist.
Ein Rails-Projekt besteht schnell mal aus über 200 Dateien und so suchten wir nach einer Möglichkeit, diesen Header automatisiert in verschiedenen Formaten auskommentiert einzufügen. Da noch kein Tool existierte, welches unseren Anforderungen genügte, entschloss ich mich, selbst ein Programm zu entwickeln, welches diese Aufgabe bewältigen kann.
Ich machte mich daran, mit Ruby ein kleines Skript zu schreiben. Dieses erkennt den Dateityp einer Datei anhand der Erweiterung, lädt den Headertext aus einer Datei und packt ihn korrekt in die Kommentarsyntax des jeweiligen Formats ein. Das Tool wuchs schnell auf 300 Zeilen Zeilen Ruby Code an. Dabei lernte ich die Flexibilität und Tricks der Sprache schätzen. Anfänglich komplex erscheinende If-Abfragen konnten elegant mit sogenannten Hashes gelöst werden. Was vorher 10 Zeilen in Anspruch nahm, war plötzlich in einer Zeile gelöst und der Code war erst noch lesbarer. Somit entstand innerhalb des Projekts noch ein zweites Tool das als Open Source Software veröffentlicht werden konnte.
Das Inventartool und das CopyrightHeaderTool sind als Open Source Projekt auf GitHub zu finden. Es werden weiterhin Verbesserungen und Änderungen nachgeschoben.