Archiv für den Monat: Januar 2014

JavaScript für Java-Entwickler

In der Zentralbibliothek der Hamburger Bücherhallen stolperte ich unter den Neuerscheinugen zufälligerweise über ein Buch, das wie für mich gemacht zu sein schien. Ich hatte gerade H.G. Wells‘ „Die Tür in der Mauer“ gelesen, zu dessen Rückgabe ich die Bücherhallen überhaupt aufgesucht hatte. Da es in der Kurzgeschichte um das Nutzen von Möglichkeiten geht, die sich unerwartet bieten, schaute ich mir das Buch etwas genauer an.

Es trägt de Titel „JavaScript für Java-Entwickler“, geschrieben von Oliver Zeigermann, 2013 erschienen bei entwickler.press. Als ich auf dem Waschzettel folgende Zeilen las, war ich überzeugt und nahm das Buch mit:

„Zielpublikum sind Java-Entwickler, die sich so einfach und schmerzfrei wie möglich der Sprache JavaScript nähern wollen oder müssen. Deshalb wird alles weggelassen, was man als Java-Entwickler entweder sowieso weiß oder nicht wissen muss.“

Wenn man das alles weglässt kommt man auf 132 Seiten, die erfüllen was auf dem Buchrücken versprochen wird. Nach einer kurzen Einleitung geht’s in fünf Kapiteln, von den Grundlagen zu fortgeschrittenen Themen wie objektorientierte Entwurfsmuster oder JSON.

Ich habe das Buch von vorne bis hinten durchgelesen. Entsprechend des Kenntnisstandes ist es aber auch möglich Kapitel auszulassen, bzw. zu überspringen. Trotz oder vielleicht wegen seiner Kürze bietet das Buch einen einfachen Einstieg in die Sprache JavaScript ohne in die Oberflächlichkeit abzudriften. Lebendig wird es durch die vielen Codebeispiele und die regelmäßigen Hinweise auf Best Practices der JavaScript Entwicklung. So werden unterschiedliche IDEs und Entwicklungstools besprochen. Themen wie die Projektorganisation, Refactorings und UnitTests, ohne die die Java-Entwicklung kaum noch vorstellbar sind, kommen natürlich auch nicht zu kurz.

Für mich war das Buch ein gelungener Einstieg in ein Themenfeld, das für mich mit vielen Vorurteilen belegt war. Durch den Schritt durch die Tür in der Mauer habe ich einen Eindruck für das Wesen der Scriptsprache JavaScript bekommen und Lust gewonnen mich ein Bisschen damit auszutoben.

Zu kaufen gibt es das Buch JavaScript für Java-Entwickler bei Amazon.

Setting Up OpenMRS in Eclipse Kepler

Nach meinen OpenMRS Codejam bei ThoughtWorks möchte ich eine lokale Entwicklungsumgebung bei mir aufsetzen. Bei den Mitarbeitern von ThoughtWorks ist IntelliJ die IDE der Wahl. Ich habe bisher hauptsächlich mit Eclipse gearbeitet und möchte das weiterhin tun. Da die Projekt-Organisation via Maven gesteuert wird, sehe ich keine größeren Hindernisse, die einen Versuch ausschlössen. Außerdem gibt es eine offizielle Anleitung für die Einrichtung von OpenMRS unter Eclipse.

Die Softwarevoraussetzungen erfülle ich. Ich habe Ubuntu mit einem JDK 6. Git und MySQL habe ich auch schon installiert. Ich benutze Eclipse Kepler in der J2EE Variante. Hinzugefügt habe ich Plugins eGit, m2e, sowie die m2e Connectoren für Git und wtp. Bevor ich zu Eclipse komme, brauche ich erst mal den Quellcode auf dem OpenMRS-Git-Repository auf GitHub. Einen Klon bekomme ich per Git auf dem Terminal über:

git clone https://github.com/openmrs/openmrs-core.git

Anschließend richte ich mir einen neuen Workspace namens openmrs ein. Dazu lege ich einfach ein neues Verzeichnis an, das ich beim nächsten Start von Eclipse als Workspace auswähle.

mkdir openmrsmkdir openmrs

Nach dem Start von Eclipse importiere ich die Projekte aus meinem Klon des Git-Repositorys. Dazu wähle ich im Menü:

> File > Import > Maven > Existing Maven Projects into Workspace

Als Quellverzeichnis für den Import wähle ich das Verzeichnis in dem der oben erwähnten Klon liegt. Bei mir ist das:

~/git/openmrs-core

Ich importiere alle Projekte, die mir der Assistent nach Auswahl der Quelle anbietet.

Import Existing Maven Projects openMRS

Import Existing Maven Projects openMRS

Nach Klick auf Finish beginnt der Import und eine Menge Mavenkram passiert im Hintergrund. Gleichzeitig werde ich aufgefordert ein neues Plugin zu installieren:

"m2e connector for build-helper-maven-plugin"

Ich folge den Anweisungen und starte Eclipse wie empfohlen neu, nachdem das Plugin installiert wurde und der Import der Projekte abgeschlossen ist. Wie erhofft konnten alle Projekte angelegt werden:

  • openmrs
  • openmrs-api
  • openmrs-release-test
  • openmrs-test
  • openmrs-tools
  • openmrs-web
  • openmrs-webapp

Allerdings werden noch einige Probleme und mehrere Tausend Warnings angezeigt. Die Fehler kann ich beheben indem ich die tools.jar in die BuildPath Einträge des Projekts openmrs-tools hinzufüge. Dort liegen die benötigten Klassen der Packages com.sun.tools… und com.sun.javadoc… für das ShouldTaglet.

import com.sun.tools.doclets.Taglet;
import com.sun.javadoc.*;
import java.util.Map;

/**
 * Taglet for @should annotations.
 */
public class ShouldTaglet implements Taglet {

Bei den Warnings handelt es sich um Unschönheiten im Quellcode. Sie sind wohl der verteilten Projektstruktur und den wenig strengen Code-Guidelines geschuldet. Ich möchte das Projekt erstmal zum Fliegen kriegen und werde mich um die Probleme später kümmern.

Ich konfiguriere einen Maven-Build, indem ich mit der rechten Maustaste auf das Top-Projekt openmrs und dort auf:

Run As > 2 Maven Build ...

klicke. Als goals tippe ich „clean install“ ein und lege los. Es dauert zwar ein paar Minuten, dann läuft der Build aber erfolgreich durch. Jetzt wird’s ernst. Ich starte einen zweiten Build, diesmal auf dem Projekt webapp mit dem goal jetty:run .

Die Webapp wird gestartet. Ich erreiche sie unter:

http://localhost:8080/openmrs/index.htm

und werde zum Installations-Assistenten weitergeleitet. Ich entscheide mich für die simple Installation. Hier muss ich nur einen MySQL Benutzer angeben, der die Datenbank und die Tabellen anlegt. Auch das mache ich natürlich gerne, der Rest läuft von selbst. Nach der Installation lande ich auf dem Login Screen und nach der Eingabe von admin / Admin123 bin ich am Ziel:

openMRSWelcomeScreen

OpenMRS Codejam bei ThoughtWorks

Es gibt wohl viele Möglichkeiten die Welt ein Bisschen besser zu machen, indem man ein wenig seiner freien Zeit und seines Know Hows einbringt. Als Softwareentwickler fällt das im Allgemeinen recht leicht, da man sich an einem von unzähligen gemeinnützigen Open Source Projekten beteiligen kann. Ich habe sowohl Zeit als auch Muse interessante und hilfreiche Projekte zu unterstützen. Der Zeitaufwand für das Projektsetup, die Einrichtung der Entwicklungsinstanz und die Einarbeitung in die fachlichen Themen der Anwendung empfinde ich aber als eine große Hürde.

OpenMRS-logo

Diese Hürde nimmt die Firma Thoughtworks bei ihren Codejams. Thoughtworks unterstützt die Open Source Plattform OpenMRS. Die Software dient zur Erfassung medizinischer Daten und erleichtert die Verwaltung von Krankenakten und somit die Diagnostik und Behandlung in Gebieten mit einer niedrigen medizinischen Infrastruktur. OpenMRS ist seit Jahren in vielen Ländern der Welt im Einsatz. Da es kostenlos ist und niedrige Anforderungen an die benötigte Hard- und Software stellt, wird es auch in vielen Entwicklungs- und Krisenländern verwendet. Die Codejams finden alle paar Monate z.B. in der Hamburger Niederlassung von Thoughtworks statt. Ich besuchte die Veranstaltung am 11.Januar 2013.

Die Einladung ließ viel Interpretationspielraum für den Inhalt des Termins. Die Angabe, dass jeder ohne Vorkenntnisse vorbeischnuppern kann, empfand ich aber als sehr sympathisch. Um 10:00 Uhr gings dann also los. Außer mir nahmen noch fünf andere Gäste und ebenso viele Mitarbeiter von ThoughtWorks an dem Termin teil. Nach einer kurzen Vorstellungsrunde bekamen wir eine kleine Einführung in das System, dessen Verwendung, der Projektorganisation und der technischen Architektur. Die Web-Anwendung setzt auf dem gängigen Technologiestack, bestehend aus SpringMVC und Hibernate auf. In der Präsentationsschicht werden JSPs verwendet deren HTML-Output mit JQuery abgerundet wird.

OpenMRS Technologieübersicht

Nach der Präsentation teilten wir uns zum Pair-Programming auf. Jeder Newbie suchte sich dazu einen alten Hasen von ThoughtWorks. Die meisten Besucher klonten sich das OpenMRS Repository von GitHub und versuchten eine Entwicklungsumgeb zum Laufen zu bringen. Ich arbeitete mit Marvin an dessen Maschine zusammen und konnte somit gleich mit der Entwicklung beginnen. Marvin ist Student und ist über ein OpenMRS-Codejam auf ThoughtWorks aufmerksam geworden. In den kommenden Wochen geht seine Bewerbung für eine Festanstellung in die heiße Phase. Ich drücke die Daumen.

Im OpenMRS-Ticket-System gibt es einige Aufgaben für Einsteiger. Bei den meisten handelt es sich um kleinere Bugs, Übersetzungen, Dokumentation oder Verbesserungen der Codequalität. Wir schnappten und einen einfachen JavaScript-Bug und konnten ihn recht schnell lösen. Also suchten wir uns ein etwas komplexeres Problem. Wir fanden einen Bug, der seine Wurzeln in der Applikationslogik hatte und verbrachten den Rest des Tages damit ihn zu finden und zu lösen. Bevor unsere Änderungen in das Produkt einfließen, müssen noch OpenMRS-Core-Entwickler den Pull-Request akzeptieren.

tw-logo

Der Codejam war das erste Event auf dem ich mit anderen Entwicklern, freiwillig und auch völlig unvorbereitet an einem Projekt arbeitete. Durch die Einführung bei ThoughtWorks und die Mischung aus uns Neulingen und Entwicklern, die die Software kannten, gelang es doch einigermaßen schnell die ersten Tickets zu bearbeiten. Neben der technischen Unterstützung schaffte ThoughtWorks eine angenehme und produktive Umgebung und stellte Getränke und natürlich Pizza.

Der nächste Codejam findet am 15.März in Hamburg statt. Ich bin dabei.