{"name":"languages","slug":"languages","paginate_by":null,"paginate_path":null,"render":true,"feed":false} {"name":"Javascript","slug":"javascript","path":"/de/languages/javascript/","permalink":"https://martin-thurau.de/de/languages/javascript/","pages":[{"relative_path":"story/drklein.de.md","colocated_path":null,"content":"<p>Die Dr. Klein Privatkunden ist ein Finanzdienstleiter zur Vermittlung von Baufinanzierungen, Versicherungen und Ratenkrediten\nfür Endverbraucher. Sie verwendet <a href=\"https://www.holacracy.org/\">Holakratie</a> als Organisationswerkzeug. \nIch war hier im Team &quot;Plattform&quot; tätig um eine Software Plattform zu entwickeln um die diversen Akteure der \nImmobilienbranche (Markler, Architekten, etc.) mit Endverbrauchern zusammenzubringen.<span id=\"continue-reading\"></span>. Bei meinem Eintritt\nwar das Projekt noch ziemlich am Anfang, sodass ich die Gelegenheit hatte an fast allen Teilen mitzuarbeiten:</p>\n<h2 id=\"neuentwicklung-des-kundenportals\">Neuentwicklung des Kundenportals</h2>\n<p>Das Kundenportal ist eine mit Angular entwickelten Micro-Frontend Anwendung die über eine RESTful API mit diversen, mit \nSpring Boot implementierten Microservicen kommuniziert. Die Services kommunizieren untereinander und mit dem Rest der \nPlattform über ein Kafka basiertes Event System.</p>\n<p>Neben einem Bereich für die persönlichen Daten des Kunden und die Anzeige des aktuellen Beraters enthält das \nKundenportal auch einen komplexen, mehrstufigen Wizard zur Selbstauskunft einer Baufinanzierung und einem Upload-Bereich\nfür die Dokumente des Kunden. Baufinanzierungen benötigen eine Menge zusätzlicher Unterlagen; ein Prozess der bisher\nmanuell vom Kundenberater gemanaged wurde. Das Kundenportal automatisiert nicht nur den direkten Upload in unsere \nVertriebsplattform, sondern enthält auch eine automatische klassifizierung der hochgeladenen Dokumente. Diese Komponente\nvereinfacht und beschleunigt den Prozess sowohl für den Berater als auch für den Kunden.</p>\n<h2 id=\"wartung-von-login-und-registrierung\">Wartung von Login und Registrierung</h2>\n<p>Nach einiger Zeit übernahm ich die Wartung und Weiterentwicklung unseres zentralen Login- und Registrierungsdienstes \nund das API-Gateways. Alle Nutzer der Plattform verwenden den gleichen OAuth 2 basierten Login und alle internen und\nexternen API calls werden vom API-Gateway authentifiziert. Alle unsere APIs sind öffentlich erreichbar, so das dies ein\nkritischer Punkt unserer Plattform ist.</p>\n<h2 id=\"mitarbeiter-bei-der-architektur-und-devops\">Mitarbeiter bei der Architektur und DevOps</h2>\n<p>Ich war Teil der Architektur und DevOps Kreise. Ziel des Architektur-Kreises ist die kontinuierliche Verbesserung und \noptimierung unserer Softwarearchitektur in Zusammenarbeit mit den Entwicklern. Der Kreis ist außerdem die funktionale\nEinheit in der zentrale Architekturfragen entschieden wurden.</p>\n<h2 id=\"migration-unseres-event-systems-von-rabbitmq-zu-kafka\">Migration unseres Event-Systems von RabbitMQ zu Kafka</h2>\n<p>Unsere Microservice-Architektur benutzte einen Event basierten Transfer von Zustand und Daten zwischen den Diensten und\nbesonders zwischen Kontext-Grenzen. Initial wurden diese Events über RabbitMQ in einer publish/subscribe Konfiguration\nübertragen. Um die von uns gewünschte logisches Konsistenz zwischen der Events zu wahren, war spezielle Logik in jedem\nEmpfänger nötig. Zwar war diese Logik in eine zentrale Bibliothek ausgelagert aber wir haben relativ schnell \nfestgestellt, dass diese Lösung selbst bei nur minimalem Traffic nicht performant genug ist. Daher haben wir uns \nentschieden diesen Teil durch eine Lösung auf Basis von Apache Kafka auszutauschen. Meine Arbeit hierbei waren das \ninitiale Prototyping, das Entwickeln der Client-Bibliothek für unsere Java Services und der Entwickler-Support beim \nrollout.</p>\n<h2 id=\"wartung-interne-bibliotheken\">Wartung interne Bibliotheken</h2>\n<p>Zusätzlich zur Bibliothek zur Kafka-Integration verwendeten wir auch zwei Bibliotheken für wiederkehrende Aufgaben\nwie Rest-Calls, Authentifizierung, Tracing und Logging die ich während meiner Zeit bei Dr. Klein gewartet und bei \nBedarf weiterentwickelt habe.</p>\n<h2 id=\"erforschung-neuer-technologien\">Erforschung neuer Technologien</h2>\n<p>Neben meiner anderen Arbeit war ich auch häufig damit beschäftigt neue Technologien und Ansatz zu untersuchen und sie \nanderen Teammitgliedern vorzustellen. Ich habe unter anderem Kotlin als zweite JVM-basierte Sprache eingeführt und ein\nMonitoring-Tool in Rust entwickelt. Um mir und anderen Entwicklern das Leben einfacher zu machen, habe ich außerdem\neinen Yeoman basierten Code-generator für den internen Gebrauch entwickelt.</p>\n<h2 id=\"unterstutzung-der-anderen-entwickler\">Unterstützung der anderen Entwickler</h2>\n<p>Als Fullstack Entwickler und relativ langes Mitglied im Team &quot;Plattform&quot; kannte ich fast alle Teile zu einem gewissen \nTeil. Aus diesem Grund war ich häufig Ansprechpartner zu übergeordneten Fragen von anderen Entwicklern und wurde beim\ndebugging häufig dazugezogen.</p>\n<p>Ich hatte außerdem mehrere Holakratie-spezifische Rollen wie Facilitator (leitet Meetings) und Secretary (ist eine Art\nSchriftführer und Organisator).</p>\n","permalink":"https://martin-thurau.de/de/story/drklein/","slug":"drklein","ancestors":["_index.de.md","story/_index.de.md"],"title":"Dr. Klein Privatkunden AG","description":null,"updated":null,"date":null,"year":null,"month":null,"day":null,"taxonomies":{"technologies":["Spring Boot","Kafka","MySQL"],"languages":["Kotlin","Java","Rust","Javascript","Typescript"]},"authors":[],"extra":{"work_from":"2019-04-01","work_until":"2021-09-30","link":"https://www.drklein.de","logo":"story/drklein_logo.png"},"path":"/de/story/drklein/","components":["de","story","drklein"],"summary":"<p>Die Dr. Klein Privatkunden ist ein Finanzdienstleiter zur Vermittlung von Baufinanzierungen, Versicherungen und Ratenkrediten\nfür Endverbraucher. Sie verwendet <a href=\"https://www.holacracy.org/\">Holakratie</a> als Organisationswerkzeug. \nIch war hier im Team &quot;Plattform&quot; tätig um eine Software Plattform zu entwickeln um die diversen Akteure der \nImmobilienbranche (Markler, Architekten, etc.) mit Endverbrauchern zusammenzubringen.","toc":[{"level":2,"id":"neuentwicklung-des-kundenportals","permalink":"https://martin-thurau.de/de/story/drklein/#neuentwicklung-des-kundenportals","title":"Neuentwicklung des Kundenportals","children":[]},{"level":2,"id":"wartung-von-login-und-registrierung","permalink":"https://martin-thurau.de/de/story/drklein/#wartung-von-login-und-registrierung","title":"Wartung von Login und Registrierung","children":[]},{"level":2,"id":"mitarbeiter-bei-der-architektur-und-devops","permalink":"https://martin-thurau.de/de/story/drklein/#mitarbeiter-bei-der-architektur-und-devops","title":"Mitarbeiter bei der Architektur und DevOps","children":[]},{"level":2,"id":"migration-unseres-event-systems-von-rabbitmq-zu-kafka","permalink":"https://martin-thurau.de/de/story/drklein/#migration-unseres-event-systems-von-rabbitmq-zu-kafka","title":"Migration unseres Event-Systems von RabbitMQ zu Kafka","children":[]},{"level":2,"id":"wartung-interne-bibliotheken","permalink":"https://martin-thurau.de/de/story/drklein/#wartung-interne-bibliotheken","title":"Wartung interne Bibliotheken","children":[]},{"level":2,"id":"erforschung-neuer-technologien","permalink":"https://martin-thurau.de/de/story/drklein/#erforschung-neuer-technologien","title":"Erforschung neuer Technologien","children":[]},{"level":2,"id":"unterstutzung-der-anderen-entwickler","permalink":"https://martin-thurau.de/de/story/drklein/#unterstutzung-der-anderen-entwickler","title":"Unterstützung der anderen Entwickler","children":[]}],"word_count":591,"reading_time":3,"assets":[],"draft":false,"lang":"de","lower":null,"higher":null,"translations":[{"lang":"de","permalink":"https://martin-thurau.de/de/story/drklein/","title":"Dr. Klein Privatkunden AG","path":"/opt/buildhome/repo/content/story/drklein.de.md"},{"lang":"en","permalink":"https://martin-thurau.de/story/drklein/","title":"Dr. Klein Privatkunden AG","path":"/opt/buildhome/repo/content/story/drklein.md"}],"backlinks":[]},{"relative_path":"story/esailors.de.md","colocated_path":null,"content":"<p>eSailors (heute Lotto24) ist eine Softwaredienstleister für Online Lotterien der eine mehrsprache mutli-tenant Plattform mit mehr als\n400.000 aktiven Nutzern betreibt. Ich war im Bereich &quot;Games&quot; beschäftigt welcher für Front- und Backend für die\nDarstellung und den Kauf der diversen Lotterien zuständig ist.<span id=\"continue-reading\"></span></p>\n<h2 id=\"weiterentwicklung-von-lotterien\">Weiterentwicklung von Lotterien</h2>\n<p>Die Plattform für den Bereich &quot;Games&quot; besteht aus 70 größtenteils JVM-basierten Microservicen (einige waren auch etwas\nweniger &quot;micro&quot;) die alle innerhalb eines Kubernetes Cluster laufen.\nMeine Aufgabe waren die Wartung unserer Codebasis und die Implementierung von neuen Lotterien im Front- und\nBackend. Diese Aufgabe umfasste typischerweise Änderungen an diversen Komponenten: Ticket-UI, Warenkorb, Spiel-Historie\nsowie Bezahlvorgang und dem &quot;hedging&quot;. Viele dieser Änderungen wurden durch das Team &quot;Games&quot; direkt durchgeführt und\nandere mit den anderen Entwicklungsteams bei eSailors koordiniert wurde.</p>\n<h2 id=\"auslagern-der-ticket-ui-in-micro-frontends\">Auslagern der Ticket UI in micro-frontends</h2>\n<p>Die Kernkomponente des Frontends (der &quot;Webshop&quot;) war Monolith aus Spring-Boot + Angular. Aufgrund komplexer\nAbhängigkeiten und lange laufenden Integrationstest stellte sich dieser häufig als Flaschenhals in unserem\nEntwicklungsprozess heraus. Um es zu Ermöglichen unserer Frontends separat vom Webshop deployen zu können haben wir die\nUI in einzelne Micro-Frontends herausgelöst. Diese konnten so eigenständig entwickelt, getestet und deployed werden.\nDie Integration in dem Webshop erfolgte dabei durch einen kleinen IFrame Wrapper im Webshop selbst.</p>\n<h2 id=\"migration-von-angularjs-zu-angular\">Migration von AngularJS zu Angular</h2>\n<p>Die UI der Lotterien und auch große Teile des Webshops waren initial noch AngularJS Anwendungen. Während meiner Zeit\nhaben wir alle diese Teile komplett nach Angular migriert. Wir haben dies iterativ durchgeführt, sodass in während der\nMigration auch weiter neue Features entwickelt werden konnten. Die Migration verlief größtenteils ohne größere Pannen,\nwir hatten allerdings eine Lange Zeit mit vielen interessanten Bugs und Edge-Cases zu kämpfen.</p>\n<h2 id=\"internationalisierung\">Internationalisierung</h2>\n<p>eSailors hat sich entschlossen den internationalen Markt zu betreten (beginnend mit Irland, gefolgt von Schottland und\nRumänien). Die gesamte Plattform war bis zu diesem Zeitpunkt ausschließlich Einsprachig und hatte in weiten Teilen weder\nUnterstützung für Mehrsprachigkeit noch für unterschiedliche Währungen. Die Internationalisierung hat viele unserer\nEntwicklung für eine lange Zeit beschäftigt und hatten viel Spaß mit dem fixen von Layout-Bugs, weil Texte plötzlich\nsehr viel kürzer oder länger waren als angenommen.</p>\n","permalink":"https://martin-thurau.de/de/story/esailors/","slug":"esailors","ancestors":["_index.de.md","story/_index.de.md"],"title":"eSailors IT Solutions GmbH","description":null,"updated":null,"date":null,"year":null,"month":null,"day":null,"taxonomies":{"technologies":["Angular","AngularJS","Kubernetes","Protractor","Jasmine","Pupeteer"],"languages":["Typescript","Java","Javascript"]},"authors":[],"extra":{"work_from":"2016-10-01","work_until":"2019-03-31","logo":"story/esailors_logo.png","link":"https://www.lotto24.de/"},"path":"/de/story/esailors/","components":["de","story","esailors"],"summary":"<p>eSailors (heute Lotto24) ist eine Softwaredienstleister für Online Lotterien der eine mehrsprache mutli-tenant Plattform mit mehr als\n400.000 aktiven Nutzern betreibt. Ich war im Bereich &quot;Games&quot; beschäftigt welcher für Front- und Backend für die\nDarstellung und den Kauf der diversen Lotterien zuständig ist.","toc":[{"level":2,"id":"weiterentwicklung-von-lotterien","permalink":"https://martin-thurau.de/de/story/esailors/#weiterentwicklung-von-lotterien","title":"Weiterentwicklung von Lotterien","children":[]},{"level":2,"id":"auslagern-der-ticket-ui-in-micro-frontends","permalink":"https://martin-thurau.de/de/story/esailors/#auslagern-der-ticket-ui-in-micro-frontends","title":"Auslagern der Ticket UI in micro-frontends","children":[]},{"level":2,"id":"migration-von-angularjs-zu-angular","permalink":"https://martin-thurau.de/de/story/esailors/#migration-von-angularjs-zu-angular","title":"Migration von AngularJS zu Angular","children":[]},{"level":2,"id":"internationalisierung","permalink":"https://martin-thurau.de/de/story/esailors/#internationalisierung","title":"Internationalisierung","children":[]}],"word_count":354,"reading_time":2,"assets":[],"draft":false,"lang":"de","lower":null,"higher":null,"translations":[{"lang":"en","permalink":"https://martin-thurau.de/story/esailors/","title":"eSailors IT Solutions GmbH","path":"/opt/buildhome/repo/content/story/esailors.md"},{"lang":"de","permalink":"https://martin-thurau.de/de/story/esailors/","title":"eSailors IT Solutions GmbH","path":"/opt/buildhome/repo/content/story/esailors.de.md"}],"backlinks":[]},{"relative_path":"story/keeeb.de.md","colocated_path":null,"content":"<p>Keeeb war initial als Tool zu sammeln und organisieren von Informationen für den persönlichen Gebrauch geplant (ähnlich zu\nGoogle Keep, Evernote, etc.). Nach einem Pivot hat sich der Fokus vom B2C auf B2B verschoben und aus Keeeb wurde einem\nkollaborativen Tool zur Recherche im Team.</p>\n<p>Ich habe hier während meines Masterstudiums als Werksstudent angefangen und bin nach meinem Abschluss als Vollzeit Entwickler\nhier geblieben.<span id=\"continue-reading\"></span></p>\n<h2 id=\"cross-browser-erweiterung-zur-informationssammlung\">Cross browser Erweiterung zur Informationssammlung</h2>\n<p>Um Informationen in Keeeb zu Speichern ist natürlich ein Werkzeug nötig um diese Informationen während des browsen zu\nspeicher. Als ich hier anfing, gab es nur eine sehr rudimentäres <a href=\"https://de.wikipedia.org/wiki/Bookmarklet\">Bookmarklet</a>\ndas diese Aufgabe erfüllt hat. Eine meiner ersten Aufgaben bei Keeeb war es, diese Bookmarklet in eine echte\nBrowser-Extension zu verwandeln. Hierzu haben wir das Kango Framework verwendet, mit dem es uns möglich war, mit einer\nCode-Basis eine Browser extension für alle gängigen Browser zu erstellen.</p>\n<h2 id=\"cross-plattform-app-ios-android\">Cross plattform App (iOS &amp; Android)</h2>\n<p>Als Startup hatte Keeeb nicht die finanziellen Ressourcen um für die Entwicklung von mobilen Apps separate Entwickler\nzu beschäftigen. Daher habe ich eine App für beide Plattformen auf Basis von Phonegap und Backbone.js entwickelt. Ich\nbin immer noch recht Stolz darauf, das die Anwendung, obwohl sie nicht nativ war, eine ziemlich sehr brauchbare\nNutzererfahrung geliefert hat.</p>\n<h2 id=\"neuentwicklung-des-frontends\">Neuentwicklung des Frontends</h2>\n<p>Das initiale Frontend von Keeeb basierte auf serverseitig gerendertem HTML und einem Haufen jQuery Code. Die Neuauflage\nwar eine (zu der Zeit) moderne single page Anwendung auf basis von AngularJS. Ich war hier von Anfang an in Design und\nEntwicklung involviert und habe auch nach dem initialen Release auch weiter an neuen Features und der Wartung gearbeitet.</p>\n<h2 id=\"wartung-und-weiterentwickung\">Wartung und Weiterentwickung</h2>\n<p>Ich war außerdem in der Weiterentwicklung des Pyramid basierten backends eingebunden. Während meine Zeit bei Keeeb haben\nwir unsere Datenbank von MongoDB zu PostgreSQL gewechselt. Außerdem haben wir eine Elasticsearch basierte Volltextsuche\nhinzugefügt und unser Job-System von einer in-House Lösung zu einer Lösung auf Basis von Celery und RabbitMQ\nmigriert.</p>\n<h2 id=\"director-of-development\">Director of development</h2>\n<p>Aufgrund von personellen Veränderungen habe ich kurzfristig auch die Rolle des “Director of development” gehalten. In\ndieser Rolle war ich für das technische Design und die Planung neuer Features verantwortlich und habe die Umsetzung\norganisiert.</p>\n","permalink":"https://martin-thurau.de/de/story/keeeb/","slug":"keeeb","ancestors":["_index.de.md","story/_index.de.md"],"title":"keeeb GmbH","description":null,"updated":null,"date":null,"year":null,"month":null,"day":null,"taxonomies":{"technologies":["Angular","AngularJS","Kubernetes","Protractor","Jasmine","git"],"languages":["Typescript","Java","Javascript"]},"authors":[],"extra":{"work_from":"2013-04-01","work_until":"2016-10-30","logo":"story/keeeb_logo.png","link":"https://www.keeeb.com/"},"path":"/de/story/keeeb/","components":["de","story","keeeb"],"summary":"<p>Keeeb war initial als Tool zu sammeln und organisieren von Informationen für den persönlichen Gebrauch geplant (ähnlich zu\nGoogle Keep, Evernote, etc.). Nach einem Pivot hat sich der Fokus vom B2C auf B2B verschoben und aus Keeeb wurde einem\nkollaborativen Tool zur Recherche im Team.</p>\n<p>Ich habe hier während meines Masterstudiums als Werksstudent angefangen und bin nach meinem Abschluss als Vollzeit Entwickler\nhier geblieben.","toc":[{"level":2,"id":"cross-browser-erweiterung-zur-informationssammlung","permalink":"https://martin-thurau.de/de/story/keeeb/#cross-browser-erweiterung-zur-informationssammlung","title":"Cross browser Erweiterung zur Informationssammlung","children":[]},{"level":2,"id":"cross-plattform-app-ios-android","permalink":"https://martin-thurau.de/de/story/keeeb/#cross-plattform-app-ios-android","title":"Cross plattform App (iOS & Android)","children":[]},{"level":2,"id":"neuentwicklung-des-frontends","permalink":"https://martin-thurau.de/de/story/keeeb/#neuentwicklung-des-frontends","title":"Neuentwicklung des Frontends","children":[]},{"level":2,"id":"wartung-und-weiterentwickung","permalink":"https://martin-thurau.de/de/story/keeeb/#wartung-und-weiterentwickung","title":"Wartung und Weiterentwickung","children":[]},{"level":2,"id":"director-of-development","permalink":"https://martin-thurau.de/de/story/keeeb/#director-of-development","title":"Director of development","children":[]}],"word_count":366,"reading_time":2,"assets":[],"draft":false,"lang":"de","lower":null,"higher":null,"translations":[{"lang":"de","permalink":"https://martin-thurau.de/de/story/keeeb/","title":"keeeb GmbH","path":"/opt/buildhome/repo/content/story/keeeb.de.md"},{"lang":"en","permalink":"https://martin-thurau.de/story/keeeb/","title":"keeeb GmbH","path":"/opt/buildhome/repo/content/story/keeeb.md"}],"backlinks":[{"permalink":"https://martin-thurau.de/de/story/master/","title":"Universität zu Lübeck"}]}],"page_count":3}