Schlagwörter
Programmierung
Java EE
JSF 2
Schulungen
Troubleshooting
Java Architekt
Domain Driven Design
Lead Architekt
Software-Architektur
JCP Member
Teamlead
Web Architektur
Coaching
Enterprise Architekt
TCP/IP
HTML
Javascript
jQuery
XML
Swing
Beratung
Reviews
Programmiersprachen
Java
Scrum
Leitung von Softwareentwicklungsprojekten
Skills
Tätigkeitsschwerpunkte
Arbeitsweise
Philosophie
Trotz meiner jungendlichen Leidenschaft für das Programmieren, entschied ich mich nach der Schule für das Studium der Fächer Latein und Mathematik. Vor allem durch das Lateinstudium entwickelte ich mein Sprachgefühl. Dieses Sprachgefühl prägte nachhaltig meine Art und Weise Software zu entwickeln. So sind für mich Design Patterns rhetorische Stilmittel, die mir helfen, mich im Code auszudrücken. Overengineering ist für mich einfach nur inhaltsleeres Gerede, das oft die fachlichen Anforderungen verbirgt. Aus meiner Sicht ist aber Code nur lesbar, wenn man die Domäne darin wiederfinden kann. Daher bin ich ein großer Anhänger des domänengetriebenen Designs.
Ich bin überzeugt, dass man nur mit einer ganzheitlichen Sicht auf ein Projekt wirklich gute Softwarearchitektur abliefern kann. Als Softwarearchitekt in Webprojekten arbeite ich sowohl im Backend als auch im Frontend und gehe im Zweifel bis auf die Netzwerkkarte herab.
In den vielen Jahren meiner Entwicklungstätigkeit haben mich auch zunehmend die sozialen Aspekte der Teams interessiert. Daher wende ich gerne meine Kenntnisse in pädagogischer Psychologie, wie z.B. Lern- und Leistungsmotivation, an.
Wichtige Punkte sind für mich die Wirtschaftlichkeit und Zukunftssicherheit der Software. Ich betrachte immer auch den Betrieb und die Verfügbarkeit von möglichen Mitarbeitern. So macht es für mich nur selten Sinn, Aufwände von der Entwicklung in den Betrieb zu verlegen. Ebenso wenig Sinn macht es, auf wenig verbreitete Programmiersprachen zu setzen, wenn die Software dauerhaft weiterentwickelt werden soll.
Es macht mir ungeheuren Spaß, mein Wissen weiterzugeben. Auch deswegen bin ich ein großer Freund des Pairprogramming und gebe auch gerne Schulungen in meinen Spezialgebieten.
Kernkompetenzen
Allgemeine Werkzeuge und Techniken
Die folgende Auflistung enthält einige Schlagwörter, Softwaresysteme und Technologien, mit denen ich mich im Laufe der Zeit auseinander gesetzt habe. Sie ist weder nach Qualität noch nach Quantität sortiert:
Java EE 7, JSF 2.2, EJB 3.1, JPA 2.0, Facelets, JavaScript, AngularJS, jQuery, Zepto, HTML5, noSQL, MongoDB, morphia, REST, Glassfish, Servlets, JSP, JDBC, Swing, Webserver, Applicationserver, TCP/IP, HTTP, HTML, CSS, Ajax, Applets, XML, DOM, XSL, XSLT, SOAP, UML, Java SE 8, WebObjects, EOF, GIT, CVS, Subversion, Perforce, ClearCase, JUnit, HttpUnit, Pascal, POP, IMAP, SMTP, SQL, nginx, haproxy, Apache, CGI, Shell-Scripting, AppleScript, Design-Patterns, Extreme Programming, Scrum, Softwareentwicklung auf Zuruf, TDD, Oracle, PostgreSQL, Apache Derby, Eclipse, WOLips, DOM4J, Maven, Ant, Xalan, Xerces, NetBeans, IntelliJ IDEA
Betriebssysteme
Mac OS X, Linux, Solaris, Windows, HP-UX
Programmiersprachen
seit 1996 Java (Appletentwicklung, Desktopapplikationen mit AWT und Swing, Konsolenapplikationen, Serversoftware, WebObjects, Java EE 6/7), JavaScript, Turbo Pascal, x86 Assembler, Delphi, Applescript, OGNL, HTML, XML, Basic, Shellskripte, XML, C-Kenntnisse
Netzwerke/Kommunikation
TCP/IP, UDP, IP, SMB, Appletalk, HTTP, FTP, SOAP, POP, IMAP, SMTP, NIO
- Softwarearchitektur
- Softwaredesign und -entwicklung
- Code-Reviews / Coaching
- Performanceanalyse und -tuning
- Troubleshooting
- Anhacken
Arbeitsweise
- kundenorientiert und pragmatisch
- selbständig und eigenverantwortlich
- schnelle Auffassungsgabe
- kurze Einarbeitungszeit in neue Werkzeuge und Technologien
- starke analytische Fähigkeiten
- ausgeprägte Teamfähigkeit
- Interesse und Fähigkeit, mein Wissen an das Team weiterzugeben
Philosophie
Trotz meiner jungendlichen Leidenschaft für das Programmieren, entschied ich mich nach der Schule für das Studium der Fächer Latein und Mathematik. Vor allem durch das Lateinstudium entwickelte ich mein Sprachgefühl. Dieses Sprachgefühl prägte nachhaltig meine Art und Weise Software zu entwickeln. So sind für mich Design Patterns rhetorische Stilmittel, die mir helfen, mich im Code auszudrücken. Overengineering ist für mich einfach nur inhaltsleeres Gerede, das oft die fachlichen Anforderungen verbirgt. Aus meiner Sicht ist aber Code nur lesbar, wenn man die Domäne darin wiederfinden kann. Daher bin ich ein großer Anhänger des domänengetriebenen Designs.
Ich bin überzeugt, dass man nur mit einer ganzheitlichen Sicht auf ein Projekt wirklich gute Softwarearchitektur abliefern kann. Als Softwarearchitekt in Webprojekten arbeite ich sowohl im Backend als auch im Frontend und gehe im Zweifel bis auf die Netzwerkkarte herab.
In den vielen Jahren meiner Entwicklungstätigkeit haben mich auch zunehmend die sozialen Aspekte der Teams interessiert. Daher wende ich gerne meine Kenntnisse in pädagogischer Psychologie, wie z.B. Lern- und Leistungsmotivation, an.
Wichtige Punkte sind für mich die Wirtschaftlichkeit und Zukunftssicherheit der Software. Ich betrachte immer auch den Betrieb und die Verfügbarkeit von möglichen Mitarbeitern. So macht es für mich nur selten Sinn, Aufwände von der Entwicklung in den Betrieb zu verlegen. Ebenso wenig Sinn macht es, auf wenig verbreitete Programmiersprachen zu setzen, wenn die Software dauerhaft weiterentwickelt werden soll.
Es macht mir ungeheuren Spaß, mein Wissen weiterzugeben. Auch deswegen bin ich ein großer Freund des Pairprogramming und gebe auch gerne Schulungen in meinen Spezialgebieten.
Kernkompetenzen
- Java Enterprise Edition
In Java EE 5/6/7 wurden sehr viele neue Konzepte, insbesondere im Bereich Persistenz und Web, integriert. Diese Konzepte sind tatsächlich jedoch sehr alt und standen in Frameworks, mit denen ich vor EE 5 bereits viele Jahre gearbeitet habe, schon lange zur Verfügung. Daher ist mir Java EE sehr vertraut und ich kenne sowohl die Chancen als auch die möglichen Probleme. - Java Server Faces
Seit 2012 bin ich Mitglied der JSF-Expert-Group und arbeite an der Spezifikation und der Referenzimplementierung mit. - JavaScript
Durch die Entwicklung vieler JavaScript-lastiger Webapplikationen habe ich hier sehr breites Expertenwissen. - Hochperformante Webapplikationen
Durch ausgiebige Erfahrung im Online-Glücksspiel insbesondere Sportwetten, Pferdewetten und Lotto, weiß ich besonders gut mit Peeks (Lotto-Jackpot, oder Weltmeisterschaft) und dauerhaft großer Last (Casino) umzugehen. - Code-Reviews
Durch meine schnelle Auffassungsgabe und meine lange Erfahrung (ich habe mit 14 Jahren angefangen zu programmieren), finde ich mich sehr schnell in fremden Quelltexten zurecht. Durch meine ausgeprägten Fähigkeiten in objektorientiertem Design, kann ich hilfreiche Verbesserungsvorschläge zum Code machen. - Know-How-Transfer/Coaching
Durch meine Lehramtsausbildung bin ich sehr gut in der Lage, mein Wissen an andere weiterzugeben. Das tue ich am liebsten an konkreten Projekten in Form von Pairprogramming oder Anhacken. - Performancetuning und Troubleshooting
Aufgrund meiner langjährigen Erfahrung kann ich Performance- und andere Probleme sehr schnell lokalisieren und auch beheben.
Allgemeine Werkzeuge und Techniken
Die folgende Auflistung enthält einige Schlagwörter, Softwaresysteme und Technologien, mit denen ich mich im Laufe der Zeit auseinander gesetzt habe. Sie ist weder nach Qualität noch nach Quantität sortiert:
Java EE 7, JSF 2.2, EJB 3.1, JPA 2.0, Facelets, JavaScript, AngularJS, jQuery, Zepto, HTML5, noSQL, MongoDB, morphia, REST, Glassfish, Servlets, JSP, JDBC, Swing, Webserver, Applicationserver, TCP/IP, HTTP, HTML, CSS, Ajax, Applets, XML, DOM, XSL, XSLT, SOAP, UML, Java SE 8, WebObjects, EOF, GIT, CVS, Subversion, Perforce, ClearCase, JUnit, HttpUnit, Pascal, POP, IMAP, SMTP, SQL, nginx, haproxy, Apache, CGI, Shell-Scripting, AppleScript, Design-Patterns, Extreme Programming, Scrum, Softwareentwicklung auf Zuruf, TDD, Oracle, PostgreSQL, Apache Derby, Eclipse, WOLips, DOM4J, Maven, Ant, Xalan, Xerces, NetBeans, IntelliJ IDEA
Betriebssysteme
Mac OS X, Linux, Solaris, Windows, HP-UX
Programmiersprachen
seit 1996 Java (Appletentwicklung, Desktopapplikationen mit AWT und Swing, Konsolenapplikationen, Serversoftware, WebObjects, Java EE 6/7), JavaScript, Turbo Pascal, x86 Assembler, Delphi, Applescript, OGNL, HTML, XML, Basic, Shellskripte, XML, C-Kenntnisse
Netzwerke/Kommunikation
TCP/IP, UDP, IP, SMB, Appletalk, HTTP, FTP, SOAP, POP, IMAP, SMTP, NIO
Projekthistorie
Ausgewählte Projekte/Tätigkeiten (chronologisch absteigend)
Chiefarchitect Onlinelotteryplatform (2011 - heute)
Als Chiefarchitect habe ich sowohl die Softwarearchitektur als auch das Ent-wicklungsteam von Grund auf aufgebaut. Als Grundlage wählte ich hier die Java-EE-6-Platform. Da das Projekt auf Continuous Delivery ausgelegt war, habe ich mich gegen eine relationale Datenbank und für die dokumentenbasierte MongoDB entschieden.
Die Platform ist mehrsprachig, mehrwährungsfähig, skinbar und wurde bis heute in 11 Ländern in 7 Sprachen und 8 Währungen ausgerollt.
Die Software wird domänengetrieben weiterentwickelt und sowohl auf der Kunden- als auch auf Backoffice-Seite kommt JSF zum Einsatz. CDI ist das Mittel der Wahl zu Dependency Injection, weil es eine starke Kapselung auf Paketebene zulässt und sich exzellent in die objektorientierte Javawelt einfügt. Da MongoDB von den herkömmlichen JPA-Providern nicht gut genug unterstützt wird, kommen EJBs kaum zum Einsatz. Als Objektmapper ist morphia im Einsatz.
Bei jedem Build werden weit über 1000 Unit- und Integrationstests ausgeführt. Die Integrationstests laufen dabei mit Selenium und PhantomJS um eine akzeptable Ausführungszeit zu Erreichen.
Bis heute betreue ich das schnell wachsende Entwicklungsteam als Coding Architect im Wesentlichen durch Code-Reviews und Support der Entwickler durch Anhacken und Coachings.
Technische Due Dilligences (2013 - heute)
Als erfahrener Softwarearchitekt werde ich hin und wieder von Risikokapitalgebern beauftragt Entwicklungsteams in StartUps zu prüfen. Hier beurteile ich im Wesentlichen die Softskills des Teams und weniger die eingesetzte Technik, da StartUps ganz besondere Anforderungen an das Team haben, insbesondere in Hinsicht auf Skalierbarkeit und Wachstum.
JSF Resource Library Contracts (2012)
Als JSF Expert Group Member habe ich das Konzept der Resource Library Contracts erfunden, spezifiziert und in der Referenzimplementierung Mojarra implementiert. Resource Library Contracts sind die konsequente Fortführung meiner Erfahrungen mit komponentenbasierter Mandantenfähigkeit aus verschiedenen vorangegangenen Projekten.
JSF Passthrough Elements (2012)
Als JSF Expert Group Member habe ich den Prototypen für den DefaultTag-Decorator in der Referenzimplementierung Mojarra gebaut. Der Prototyp ist dann unverändert live gegangen.
Refactoring/Performancetuning ProductCatalogue (2012)
Als erfahrener Entwickler im Java-EE-Umfeld wurde ich beauftragt, eine Komponente in einem zurückgeholten Offshoreprojekt zu refaktorisieren und da-bei die Performance zu optimieren, so dass die Komponente endlich produktiv eingesetzt werden kann.
Refactoring/Performancetuning CMEngine (2011)
In einem großen Offshoreprojekt wurde ich als Troubleshooter damit beauftragt, eine zentrale Komponente zu refaktorisieren. Der Offshoredienstleister war nicht in der Lage, die Performanceanforderungen des Kunden zu erreichen. Ich habe die entsprechende Komponente vom prozeduralen Ansatz auf einen objektorientierten umgebaut und so die Anforderungen erfüllt. Darüber hinaus habe ich die Architekten bzgl. Persistenz im Java-EE-Container beraten.
Neuentwicklung Testsonde Zufallszahlengenerator (2010)
Um die Casinospiele testen zu können, muss der Tester in der Lage sein, dem Zufallszahlengenerator bestimmte Zahlen vorgeben zu können. Die auf Swing und RMI basierende Testsonde war jedoch für automatisierte Tests nicht zu gebrauchen.
Daher habe ich einen einfachen REST-Service entwickelt und die Oberfläche dazu mit HTML (JSF) und jQuery realisiert, da man mit jQuery sehr elegant REST-Services ansprechen kann. Der REST-Service wurde dann in den automatisierten Tests per Jmeter angesprochen.
Komponentenbasierte Mandantenfähigkeit (2009)
Basierend auf der Referenzimplementierung von Sun wurde in diesem Projekt JSF 2.0 so erweitert, dass in derselben Applikation mandantenabhängig einzelne Komponenten ausgetauscht werden können. Üblicherweise reicht es für einen neuen Mandanten, die Decoratorkomponente auszutauschen, wodurch neue Mandanten sehr schnell umgesetzt werden können. Ich war in diesem Projekt federführend konzeptionell tätig und habe die Entwickler entsprechend angeleitet.
Anhacken/Coaching (2008 - 2010)
Im Rahmen des Entwickler-Supports und Coachings bei edict skizziere ich meine Ideen und Lösungsansätze hin und wieder direkt an der Tastatur des entsprechenden Entwicklers. Hierbei programmiere ich Code-Fragmente, die dem Entwickler das bevorzugte Pattern vorgeben. Nach dem Anhacken ist der Entwickler üblicherweise in der Lage, die Lösung auszuimplementieren.
Code-Reviews (2008 - 2010)
In meiner Rolle als Chefentwickler bei edict führe ich regelmäßig Code-Reviews durch. Im Bereich der Code-Qualität kann vieles durch Tools wie Sonar, Checkstyle oder PMD automatisiert abgefangen werden. Da diese Tools jedoch nicht beurteilen können, ob der Code ein Problem angemessen behandelt, sind Code-Reviews durch einen erfahrenen Entwickler nötig. Hierbei achte ich stets darauf, dass die Prinzipien DRY und KISS eingehalten werden und Overengineering nicht vorkommt.
Serverseitige Validierung mit JavaScript (2009)
Bei edict haben wir uns bei der clientseitigen Validierung für das jQuery validation plugin entschieden. Um sicherzustellen, dass auf dem Server die selben Regeln verwendet werden, liegt es nahe, auch hier mit JavaScript zu validieren. Dazu habe ich ein serverseitiges JavaScript entwickelt, das in der Lage war, diese Regeln direkt auf die Java-Objekte anzuwenden. Das hatte den charmanten Nebeneffekt, dass die Regeln für unsere Objekte in einem gut lesbaren JSON zusammengefasst waren.
Systemarchitektur Edict Onlinecasino (2009)
Da im Casino quasi jeder Klick Geld kostet, gibt es sehr viele Schreiboperationen in der Datenbank. Um die Datenbank nicht zusätzlich mit unnötigen Leseoperationen zu belasten, habe ich mich für eine stark statusbehaftete Architektur entschieden. Dadurch ist es gelungen, während des Spielens aus-schließlich Schreiboperationen in der Datenbank durchzuführen.
Die Anwendung wird in Clouds deployt, die über einen verteilten Cache miteinander ihre Daten abgleichen. Auf diese Weise ist die Anwendung linear skalierbar.
Softwarearchitektur Edict Onlinecasino (EJB 3 und JPA) (2009)
Um die Entwicklungsaufwände so gering wie möglich zu halten und eine starke Kapselung der Geschäftslogik zu erreichen, habe ich mich entschieden, durch Domain-Driven-Design die Objektorientierung wieder in die Entwicklung zu bringen. Die Domain-Objekte sind nun intelligente und mächtige Objekte, die alles können, was man von ihnen erwartet. Dadurch kann auf infrastrukturorientierten Code wie z.B. Services weitestgehend verzichtet werden. Dies führt zu einer drastischen Reduzierung des benötigten Codes und damit zu höherer Wartbarkeit und Lesbarkeit. Im statusbehafteten Umfeld ist so die höchste Performance zu erreichen.
Maven / NetBeans Integration (2009)
Da bei edict ein sehr modulares System geplant ist, ist ein Buildtool wie Maven unabdingbar. Um Maven mit NetBeans zu verheiraten, musste also ein Tool geschaffen werden, das aus einem POM ein NetBeans-Projekt erzeugt. In diesem Zuge, habe ich ein Maven-Plugin geschrieben, das genau das tut.
(http://kenai.com/projects/mvn-nb-plugin)
SEO jaxx.com (2008)
Um von Suchmaschinen vernünftig indiziert werden zu können, mussten die von der Applikation erzeugten Urls eindeutig und maschinenlesbar gemacht werden. Außerdem sollten im Index der Suchmaschinen keine sessionbasierten Seiten auftauchen, die unweigerlich zu einem Sessiontimeout führen würden, wenn der Sucher sie anklickt.
Diese Anforderungen habe ich durch sehr tiefe aber überschaubare Eingriffe von wenigen Zeilen Code in den Applicationserver erfüllt.
Performancetuning jaxx.de/jaxx.com (2005 - 2008)
Da immer wieder Performance-Probleme auftauchen, habe ich die Applikation regelmäßig mit einem Profiler untersucht und so stetig die Performance verbessert bis jaxx.de zu Deutschlands stabilsten Lottoangeboten gehörte.
(http://openpr.de/pdf/175664/Von-Gluecksjaegern-ueberrannt-Lotto-Hype-macht-Webseiten-zu-schaffen.pdf)
AJAX-basiertes Pferdewettangebot jaxx.com (2008)
Aufgrund des Erfolgs des vorangegangenen Projekts (AJAX Sportwetten) wird diese Technologie nun auch im Pferdewettenbereich eingesetzt. Um Leseoperationen auf der Datenbank zu verringern (Pferdewetten sind hochdyna-misch), habe ich einen allgemeingültigen Benachrichtigungsmechanismus zur Cache-Invalidierung auf Basis von Datenbanktriggern implementiert, der ohne Änderungen des Backendcodes einsetzbar war.
AJAX-basiertes Sportwettangebot jaxx.com (2007)
Um eine stärkere Interaktivität zu erreichen, wurde beschlossen, das Sport-wettangebot bei jaxx.com in eine Ajax-basierte Lösung zu überführen.
Der Server liefert im Sportwettenbereich JSON aus, welches dann im Client per JavaScript in HTML gewandelt wird. Meine Aufgabe war es, die üblichen Probleme der Asynchronität oder des Backtrackings zu lösen und eine vernünftige Fehlerbehandlung zu implementieren.
Skinning jaxx.com (2007)
Ziel des Projektes war es, eine möglichst einfach zu verwendende Mandantenfähigkeit der Plattform herzustellen. Meine Aufgabe war sowohl die Konzeption als auch die Implementierung.
Durch eine intensive Nutzung des komponentenbasierten Frameworks Web-Objects, ist es mir gelungen eine hochflexible aber einfache Möglichkeit der Mandantenfähigkeit im Frontendbereich zu erreichen. Die sogenannten Skins wurden daraufhin üblicherweise von den HTML-Entwicklern im Alleingang innerhalb weniger Tage erstellt. Auch aufwändigere Skins, die z.B. einen Single-Sign-On bei einem Partner beinhalteten, konnten in kürzester Zeit abgearbeitet werden, erforderten allerdings noch etwas Arbeit eines Java-Entwicklers.
FrontendSupport (2005 - 2008)
Bei Anybet war ich dafür verantwortlich, das wenig objektorientierte Backend mit dem stark objektorientierten Applicationserver WebObjects zu vereinen und den HTML-Entwicklern das Leben so leicht wie möglich zu machen. Hierzu war eine enge Zusammenarbeit von Backend- und HTML-Entwicklern und sehr gute Kenntnisse von Client-Technologien wie HTML, CSS und JavaScript meinerseits notwendig.
In diesem Rahmen war ich für alle Bereiche der Webplattform wie Registrierung, Bezahlung, Marketinginstrumente, Affiliateeinbindung, Zählpixel, SSO bei Partnern und Einsprünge in die Applikation zuständig.
Mehrsprachenfähigkeit jaxx.com (2005)
Die bestehende Plattform jaxx.de sollte so erweitert werden, dass über sie als jaxx.com Sportwetten in verschiedenen Sprachen angeboten werden können. Mir wurde die Gesamtkonzeption und die Entwicklung im Frontendbereich (Server) aufgetragen.
Die zu übersetzenden Textschnipsel wurden in einer einfachen Tabelle in der Datenbank abgebildet. Diese habe ich über das sogenannte Key-Value-Coding in der Template-Engine verfügbar gemacht, so dass sich die HTML-Entwickler keine Gedanken über die Sprache des Benutzers machen mussten. Über denselben Mechanismus habe ich sprachabhängige Formatter in der Template-Engine verfügbar gemacht.
SMM deutsche Telekom (2004)
Hier darf ich nicht allzu viel sagen, da ich ein NDA unterschrieben habe. Ich habe eine WebServices-Server-Anwendung und die entsprechende Client-Anwendung entwickelt.
Bilddatenbank und automatisierte Katalogproduktion (2003 - 2004)
Für eine webbasierte Bilddatenbank für Zapf-Creation habe ich HttpUnit-Tests für den externen Bereich der Bilddatenbank entwickelt. Diese automatischen Tests decken alle Funktionen ab, die im externen Bereich verfügbar sind. Das beinhaltet auch die Tests der als Zip-Datei heruntergeladenen Shoppingcarts und verschiedener JavaScript-Funktionen.
Für die automatisierte Katalogproduktion habe ich die als PDF angelieferten Layout-Vorgaben in XML-Templates umgesetzt, so dass aus den Datenbankinhalten ein druckfähiges PDF erzeugt werden konnte.
Software für vernetzte Arbeitsvermittlung (2003 - 2004)
Für JobSync Göttingen habe ich eine webbasierte Software für vernetzte Arbeitsvermittlung entwickelt. Ziel war es, bundesweit Arbeitsvermittler miteinander zu vernetzen und verschiedene Pools von Arbeitssuchenden und offenen Stellen anhand von 5900 berufskundlichen Merkmalen miteinander zu matchen.
Da das Konzept lediglich aus ein paar Scribbles bestand, habe ich zusammen mit dem Kunden das Projekt iterativ entwickelt. Ich habe hier die Frontend-Komponenten so entwickelt, dass Sie ausschließlich XML erzeugen und anschließend das gesamte Dokument per XSLT in HTML umgewandelt wird. So war es mir möglich innerhalb kürzester Zeit, neue Funktionalitäten zu implementieren, ohne auf das Design angewiesen zu sein. Es wurde einmal ein Grunddesign entwickelt, das dann mit geringen Änderungen am XSLT auf jede Seite angewendet werden konnte.
Tierhausverwaltung (2002)
Bei cluster9 habe ich eine webbasierte Tierhausverwaltung für das Max-Planck-Institut für biophysikalische Chemie in Göttingen realisiert. Die Software sollte eine bestehende ORAForms-Anwendung ablösen und per Touchscreen zu bedienen sein. Das Look And Feel des Frontends war durch statische HTML-Seiten vorgegeben. Im Zuge dessen habe ich für cluster9 den WODynamizer entwickelt, der basierend auf JTidy aus statischen HTML-Seiten dynamische WebObjects-Komponenten erzeugt. Zum Projektabschluss habe ich den Mitarbeiter des MPI, der das Projekt weiterpflegen sollte, in Java/WebObjects geschult.
Unified Messaging (2001 -2002)
Ein Auftragnehmer der Telekom entwickelte T-Netbox.de. Das Projekt ist jedoch aufgrund technischer Probleme ins Stocken geraten. Im Auftrag von cluster9 habe ich zu Beginn kleinere Probleme, wie erhöhten Speicherverbrauch gelöst. Dann habe ich die Mitarbeiter vor Ort in Java/WebObjects und CVS geschult (auf Englisch). Später habe ich die komplette bestehende Anwendung nach Pure-Java portiert und auch die bestehende proprietäre native Mail-Anbindung durch JavaMail ersetzt. Weiterhin habe ich verschiedene Encoding-Probleme (Umlaute, etc.) gelöst.
CapacityPlanner (2001)
Bei der INIS wurde ein Kapazitätsplanungssystem für die COSS Systemtechnik AG in Aalen entwickelt, welches zur Planung der Ressourcen innerhalb des Projektgeschäftes verwendet worden ist. Die Integration in eine externe Zeiterfassung sowie in ein Kostenrechnungssystem war ebenfalls Bestandteil der Implementierung. Das bei der INIS entwickelte Basissystem dafür war das sogenannte Requester-Framework, das ein umfassendes System zum „ressource constrained scheduling“ darstellte. An der Konzeption und Entwicklung dieses Systems war ich in leitender Position maßgeblich beteiligt.
Basistechnologie (2000 - 2001)
Bei der INIS entwickelte ich allgemeingültige Basistechnologie. Die Basistechnologie hatte als wesentliche Voraussetzung ohne Drittanbieterklassen zu arbeiten, es sei denn, sie erheben keine Lizenzgebühren und liegen im Quellcode vor. Zur Basistechnologie gehörte u.a. ein Framework zum zentralen Loggen, das mit verschiedenen Filtern, Errorlevels und Logkanälen arbeitet, sowie ein mandantenfähiges Konfigurationsmanagement, das mit XML-Dateien benutzerabhängige Konfigurationen verwaltet. Weiterhin beinhaltet die Basistechnologie sämtliche aktuellen Technologien im Bereich mobile Communications. Meine Aufgabe hier bestand sowohl in der Leitung, Konzeption und Implementierung als auch in der Dokumentation und der Mitarbeiterschulung im Einsatz der Basistechnologie.
Chiefarchitect Onlinelotteryplatform (2011 - heute)
Als Chiefarchitect habe ich sowohl die Softwarearchitektur als auch das Ent-wicklungsteam von Grund auf aufgebaut. Als Grundlage wählte ich hier die Java-EE-6-Platform. Da das Projekt auf Continuous Delivery ausgelegt war, habe ich mich gegen eine relationale Datenbank und für die dokumentenbasierte MongoDB entschieden.
Die Platform ist mehrsprachig, mehrwährungsfähig, skinbar und wurde bis heute in 11 Ländern in 7 Sprachen und 8 Währungen ausgerollt.
Die Software wird domänengetrieben weiterentwickelt und sowohl auf der Kunden- als auch auf Backoffice-Seite kommt JSF zum Einsatz. CDI ist das Mittel der Wahl zu Dependency Injection, weil es eine starke Kapselung auf Paketebene zulässt und sich exzellent in die objektorientierte Javawelt einfügt. Da MongoDB von den herkömmlichen JPA-Providern nicht gut genug unterstützt wird, kommen EJBs kaum zum Einsatz. Als Objektmapper ist morphia im Einsatz.
Bei jedem Build werden weit über 1000 Unit- und Integrationstests ausgeführt. Die Integrationstests laufen dabei mit Selenium und PhantomJS um eine akzeptable Ausführungszeit zu Erreichen.
Bis heute betreue ich das schnell wachsende Entwicklungsteam als Coding Architect im Wesentlichen durch Code-Reviews und Support der Entwickler durch Anhacken und Coachings.
Technische Due Dilligences (2013 - heute)
Als erfahrener Softwarearchitekt werde ich hin und wieder von Risikokapitalgebern beauftragt Entwicklungsteams in StartUps zu prüfen. Hier beurteile ich im Wesentlichen die Softskills des Teams und weniger die eingesetzte Technik, da StartUps ganz besondere Anforderungen an das Team haben, insbesondere in Hinsicht auf Skalierbarkeit und Wachstum.
JSF Resource Library Contracts (2012)
Als JSF Expert Group Member habe ich das Konzept der Resource Library Contracts erfunden, spezifiziert und in der Referenzimplementierung Mojarra implementiert. Resource Library Contracts sind die konsequente Fortführung meiner Erfahrungen mit komponentenbasierter Mandantenfähigkeit aus verschiedenen vorangegangenen Projekten.
JSF Passthrough Elements (2012)
Als JSF Expert Group Member habe ich den Prototypen für den DefaultTag-Decorator in der Referenzimplementierung Mojarra gebaut. Der Prototyp ist dann unverändert live gegangen.
Refactoring/Performancetuning ProductCatalogue (2012)
Als erfahrener Entwickler im Java-EE-Umfeld wurde ich beauftragt, eine Komponente in einem zurückgeholten Offshoreprojekt zu refaktorisieren und da-bei die Performance zu optimieren, so dass die Komponente endlich produktiv eingesetzt werden kann.
Refactoring/Performancetuning CMEngine (2011)
In einem großen Offshoreprojekt wurde ich als Troubleshooter damit beauftragt, eine zentrale Komponente zu refaktorisieren. Der Offshoredienstleister war nicht in der Lage, die Performanceanforderungen des Kunden zu erreichen. Ich habe die entsprechende Komponente vom prozeduralen Ansatz auf einen objektorientierten umgebaut und so die Anforderungen erfüllt. Darüber hinaus habe ich die Architekten bzgl. Persistenz im Java-EE-Container beraten.
Neuentwicklung Testsonde Zufallszahlengenerator (2010)
Um die Casinospiele testen zu können, muss der Tester in der Lage sein, dem Zufallszahlengenerator bestimmte Zahlen vorgeben zu können. Die auf Swing und RMI basierende Testsonde war jedoch für automatisierte Tests nicht zu gebrauchen.
Daher habe ich einen einfachen REST-Service entwickelt und die Oberfläche dazu mit HTML (JSF) und jQuery realisiert, da man mit jQuery sehr elegant REST-Services ansprechen kann. Der REST-Service wurde dann in den automatisierten Tests per Jmeter angesprochen.
Komponentenbasierte Mandantenfähigkeit (2009)
Basierend auf der Referenzimplementierung von Sun wurde in diesem Projekt JSF 2.0 so erweitert, dass in derselben Applikation mandantenabhängig einzelne Komponenten ausgetauscht werden können. Üblicherweise reicht es für einen neuen Mandanten, die Decoratorkomponente auszutauschen, wodurch neue Mandanten sehr schnell umgesetzt werden können. Ich war in diesem Projekt federführend konzeptionell tätig und habe die Entwickler entsprechend angeleitet.
Anhacken/Coaching (2008 - 2010)
Im Rahmen des Entwickler-Supports und Coachings bei edict skizziere ich meine Ideen und Lösungsansätze hin und wieder direkt an der Tastatur des entsprechenden Entwicklers. Hierbei programmiere ich Code-Fragmente, die dem Entwickler das bevorzugte Pattern vorgeben. Nach dem Anhacken ist der Entwickler üblicherweise in der Lage, die Lösung auszuimplementieren.
Code-Reviews (2008 - 2010)
In meiner Rolle als Chefentwickler bei edict führe ich regelmäßig Code-Reviews durch. Im Bereich der Code-Qualität kann vieles durch Tools wie Sonar, Checkstyle oder PMD automatisiert abgefangen werden. Da diese Tools jedoch nicht beurteilen können, ob der Code ein Problem angemessen behandelt, sind Code-Reviews durch einen erfahrenen Entwickler nötig. Hierbei achte ich stets darauf, dass die Prinzipien DRY und KISS eingehalten werden und Overengineering nicht vorkommt.
Serverseitige Validierung mit JavaScript (2009)
Bei edict haben wir uns bei der clientseitigen Validierung für das jQuery validation plugin entschieden. Um sicherzustellen, dass auf dem Server die selben Regeln verwendet werden, liegt es nahe, auch hier mit JavaScript zu validieren. Dazu habe ich ein serverseitiges JavaScript entwickelt, das in der Lage war, diese Regeln direkt auf die Java-Objekte anzuwenden. Das hatte den charmanten Nebeneffekt, dass die Regeln für unsere Objekte in einem gut lesbaren JSON zusammengefasst waren.
Systemarchitektur Edict Onlinecasino (2009)
Da im Casino quasi jeder Klick Geld kostet, gibt es sehr viele Schreiboperationen in der Datenbank. Um die Datenbank nicht zusätzlich mit unnötigen Leseoperationen zu belasten, habe ich mich für eine stark statusbehaftete Architektur entschieden. Dadurch ist es gelungen, während des Spielens aus-schließlich Schreiboperationen in der Datenbank durchzuführen.
Die Anwendung wird in Clouds deployt, die über einen verteilten Cache miteinander ihre Daten abgleichen. Auf diese Weise ist die Anwendung linear skalierbar.
Softwarearchitektur Edict Onlinecasino (EJB 3 und JPA) (2009)
Um die Entwicklungsaufwände so gering wie möglich zu halten und eine starke Kapselung der Geschäftslogik zu erreichen, habe ich mich entschieden, durch Domain-Driven-Design die Objektorientierung wieder in die Entwicklung zu bringen. Die Domain-Objekte sind nun intelligente und mächtige Objekte, die alles können, was man von ihnen erwartet. Dadurch kann auf infrastrukturorientierten Code wie z.B. Services weitestgehend verzichtet werden. Dies führt zu einer drastischen Reduzierung des benötigten Codes und damit zu höherer Wartbarkeit und Lesbarkeit. Im statusbehafteten Umfeld ist so die höchste Performance zu erreichen.
Maven / NetBeans Integration (2009)
Da bei edict ein sehr modulares System geplant ist, ist ein Buildtool wie Maven unabdingbar. Um Maven mit NetBeans zu verheiraten, musste also ein Tool geschaffen werden, das aus einem POM ein NetBeans-Projekt erzeugt. In diesem Zuge, habe ich ein Maven-Plugin geschrieben, das genau das tut.
(http://kenai.com/projects/mvn-nb-plugin)
SEO jaxx.com (2008)
Um von Suchmaschinen vernünftig indiziert werden zu können, mussten die von der Applikation erzeugten Urls eindeutig und maschinenlesbar gemacht werden. Außerdem sollten im Index der Suchmaschinen keine sessionbasierten Seiten auftauchen, die unweigerlich zu einem Sessiontimeout führen würden, wenn der Sucher sie anklickt.
Diese Anforderungen habe ich durch sehr tiefe aber überschaubare Eingriffe von wenigen Zeilen Code in den Applicationserver erfüllt.
Performancetuning jaxx.de/jaxx.com (2005 - 2008)
Da immer wieder Performance-Probleme auftauchen, habe ich die Applikation regelmäßig mit einem Profiler untersucht und so stetig die Performance verbessert bis jaxx.de zu Deutschlands stabilsten Lottoangeboten gehörte.
(http://openpr.de/pdf/175664/Von-Gluecksjaegern-ueberrannt-Lotto-Hype-macht-Webseiten-zu-schaffen.pdf)
AJAX-basiertes Pferdewettangebot jaxx.com (2008)
Aufgrund des Erfolgs des vorangegangenen Projekts (AJAX Sportwetten) wird diese Technologie nun auch im Pferdewettenbereich eingesetzt. Um Leseoperationen auf der Datenbank zu verringern (Pferdewetten sind hochdyna-misch), habe ich einen allgemeingültigen Benachrichtigungsmechanismus zur Cache-Invalidierung auf Basis von Datenbanktriggern implementiert, der ohne Änderungen des Backendcodes einsetzbar war.
AJAX-basiertes Sportwettangebot jaxx.com (2007)
Um eine stärkere Interaktivität zu erreichen, wurde beschlossen, das Sport-wettangebot bei jaxx.com in eine Ajax-basierte Lösung zu überführen.
Der Server liefert im Sportwettenbereich JSON aus, welches dann im Client per JavaScript in HTML gewandelt wird. Meine Aufgabe war es, die üblichen Probleme der Asynchronität oder des Backtrackings zu lösen und eine vernünftige Fehlerbehandlung zu implementieren.
Skinning jaxx.com (2007)
Ziel des Projektes war es, eine möglichst einfach zu verwendende Mandantenfähigkeit der Plattform herzustellen. Meine Aufgabe war sowohl die Konzeption als auch die Implementierung.
Durch eine intensive Nutzung des komponentenbasierten Frameworks Web-Objects, ist es mir gelungen eine hochflexible aber einfache Möglichkeit der Mandantenfähigkeit im Frontendbereich zu erreichen. Die sogenannten Skins wurden daraufhin üblicherweise von den HTML-Entwicklern im Alleingang innerhalb weniger Tage erstellt. Auch aufwändigere Skins, die z.B. einen Single-Sign-On bei einem Partner beinhalteten, konnten in kürzester Zeit abgearbeitet werden, erforderten allerdings noch etwas Arbeit eines Java-Entwicklers.
FrontendSupport (2005 - 2008)
Bei Anybet war ich dafür verantwortlich, das wenig objektorientierte Backend mit dem stark objektorientierten Applicationserver WebObjects zu vereinen und den HTML-Entwicklern das Leben so leicht wie möglich zu machen. Hierzu war eine enge Zusammenarbeit von Backend- und HTML-Entwicklern und sehr gute Kenntnisse von Client-Technologien wie HTML, CSS und JavaScript meinerseits notwendig.
In diesem Rahmen war ich für alle Bereiche der Webplattform wie Registrierung, Bezahlung, Marketinginstrumente, Affiliateeinbindung, Zählpixel, SSO bei Partnern und Einsprünge in die Applikation zuständig.
Mehrsprachenfähigkeit jaxx.com (2005)
Die bestehende Plattform jaxx.de sollte so erweitert werden, dass über sie als jaxx.com Sportwetten in verschiedenen Sprachen angeboten werden können. Mir wurde die Gesamtkonzeption und die Entwicklung im Frontendbereich (Server) aufgetragen.
Die zu übersetzenden Textschnipsel wurden in einer einfachen Tabelle in der Datenbank abgebildet. Diese habe ich über das sogenannte Key-Value-Coding in der Template-Engine verfügbar gemacht, so dass sich die HTML-Entwickler keine Gedanken über die Sprache des Benutzers machen mussten. Über denselben Mechanismus habe ich sprachabhängige Formatter in der Template-Engine verfügbar gemacht.
SMM deutsche Telekom (2004)
Hier darf ich nicht allzu viel sagen, da ich ein NDA unterschrieben habe. Ich habe eine WebServices-Server-Anwendung und die entsprechende Client-Anwendung entwickelt.
Bilddatenbank und automatisierte Katalogproduktion (2003 - 2004)
Für eine webbasierte Bilddatenbank für Zapf-Creation habe ich HttpUnit-Tests für den externen Bereich der Bilddatenbank entwickelt. Diese automatischen Tests decken alle Funktionen ab, die im externen Bereich verfügbar sind. Das beinhaltet auch die Tests der als Zip-Datei heruntergeladenen Shoppingcarts und verschiedener JavaScript-Funktionen.
Für die automatisierte Katalogproduktion habe ich die als PDF angelieferten Layout-Vorgaben in XML-Templates umgesetzt, so dass aus den Datenbankinhalten ein druckfähiges PDF erzeugt werden konnte.
Software für vernetzte Arbeitsvermittlung (2003 - 2004)
Für JobSync Göttingen habe ich eine webbasierte Software für vernetzte Arbeitsvermittlung entwickelt. Ziel war es, bundesweit Arbeitsvermittler miteinander zu vernetzen und verschiedene Pools von Arbeitssuchenden und offenen Stellen anhand von 5900 berufskundlichen Merkmalen miteinander zu matchen.
Da das Konzept lediglich aus ein paar Scribbles bestand, habe ich zusammen mit dem Kunden das Projekt iterativ entwickelt. Ich habe hier die Frontend-Komponenten so entwickelt, dass Sie ausschließlich XML erzeugen und anschließend das gesamte Dokument per XSLT in HTML umgewandelt wird. So war es mir möglich innerhalb kürzester Zeit, neue Funktionalitäten zu implementieren, ohne auf das Design angewiesen zu sein. Es wurde einmal ein Grunddesign entwickelt, das dann mit geringen Änderungen am XSLT auf jede Seite angewendet werden konnte.
Tierhausverwaltung (2002)
Bei cluster9 habe ich eine webbasierte Tierhausverwaltung für das Max-Planck-Institut für biophysikalische Chemie in Göttingen realisiert. Die Software sollte eine bestehende ORAForms-Anwendung ablösen und per Touchscreen zu bedienen sein. Das Look And Feel des Frontends war durch statische HTML-Seiten vorgegeben. Im Zuge dessen habe ich für cluster9 den WODynamizer entwickelt, der basierend auf JTidy aus statischen HTML-Seiten dynamische WebObjects-Komponenten erzeugt. Zum Projektabschluss habe ich den Mitarbeiter des MPI, der das Projekt weiterpflegen sollte, in Java/WebObjects geschult.
Unified Messaging (2001 -2002)
Ein Auftragnehmer der Telekom entwickelte T-Netbox.de. Das Projekt ist jedoch aufgrund technischer Probleme ins Stocken geraten. Im Auftrag von cluster9 habe ich zu Beginn kleinere Probleme, wie erhöhten Speicherverbrauch gelöst. Dann habe ich die Mitarbeiter vor Ort in Java/WebObjects und CVS geschult (auf Englisch). Später habe ich die komplette bestehende Anwendung nach Pure-Java portiert und auch die bestehende proprietäre native Mail-Anbindung durch JavaMail ersetzt. Weiterhin habe ich verschiedene Encoding-Probleme (Umlaute, etc.) gelöst.
CapacityPlanner (2001)
Bei der INIS wurde ein Kapazitätsplanungssystem für die COSS Systemtechnik AG in Aalen entwickelt, welches zur Planung der Ressourcen innerhalb des Projektgeschäftes verwendet worden ist. Die Integration in eine externe Zeiterfassung sowie in ein Kostenrechnungssystem war ebenfalls Bestandteil der Implementierung. Das bei der INIS entwickelte Basissystem dafür war das sogenannte Requester-Framework, das ein umfassendes System zum „ressource constrained scheduling“ darstellte. An der Konzeption und Entwicklung dieses Systems war ich in leitender Position maßgeblich beteiligt.
Basistechnologie (2000 - 2001)
Bei der INIS entwickelte ich allgemeingültige Basistechnologie. Die Basistechnologie hatte als wesentliche Voraussetzung ohne Drittanbieterklassen zu arbeiten, es sei denn, sie erheben keine Lizenzgebühren und liegen im Quellcode vor. Zur Basistechnologie gehörte u.a. ein Framework zum zentralen Loggen, das mit verschiedenen Filtern, Errorlevels und Logkanälen arbeitet, sowie ein mandantenfähiges Konfigurationsmanagement, das mit XML-Dateien benutzerabhängige Konfigurationen verwaltet. Weiterhin beinhaltet die Basistechnologie sämtliche aktuellen Technologien im Bereich mobile Communications. Meine Aufgabe hier bestand sowohl in der Leitung, Konzeption und Implementierung als auch in der Dokumentation und der Mitarbeiterschulung im Einsatz der Basistechnologie.
Reisebereitschaft
Verfügbar in den Ländern
Deutschland
verfügbar
Sonstige Angaben
Anfragen bitte an info(at)frankcaputo.de senden.