Profilbild von Frank Caputo Java-EE-Web-Performance-Spezialist aus Hamburg

Frank Caputo

verfügbar

Letztes Update: 19.03.2017

Java-EE-Web-Performance-Spezialist

Abschluss: nicht angegeben
Stunden-/Tagessatz: anzeigen
Sprachkenntnisse: deutsch (Muttersprache) | englisch (verhandlungssicher) | italienisch (Grundkenntnisse)

Skills

Tätigkeitsschwerpunkte 
  • 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ähig­keiten
  • 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 rhetori­sche 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 Per­sistenz und Web, integriert. Diese Konzepte sind tatsächlich jedoch sehr alt und standen in Frameworks, mit denen ich vor EE 5 bereits viele Jahre  gear­beitet habe, schon lange zur Verfügung. Daher ist mir Java EE sehr ver­traut 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 Sportwet­ten, Pferdewetten und Lotto, weiß ich besonders gut mit Peeks (Lotto-Jackpot, oder Weltmeisterschaft) und dauerhaft großer Last (Casino) um­zugehen.
  • 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ähig­keiten in objektorientiertem Design, kann ich hilfreiche Verbesserungsvor­schläge zum Code machen.
  • Know-How-Transfer/Coaching
    Durch meine Lehramtsausbildung bin ich sehr gut in der Lage, mein Wis­sen an andere weiterzugeben. Das tue ich am liebsten an konkreten Pro­jekten in Form von Pairprogramming oder Anhacken.
  • Performancetuning und Troubleshooting
    Aufgrund meiner langjährigen Erfahrung kann ich Performance- und ande­re Pro­bleme sehr schnell lokalisieren und auch beheben.

Allgemeine Werkzeuge und Techniken

Die folgende Auflistung enthält einige Schlagwörter, Softwaresysteme und Tech­no­logien, mit denen ich mich im Laufe der Zeit auseinander gesetzt habe. Sie ist we­der 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, Softwareent­wicklung 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, Shell­skripte, 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, ha­be ich mich gegen eine relationale Datenbank und für die dokumentenbasier­te 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 errei­chen. 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 Zu­fallszahlengenerator 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-Ser­vices 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 Pro­jekt JSF 2.0 so erweitert, dass in derselben Applikation mandantenabhängig ein­zelne Kom­ponenten ausgetauscht werden können. Üblicherweise reicht es für einen neuen Man­danten, die Decoratorkomponente auszutauschen, wodurch neue Mandanten sehr schnell umgesetzt werden können. Ich war in diesem Projekt federführend kon­zeptionell tätig und habe die Entwickler entspre­chend 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 entsprechen­den Entwicklers. Hierbei programmiere ich Code-Fragmente, die dem Entwickler das bevorzugte Pattern vorgeben. Nach dem Anhacken ist der Entwickler üblicher­weise in der Lage, die Lösung auszuimplementie­ren. 

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 So­nar, Checkstyle oder PMD automatisiert abgefangen werden. Da diese Tools jedoch nicht beurteilen können, ob der Code ein Problem angemessen be­han­delt, 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 mit­ein­ander 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 star­ke 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 sessionba­­sierten Seiten auftauchen, die unweigerlich zu einem Sessiontimeout füh­ren 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 Applikati­on re­gelmäßig mit einem Profiler untersucht und so stetig die Perfor­mance 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 Leseope­rationen auf der Datenbank zu verringern (Pferdewet­ten sind hoch­dyna-misch), habe ich einen allgemeingültigen Benachrichtigungsmechanis­mus zur Cache-Invalidierung auf Basis von Daten­banktriggern implemen­tiert, der ohne Änderungen des Backendcodes einsetz­bar war.

AJAX-basiertes Sportwettangebot jaxx.com (2007)

Um eine stärkere Interaktivität zu erreichen, wurde beschlossen, das Sport-wettan­gebot 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 Proble­me der Asynchronität oder des Backtrackings zu lösen und eine ver­nünftige Fehler­behandlung zu implementieren.

Skinning jaxx.com (2007)

Ziel des Projektes war es, eine möglichst einfach zu verwendende Mandantenfähig­keit der Plattform herzustellen. Meine Aufgabe war sowohl die Kon­zeption 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-Ent­wicklers.

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 ma­chen. Hierzu war eine enge Zusammenarbeit von Backend- und HTML-Entwicklern und sehr gute Kennt­nisse von Client-Technologien wie HTML, CSS und Java­Script meinerseits not­wendig.
In diesem Rahmen war ich für alle Bereiche der Webplattform wie Registrie­rung, Bezahlung, Marketinginstrumente, Affiliateeinbindung, Zählpixel, SSO bei Part­nern 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 Frontend­bereich (Server) auf­getragen.
Die zu übersetzenden Textschnipsel wurden in einer einfachen Tabelle in der Da­tenbank abgebildet. Diese habe ich über das sogenannte Key-Value-Coding in der Template-Engine verfügbar gemacht, so dass sich die HTML-Ent­wickler keine Ge­danken über die Sprache des Benutzers machen muss­ten. Über denselben Mecha­nismus habe ich sprachabhängige Formatter in der Template-Engine verfügbar ge­macht.

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 automa­tischen Tests de­cken alle Funktionen ab, die im externen Bereich verfügbar sind. Das beinhaltet auch die Tests der als Zip-Datei heruntergeladenen Shoppingcarts und verschiede­ner JavaScript-Funktionen.
Für die automatisierte Katalogproduktion habe ich die als PDF angelieferten Lay­out-Vorgaben in XML-Templates umgesetzt, so dass aus den Datenbank­inhalten 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 Arbeits­vermittlung entwickelt. Ziel war es, bundesweit Arbeitsvermittler mitei­nander zu vernetzen und verschiedene Pools von Arbeitssuchenden und offe­nen Stellen an­hand von 5900 berufskundlichen Merkmalen miteinander zu matchen.
Da das Konzept lediglich aus ein paar Scribbles bestand, habe ich zusam­men mit dem Kunden das Projekt iterativ entwickelt. Ich habe hier die Frontend-Komponen­ten so entwickelt, dass Sie ausschließlich XML erzeugen und anschlie­ßend das ge­sam­te Dokument per XSLT in HTML umgewandelt wird. So war es mir möglich in­nerhalb kürzester Zeit, neue Funktionalitäten zu imple­mentieren, ohne auf das De­sign angewiesen zu sein. Es wurde ein­mal ein Grunddesign entwickelt, das dann mit geringen Änderungen am XSLT auf je­de Seite angewendet werden konnte.

Tierhausverwaltung (2002)

Bei cluster9 habe ich eine webbasierte Tierhausverwaltung für das Max-Planck-In­stitut für biophysikalische Chemie in Göttingen realisiert. Die Soft­ware sollte eine bestehende ORAForms-Anwendung ablösen und per Touch­screen zu bedienen sein. Das Look And Feel des Frontends war durch stati­sche HTML-Seiten vorgege­ben. Im Zuge dessen habe ich für cluster9 den WODynamizer entwickelt, der basie­rend auf JTidy aus statischen HTML-Seiten dynamische WebObjects-Komponen­ten erzeugt. Zum Projektab­schluss ha­be ich den Mit­arbeiter des MPI, der das Pro­jekt weiterpflegen sollte, in Java/WebObjects geschult.

Unified Messaging (2001 -2002)

Ein Auftragnehmer der Telekom entwickelte T-Netbox.de. Das Projekt ist je­doch aufgrund technischer Probleme ins Stocken geraten. Im Auftrag von cluster9 habe ich zu Beginn kleinere Probleme, wie erhöhten Speicherver­brauch gelöst. Dann habe ich die Mitarbeiter vor Ort in Java/WebObjects und CVS geschult (auf Eng­lisch). Später habe ich die komplette bestehende An­wendung nach Pure-Java por­tiert und auch die bestehende proprietäre native Mail-Anbindung durch JavaMail ersetzt. Weiterhin habe ich verschie­dene En­co­ding-Probleme (Umlaute, etc.) gelöst.

CapacityPlanner (2001)

Bei der INIS wurde ein Kapazitätsplanungssystem für die COSS Systemtech­nik AG in Aalen entwickelt, welches zur Planung der Ressourcen innerhalb des Pro­jekt­geschäftes verwendet worden ist. Die Integration in eine externe Zeit­erfassung sowie in ein Kostenrechnungssystem war ebenfalls Bestand­teil der Implementie­rung. Das bei der INIS entwickelte Basissystem dafür war das so­genannte Requester-Framework, das ein umfassendes System zum „ressource constrained scheduling“ darstellte. An der Konzeption und Ent­wicklung dieses Systems war ich in leitender Position maßgeblich betei­ligt.

Basistechnologie (2000 - 2001)

Bei der INIS entwickelte ich allgemeingültige Basistechnologie. Die Basistech­no­logie hatte als wesentliche Voraussetzung ohne Drittanbieterklassen zu ar­beiten, es sei denn, sie erheben keine Lizenzgebühren und liegen im Quell­code vor. Zur Ba­sis­technologie gehörte u.a. ein Framework zum zen­tralen Loggen, das mit ver­schie­denen Filtern, Errorlevels und Logkanälen arbeitet, sowie ein mandan­ten­fä­hi­ges Konfigurationsmanagement, das mit XML-Dateien benutzerabhängige Kon­fi­gu­rationen verwaltet. Weiterhin bein­haltet die Basistechnologie sämtliche aktuellen Technologien im Bereich mo­bile Communications. Meine Aufgabe hier bestand so­wohl in der Leitung, Kon­zeption und Implementierung als auch in der Doku­men­ta­tion und der Mitar­beiterschulung im Einsatz der Basistechnologie.

Reisebereitschaft

Verfügbar in den Ländern Deutschland
verfügbar

Sonstige Angaben

Anfragen bitte an info(at)frankcaputo.de senden.
Profilbild von Frank Caputo Java-EE-Web-Performance-Spezialist aus Hamburg Java-EE-Web-Performance-Spezialist
Registrieren