Ruben Bakker, Senior Software Engineer
Ihr Software Entwickler für alle Fälle
Benötigen Sie für Ihr Projekt einen erfahrenen Softwareentwickler, der vom Konzept über das Backend bis zum
Frontend überall mit anpackt? Der sich vor CI/CD, Docker und Kubernetes nicht scheut? Der zuhört und mitdenkt, um
optimale Lösungen zu finden?
Dann sind Sie hier richtig.
Kontaktieren Sie mich, ich bin gespannt auf Ihr Projekt.
Über mich
Grüezi!
Darf ich mich vorstellen: Ruben Bakker, Senior Software Engineer.
Ich liebe es, Softwareprodukte zu entwickeln, die Menschen bei der Arbeit unterstützen und produktiver machen, damit sie mehr Zeit für das Wesentliche haben. Mir liegen schnelle, tragfähige und kundennah entwickelte Produkte am Herzen, die im Alltag funktionieren.
Ich bin offen und lerne gerne dazu. Es macht mir Freude mitzudenken um die optimale Lösung zu finden. Dabei sollen die für das Projekt passenden Sprachen und Technologien eingesetzt werden.
Arbeitserfahrung
Gründer & Senior Software Engineer
uncomplex gmbh, Roggwil
2017 - heute
Neu-Entwicklung und Vertrieb von Mailplane v4.0, die beliebte macOS Applikation für Gmail.
Sowie verschiedene Freelancing Software Kunden Projekte.
Senior Software Engineer
myneva Schweiz AG, Sursee
2020 - 2024
Konzeption, Entwicklung und Integration von mobilen Lösungen, welche die Prozesse der in Spitex- und Pflegeheim-Institutionen automatisieren oder vereinfachen. Implementation von mehreren zentralen Kubernetes Diensten in Kotlin sowie C#.
Senior Software Engineer
Evernote Corp, Redwood City, USA
2017 - 2018
Ich war "remote" Teil des Evernote macOS Team in Kalifornien.
Projekte waren z.B. das neue Evernote Business Feature "Spaces" sowie die Trennung zwischen persönlichen und Business Accounts.
Director of Products
Evernote GmbH, Zürich
2012 - 2017
Ich habe das Evernote Development Studio in Zürich eröffnet und dazu Entwickler, UI/UX Designer sowie QA Ingenieure rekrutiert. Über die Zeit wuchs das Team auf zehn Personen an. Das Studio war Teil der Software Produkte Abteilung in den USA (Redwood City, Kalifornien sowie Austin, Texas) und hat wichtige Innovationen und Patente hervorgebracht. Einige davon wurden in Evernote Produkte für Mac und iOS integriert.
Gründer & Senior Software Engineer
uncomplex gmbh, Sursee
2007 - 2012
Konzeption, Entwicklung, Design, Vermarktung der Mailplane app für macOS sowie der Replies app. Beide Apps wurden mit Objective-C entwickelt. Daneben einige Freelancing Projekte.
Senior Software Engineer R & D
BISON Schweiz AG, Sempach-Station
2004 - 2009
Meine Aufgabe war es Ideen, Prototypen sowie erste Implementierungen von Produkt-Innovationen und Verbesserungen für Bison Solution (Java) zu entwickeln. Zusätzlich habe ich die verschiedenen Entwicklungs-Teams unterstützt.
Technical Lead
BISON Schweiz AG, Sempach-Station
1997 - 2004
Ich entwickelte die technische Infrastruktur von Bison Solution, eine flexible ERP Software. Dazu baute ich ein Team von 12 Java Entwicklern auf, welches die Grundlagen für die Applikations-Entwicklung bereitstellte.
Tech Stacks
Mit diesen Technologien habe ich praktische Projekt Erfahrungen
Datenbanken
SQL for Postgres, MariaDB/MySQL, SQLite and Oracle
JVM Backend Entwicklung
Kotlin, Java, Spring Boot, Apache Camel, Clojure
.NET Backend Entwicklung
C#, Asp.net, EntityFramework
Python Backend Entwicklung
python, Django, pytest
Full-stack Entwicklung
React, Remix, Prisma, HTML/CSS, Tailwind CSS, Astro, ClojureScript
Server Betrieb
Docker & Kubernetes
Betriebssysteme
Linux: Arch-Linux, Fedora and Ubuntu; macOS; Windows; Android; iOS
macOS Entwicklung
Objective-C/C++, Foundation, Cocoa
Mobile Android Entwicklung
Kotlin, Jetpack Compose, RxJava, SQLite, Retrofit
Mobile iOS Entwicklung
Objective-C and UIKit
Rust Entwicklung
Rust, Axum, Rocket, Tokio
Scripting und Automation
bash, python, ruby, Powershell
CI/CD
Github Actions, Bitbucket Pipelines, CodeMagic, Jenkins
Metriken
Prometheus & Grafana
Projekt Portfolio
Auswahl von Projekten, welche einen Einblick in meine Arbeit geben.
Integration Service
FHIR und APIs für Software Partner und Android Tablets
Dieser Dienst ermöglicht das Entwickeln von Konnektoren, welcher APIs für Partner Systeme oder Mobile Geräte zur Verfügung stellt. Ich habe dieses Produkt von Grund auf konzipiert und entwickelt:
- Ein Spring Boot Dienst, der eine Plattform für Konnektoren implementiert
- Eine React/Remix Web App, um Integrationspartnern eine Self-Service-Oberfläche zur Verfügung zu stellen
- Erweiterung des bestehenden Windows Services mit C# für das myneva.swing System, welches GraphQL Queries und Mutationen zur Verfügung stellt
- Prometheus Schnittstelle, welche auf Basis Micrometer Metriken für Grafana Boards und Alerts zur Verfügung stellt
Als Erstes habe ich einen Logistik-Konnektor entwickelt, der heute von verschiedenen Partner Firmen eingesetzt wird:
- FHIR Schnittstelle für diverse Ressourcen wie z.B. Patient, Coverage, CarePlan, Practitioner mit HAPI FHIR für Java
- Integration in die myneva SWING2Go Android App mit Kotlin, RxJava, Retrofit
SHIP Konnektor
Digitalisierung Bedarfsmeldungen für Ambulante Dienste
Um den grossen administrativen Aufwand für die Bearbeitung von Bedarfsmeldungen zu reduzieren, wurde dieser Prozess durch den eCH Standard 0237 standardisiert. Durch den SHIP Konnektor konnte die Kommunikation zwischen Spitex, Arzt sowie Krankenkasse vollständig digitalisiert werden.
Dazu habe ich dazu konzipiert und implementiert:
- Neuer Integration Service Konnektor mit Spring Boot und Kotlin
- Datenmodell in MariaDB und der Synchronisation mit GraphQL
- Web App mit React, Remix, TypeScript und Tailwind CSS, um Rückfragen der Krankenkassen zu beantworten sowie den Status der Bedarfsmeldungen einzusehen
- Single-Sign-On, damit die Web App direkt in der SWING Windows App eingebunden werden kann
FileSync und FormSync
Patienten Dokumente mit Android Geräten synchronisieren
Dieses Produkt-Feature durfte ich konzipieren und komplett entwickeln: Die Patienten Dokumente wie PDF, PDF-Formulare, sowie Fotos mit den mobilen Geräten synchronisieren, damit diese offline zur Verfügung stehen und von ambulanten oder stationären Pflegerinnen genutzt werden können. Mit Hilfe der myneva Scanner App erstellt man mehrseitige PDF Dateien und mit der myneva Forms App werden Formulare ausgefüllt.
- Implementierung eines Konnektors für den Integration Server mittels Kotlin und Spring Boot, welcher eine REST Api für mobile Geräte zur Verfügung stellt
- Definierung und Implementierung von GraphQL Queries und Mutation in C#
- Implementierung der Android Synchronisation mit Kotlin, Retrofit und RxJava
- Design und Implementierung des UIs mit Kotlin und Jetpack Compose
- Zur Verfügung stellen von Grafana Boards and Alerts, welche auf Prometheus Metriken zurückgreifen
Android Forms App
Formulare ausfüllen und signieren
myneva Forms für Android ermöglicht es anhand von Vorlagen, Formulare auszufüllen und mit einer oder mehreren Unterschriften zu versehen. Diese App wird von Pflegerinnen eingesetzt und ermöglicht es, Formulare direkt beim Kunden auszufüllen und unterschreiben zu lassen.
Diese App durfte ich von Grund auf entwickeln:
- Implementation der App mit C# und SyncFusion für Xamarin
- Zusätzliches digitales Signieren der Unterschrift
- Einbindung dieser App als “Companion” App zu SWING2Go für Android mittels Kotlin
- Validierung der Formularfelder
- Implementierung von ca. 500 Formular Platzhalter in SWING2Go mittels Kotlin, um Daten wie z.B. Patienten Namen automatisch auszufüllen
Android Scanner App
Mehrseitige PDF Dokumente scannen
myneva Scanner für Android ermöglicht es, Verträge, Medikamenten-Listen und andere mehrseitige Dokumente vor Ort beim Patienten zu scannen. Nach dem Fotografieren wird die Seite automatisch bearbeitet und optimiert:
- Ermittlung der Seitenränder nach Aufnahme des Bildes
- Automatisches Zuschneiden der Seite
- Glätten von Falten und Unebenheiten im Papier
- Proportionen der Seite korrigieren
- Automatisches Drehen der Seiten
Die Algorithmen habe ich mit Kotlin auf Basis OpenCV geschrieben. OpenCV ist eine Open-Source Bibliothek, um Bilder zu analysieren und zu manipulieren.
Das UI wurde mit Jetpack Compose sowie RxJava implementiert.
SWING2Go SyncServer
Neue Daten Synchronisation für Android Pflege App
Wir arbeiteten zu zweit an diesem Projekt, um einen neue Synchronisations-Infrastruktur zu implementieren. Dabei wurde die alte Windows-Server basierte Lösung durch eine Neu-Implementierung ersetzt. Diese Infrastruktur wird von knapp 10’000 Android Tablets täglich genutzt und steht 24/7 zur Verfügung.
- Implementieren des Sync Servers mit C#, Entity Framework und asp.net mit REST APIs für Geräte, für Windows Server der Einrichtungen sowie für die Management Oberfläche.
- Erstellen von Docker Images mit CI/CD
- Erstellen von Kubernetes Definitionen mit automatischen Deployments in drei Umgebungen: dev, staging, prod
- Erstellen eines Sync Dienstes für die Windows Server, welcher mit C# auf die SAP Anywhere Datenbank zugreift
- Neu-Erstellung der Android Sync Library mit Kotlin und RxJava
- Automatische Überwachung der Sync Infrastruktur:
- Erstellen von Incidents auf der öffentlichen Status Seite
- Automatische Benachrichtigung der IT Bereitschaft PRTG
Nach Fertigstellung konnten wir innerhalb weniger Monate sämtliche Kunden und Geräte auf die neue Sync Umgebung migrieren.
Mailplane
Das beliebte Gmail Programm für macOS
Mailplane ist die macOS App für Google Mail und bietet zusätzlich zur Gmail Web Oberfläche eine Anzahl von Features:
- Unterstützung mehrerer Gmail Konti
- Tabs für Kalender und Kontakte
- Native macOS E-Mail Benachrichtungen
- Tiefe Integration mit macOS und anderen Anwendungen
- Bilder Anhänge können wahlweise optimiert (Qualität, Grösse) werden
- Bilder können mit Symbolen und Text versehen werden
- Integration mit Evernote, Todoist und weiteren macOS Apps
- E-Mail Suche über mehrere Postfächer
- Unterstützung für Chrome Extensions
Mailplane war 2007 einer der ersten “Site-Specific-Browser”, welcher eine Web App mit den Vorzügen einer nativen Desktop Applikation verband.
Mailplane fand über die Jahre rund 30’000 zahlende Kunden in über 100 Länder. Die App wurde in zahlreiche Sprachen übersetzt.
Version 1 + 2 habe ich mit Objective-C sowie Cocoa implementiert. Die Version 3 wurde von Lars Steiger neu erstellt. Um Chrome Extensions zu unterstützen und eine bessere Kompatibilität zu Gmail zu erreichen, habe ich Mailplane 4 komplett für Electron neu geschrieben. Der Code basiert zu 70% auf Web Technologien. Die restlichen 30% sind Objective-C++. Sie gewährleistet die Schnittstelle zu macOS. Trotz Electron fühlt sich Mailplane wie eine native macOS App an. Mailplane 4 wurde im August 2018 erfolgreich veröffentlicht.
Benutzte Technologien: ClojureScript, reagent (React), re-frame (Redux), datascript, core.async, Objective-C++, Cocoa, Electron
Weitere Infos
Evernote Business Spaces
Als Freelancer war ich ein Remote Mitglied des macOS Teams in Kalifornien. Eines der grösseren Projekte war „Spaces”, eine neue Organisationsstruktur für Notizbücher und Notizen für Teams. Ich habe die neue native Oberfläche für Spaces implementiert und habe die Sidebar von Evernote umgeschrieben, um das neue Design und Spaces zu unterstützen. Ich habe auch an der Trennung von Business und Persönlicher Konti mitgearbeitet.
Weitere Infos:
Evernote Presentation Mode
Unter meiner Leitung haben wir bei Evernote in Zürich den Presentation Mode erfunden und dazu auch Patente angemeldet. Wir haben das Feature für macOS und iOS entwickelt und in die Evernote Apps integriert. Dieses Premium-Feature erfreute sich bei Evernote Benutzer grosser Beliebtheit. Auch Evernote intern wurden Meetings hauptsächlich mit Presentation Mode geführt. Die wichtigsten Eigenschaften:
- Präsentieren von Notizen auf externen Bildschirmen
- Notizen werden vor der Präsentation im Stil vereinfacht und verschönert
- Automatische Slide Erkennung
- Slides können im Layout Editor angepasst werden
- Die Notiz, welche präsentiert wird, kann während der Präsentation bearbeitet werden.
- Integrierter Laserpointer
- Dark und Light Mode
Wir haben das Feature mit Objective-C, Cocoa, HTML und CSS entwickelt. Die Evernote Mac und iOS Apps haben wir mit einem Plugin System versehen, damit die Entwicklung von Presentation Mode unabhängig der Kernteams erfolgen konnte. Ausserdem haben wir das Feature so entwickelt, das grosse Teile des Codes in den Apps wiederverwendet werden konnte.
Evernote Editor Autocomplete
Bei Evernote gab es jährlich eine “hack week”, wo alle Mitarbeiter während eine Woche frei waren, etwas zu erfinden, auszuprobieren oder ein Feature im Produkt umzusetzen. Meine Idee war es, Auto Vervollständigung (aka Auto-Complete, Intelli-Sense) im Evernote Note Editor für macOS zu implementieren. Dieses Feature machte es viel leichter, Verweise zu anderen Notizen zu erstellen. Auch konnten damit Emojis und andere Text Elemente in einer Notiz eingefügt werden.
Ich habe dazu den Note-Editor mit HTML, CSS und JavaScript erweitert und mit Objective-C eine Schnittstelle in der Evernote App zur Verfügung gestellt. Das Projekt wurde von der internen Evernote Jury mit dem Sonderpreis “Wird in den Evernote Produkten umgesetzt” prämiert.
Evernote Collect
Das Evernote Team in Zürich - wo ich, als Director of Products die Leitung innehatte - übernahm die gesamte Verantwortung für den ‘Collect’ Teil von Evernote. Dazu gehörten die Apps:
- Web Clipper: Eine Extension für Chrome, Edge, Safari und Firefox, um Web Seiten im Evernote zu speichern.
- Evernote for Outlook: Integration in Office 365 und Outlook, um Notizen aus Emails zu erstellen und zu teilen
- Evernote Scannable: Dokument Scanner App für iOS
- Evernote Share Extension iOS und macOS: Web Seiten und andere Inhalte in Evernote speichern.
- Email to Evernote: Emails an Evernote schicken, um diese zu speichern.
Unsere Aufgabe war es die Anzahl Notizen, welcher ein neuer Benutzer in der ersten Woche erstellt, zu erhöhen, damit diese zu “Premium” Benutzern werden. Dafür haben wir:
- etliche A/B Experimente durchgeführt, d.h. ein Feature mit einer Kontrollgruppe getestet
- mittels “User Testing” gelernt, wie neue Benutzer mit der App umgehen
- Umfragen und Studien durchgeführt
- Designs & Texte getestet und optimiert
Wir haben Evernote Mac/iOS und Evernote Scannable so erweitert, dass wir Features mit A/B ausrollen und die Ergebnisse in Google Analytics messen konnten.
Replies
Be a Customer Support Hero
Der Zeitbedarf, um Mailplane Benutzer per E-Mail zu supporten, wurde so gross, dass wenig Zeit für die Produkte-Entwicklung blieb. Hunderte Emails mussten täglich beantwortet werden. Aus diesem Grund habe ich die macOS Applikation Replies entwickelt. Mit Replies gelang es mir, den Support Aufwand massiv zu reduzieren:
- Alle gesendeten Antworten einer Mailbox dienen automatisch als Textbausteine, welche bei zukünftige Antworten einfach eingesetzt werden können. Diese Textbausteine können auch Bilder und Videos beinhalten.
- E-Mail Antworten können aus mehreren Text-Bausteinen bestehen, welche sich auf verschiedene Passagen der Anfrage beziehen.
- Senden einer E-Mail kann abgebrochen werden, wenn z.B. ein Anhang vergessen gegangen ist.
- Zeitversetztes Senden, d.h. Emails können sofort beantwortet, aber erst nach einer eingestellten Zeit (z.B. 12 Std.) verschickt werden
- Automatisches CRM, welches aus dem Email Verlauf generiert wird
Die App wurde von zahlreichen anderen Indie Entwicklern eingesetzt und später durch die Web App replies.io ersetzt.
Tech Stack:
- UI wurde mit Objective-C und Cocoa entwickelt
- Business Logik wie E-Mail Parsing, Indexierung etc. wurde mit python und pytest erstellt.
- Als lokale Datenbank habe ich Firebase verwendet. t