Gedanken zum MVP-Award und zur Ausbildung von Informatiker...

MVP
Januar 2024, Lesezeit 6 min.

Es erfüllt mich mit Freude und Stolz euch mitzuteilen, dass ich zum Embarcadero MVP für Delphi ernannt wurde. Ich bin der erste Delphi-Softwareentwickler aus der Schweiz, der diese Auszeichnung für seine Beiträge zur Delphi-Community erhalten hat.

Dies ist erstaunlich, denn Delphi basiert auf der Programmiersprache Object-Pascal, die auf Arbeiten des Schweizer Professors Niklaus Wirth zurückgeht, der Anfang 1970 an der ETH Zürich die prozedurale Sprache Pascal als leicht zu erlernende Ausbildungssprache entwarf. Auch Konzepte aus Wirths späterem Schaffen, insbesondere das Modularisierungskonzept aus der Sprache Modula-2, sowie objektorientierte Klassensysteme von Simula und C++, flossen in die Entwicklung des Delphi-Vorgängers Turbo Pascal ein.

Der dänische Software Entwickler Anders Hejlsberg adaptierte den Pascal Compiler von Wirth und entwickelte daraus einen einpassigen Compiler, der auf einen absteigend rekursiven Parser basiert, und daher ein sehr schneller Compiler war. Hejlsberg verkaufte unter seiner Firma Polydata diesen Kommandozeilen-Compiler unter dem Namen Compass Pascal vor allem an das dänische Bildungssystem. Ein Student von Wirth, Philippe Kahn, gründete etwa zur gleichen Zeit im Silicon Valley die Firma Borland und erwarb die Lizenz für die Compiler-Technologie von Polydata. Parallel dazu entstand in seinem Entwicklungsteam, bestehend aus Mogens Glad, Lars Fried-Nielsen, Niels Jensen unter seiner Leitung eine integrierte Entwicklungsumgebung, welche den Editor, Compiler, Linker und den Debugger in einer Anwendung vereinigte. Neben all den brillianten technischen Konzepten und der guten Qualität war es auch eine geschickte Marketingstrategie, Turbo Pascal zu einem Preis von unter 50 US$ zu vertreiben. Diese aggressive Preisstrategie machte Turbo Pascal zu einer zugänglichen und attraktiven Option für einen breiteren Nutzerkreis und trug erheblich zu seiner weit verbreiteten Akzeptanz bei. Dank dieser Entwicklung wurde aus der akademischen Sprache Pascal ein bahnbrechendes integriertes Werkzeug, das die Softwareindustrie nachhaltig veränderte. Hejlsberg kam einige Jahre nach der Markteinführung von Turbo Pascal im Jahre 1983 zu Borland und prägte die weiteren Entwicklung bei Borland entscheidend mit.

Mit dem Aufkommen von graphischen Bedienoberflächen, im Speziellen von Windows, wurde mit der Entwicklung von Delphi 1 ein weiterer wichtiger Akzent gesetzt. Während bei früheren Kommandozeilen-Programme mit oftmals linearem Programmfluss dem Programmierer mit vielen allgemein verwendbaren Funktionen aus Mathematik, Statistik und vielem mehr in Sammlungen (Bibliotheken) geholfen wurde, benötigen Programmierer von Applikationen unter komplexen Bedienoberflächen ein neues Konzept, um nicht tausende Zeilen Code für jede Applikation schreiben zu müssen. Mit dem neuen Konzept des Frameworks, das mit Delphi erstmals mit der Visual Component Library umgesetzt wurde, begann der Programmierer bei der Entwicklung neuer Applikationen mit einer minimal lauffähigen Applikation, die der Programmierer aufgrund von Anforderungen Schritt für Schritt erweiterten konnte.

Noch vor der Jahrtausendwende verlagerte das Management von Borland den Fokus weg von den eigentlichen Entwicklungswerkzeugen hin zu Werkzeugen für die Verwaltung des Entwicklungsprozesses, was im Nachhinein sicher eine grobe Fehleinschätzung war. Auch Hejlsberg wechselt in der Folge zum Konkurrenten Microsoft, wo er bei der Entwicklung des dotNet-Frameworks und der neuen Sprache C# und später mit TypeScript wieder ein spannendes Tätigkeitsfeld vorfand. Erst im Jahre 2008, als Borland die Entwicklungswerkzeuge Delphi und C++ Builder an seinen damals noch unbekannten Kunden Embarcadero verkaufen konnte, ging die Entwicklung wieder vorwärts. Seither hat sich viel getan, Embarcadero entwickelte neue Compiler für verschiedene Ziel-Betriebssysteme wie Android, iOS, MacOS und Linux und stellte dazu eine neue Crossplattform-Library FireMonkey bereit, um auf diesen sehr unterschiedlichen Systemen mit einem einzigen Sourcecode moderne und schön animierte Apps für alle diese Plattformen zu erzeugen. Auch hat sich die Programmiersprache unter dem Einfluss von C# spürbar weiterentwickelt. So kamen das Konzept der Namespaces und noch ein weiteres Paradigma mit der Generischen-Programmierung sowie der Einsatz von anonymen Funktionen aus der Funktionalen-Programmierung hinzu.

Mit seiner leistungsfähigen Multi-Paradigmen-Programmiersprache ermöglicht Delphi auch heute noch eine effiziente Entwicklung von robusten Applikationen, die hinsichtlich Rechengeschwindigkeit und Stromverbrauch zu den besten verfügbaren Lösungen zählen. Für meine Kunden und meine eigenen Produkte ist der relativ geringe Aufwand für Anpassungen an neue Betriebssystemversionen und die sich ändernden graphischen Oberflächen und Bedienungskonzepte über eine für die Softwareindustrie untypisch lange Zeitspanne von über 25 Jahren der wichtigste Vorteil. Dennoch hat sich die Sprache Object-Pascal im Laufe der Zeit immer weiterentwickelt und es befinden sich auch spannende Neuerungen bei Embarcadero in der Entwicklungspipeline.

An dieser Stelle sollte nicht unerwähnt bleiben, dass es gerade in der Schweiz mittlerweile sehr schwierig geworden ist, gute junge Delphi Entwickler für neue Projekte zu finden. Ursache dieser Misere orte ich in den Fehlern der letzten Borland Managern, welche die kostenlosen und akademischen Lizenzen aufgegeben haben. Dieser Missstand wurde von Embarcadero aber unlängst erkannt und es gibt inzwischen wieder ein Programm für akademische Lizenzen wie auch eine freie Community-Lizenz, mit der nicht kommerzielle Applikationen erstellt werden dürfen. Auch stehen heute gute und aktualisierte Ausbildungsmaterialien wie Einführungsvideos in die Applikationserstellung von Leon Kassebaum, Grundlagen-Bücher über Object-Pascal von Marco Cantu und Beschreibungen der Programmierkonzepte von Nick Hodge, wie auch eine Einführung in die moderne GUI-Entwicklung mit Firemonkey von Andrea Magni bereit, um nur die Wichtigsten zu nennen. Die übersichtliche und relativ schnell zu beherrschende Entwicklungsumgebung sowie viele Informationsquellen im Web wie delphilernen.de oder das Delphi-Praxis-Forum und auch eine sehr aktive Community erleichtern den Einstieg.

Ich würde mir wünschen, dass Delphi wieder in der Ausbildung von jungen Informatikern in der Schweiz seinen Platz findet. Ich bin mir aber auch bewusst, dass diese Idee in der Industrie noch wenig Unterstützung findet, denn Delphi wird leider zu oft mit Legacy in Verbindung gebracht und auch die Neuerungen und die Cross-Plattform-Fähigkeit sind zu wenig bekannt. Dieser Blogartikel beabsichtigt, genau dies zu ändern. Der anfangs Jahr verstorbene Prof. Wirth hat auch lange für die Anerkennung von Informatik als eigene Fakultät an der ETH gekämpft, bevor Informatik endlich aus dem Schatten einer Hilfswissenschaft heraustreten konnte.

Weitere Informationen, weshalb ich den MVP-Titel erhalten habe.

Delphi WinRTCypto-Beispiel-Applikationen zeigen Verschlüsselungen für Windows...

November 2023, Lesezeit 4 Min.

Während der Vorbereitung zu meiner Session an der EKON 27 über Hybride Verschlüsselung mit WinRT entstanden 5 Beispiel-Applikationen für Windows. Die ersten beiden Applikationen veranschaulichen, wie einfach eine Symmetrische- und Asymmetrische-Verschlüsselung gebaut werden kann. Dabei werden die Verschlüsselungsalgorithmen vom Betriebssystem verwendet und via WinRT-API aufgerufen. Deshalb wird keine 3rd-Party-Bibliothek benötigt, sondern die Applikationen basieren auf den WinRT-Wrappers, welche schon länger seit der Delphi Version 10 Seattle mitgeliefert werden, aber mangels Dokumentation nicht breiter bekannt waren.

Durch die Kombination der beiden Verschlüsselungsarten wird in der dritten Applikation gezeigt, wie eine Hybride-Verschlüsselung funktioniert. Im vierten Schritt wird die Verschlüsselung für mehrere Empfänger mit ihren asymmetrischen Schlüsselpaare erweitert. Die fünfte und letzte Applikation zeigt zum Schluss noch, wie die übermittelte Meldung mit einer asymmetrischen Signierung gegen Veränderungen geschützt werden kann. Damit erhält der Empfänger Sicherheit, dass die Meldung auch vom ihm bekannten Sender stammt.

Der Source-Code aller 5 Beispielapplikationen ist einerseits auf Github veröffentlicht: github.com/SchneiderInfosystems/WinRTCrypto
Alternativ kann der Code auch via GetIt-Package Manager direkt aus der Delphi IDE bezogen werden.

Eine neue Version 1.5 der Open-Source Library FB4D bringt neue Services und Funktionen...

Juli 2023, Lesezeit 6 Min.

An der EKON 26 in Düsseldorf konnte ich das neue Service-Interface zur ML-Vision in einer stündigen Session vorstellen. In einem halbtägigen Workshop zeigte ich aufbauend auf der ersten Session die Implementation der Demo-App Photobox in 4 nachvollziehbaren Schritten. Diese App zeigt das Zusammenspiel der Firestore NoSQL-Datenbank mit der Firebase Storage und verwendet das Machine-Learning API von ML-Vision für die Bildanalyse der hochgeladenen Fotos. Das in der FB4D implementierte Interface IVisionML bietet eine Bildanalyse für TIFF, GIF und PDF-Formate an. Dabei können die Bilder entweder adhoc in den Service hochgeladen oder auf Bilder aus der Firebase Storage referenziert werden. Folgende Bildanalyse-Funktionen stehen bereit:

  • Texterkennung: Diese gut funktionierende Erkennung von Texten bietet deutlich bessere Leistung an, als es OCR-Bibliotheken bieten. So ist die Erkennung von Handschriften mittlerweile erstaunlich gut und auch die Sprache des Textes kann ausgewertet werden.
  • Objekterkennung: Erkennt und lokalisiert viele allgemein bekannte Objekte und referenziert die Objekte mit der Google-Knowledge-ID.
  • Label-Erkennung: Bewertet den Inhalt des Bildes unter Verwendung von vordefinierten englisch sprachigen Labels. Informiert über die Relevanz der detektierten Labels innerhalb des Bildes.
  • Gesichtserkennung: Erkennt und vermisst Gesichter in Bildern, ohne die Personen eindeutig zu Identifizieren. Ermöglicht die grobe Abschätzung von einfachen Emotionen der abgebildeten Personen.
  • Identifiziert bekannte Sehenswürdigkeiten auf Bilder und liefert deren Georeferenzierung zurück.
  • Erkennung von bekannten Logos oder Produkte.
  • Erkennung von expliziten Inhalten der Kategorien: rassistische, nicht jugendfreie, täuschende, Gewalt zeigende oder medizinische Bilder.
  • Erkennung von Bildern aus dem Web.
  • Erkennung von Bildattribute und Bild-Zuschneid-Hinweise.
Demonstration der Handschrifterkennung mit VisionML
Abbildung 1: Demonstration der Handschrifterkennung mit VisionML in der DemoFB4D-Beispielanwendung

Für weitergehende Fragen zum neuen IVisionML-Interface empfehle ich die Konsultation dieser neuen Wikiseite.

In der Ende Juni in GetIt und GitHub veröffentlichten Version 1.5 sind nun die dazu nötigen neuen Funktionen für ML-Vision sowie die neue Sample-Applikation Photobox enthalten.

Nach längerer Entwicklungszeit bringt diese Version für die Firestore neben der bisherigen Read-Only-Transaktions- neu auch eine Write-Transaktions-Unterstützung mit. Damit ist die FB4D jetzt in der Lage, mehrere Dokumente gleichzeitig und in einer nicht unterbrechbaren Transaktion zu schreiben. Dabei kann in einem Transaktionsteilschritt entweder ein ganzes Dokument neu geschrieben oder ein existierendes Dokument mit UpdateDoc vollständig ersetzt werden. Soll nur eines oder mehrere Felder innerhalb eines bestehenden Dokuments geändert werden, kann die Methode PatchDoc auf dem Interface IFirestoreWriteTransaction eingesetzt werden. Dieses Interface wird durch den Aufruf der Methode IFirestoreDatabase.BeginWriteTransaction erhalten. Für die Ausführung der Transaktion dient die Methode IFirestoreDatabase.CommitWriteTransaction. Wie immer stehen beide Methoden in zweifacher Ausführung bereit: Für GUI-Applikationen stehen asynchrone Aufrufe und für die Nutzung innerhalb von Hintergrund-Threads und Services stehen synchrone und damit blockierende Aufrufe bereit.

Für detailliertere Fragen zur neuen Write-Transaktion auf der Firestore Datenbank sei auf die folgende Wikiseite verwiesen.

Mit der Open-Source Bibliothek FB4D mit Delphi in die Firebase...

September 2022, Lesezeit 4 Min.

Die Google Cloudplattform Firebase stellt verschiedene Webservices für No-SQL Datenbanken, Datei-Ablagen, Machine-Learning, serverseitige Funktionen und weitere Dienste für die weltweit Nutzung bereit. Im Fokus der Firebase stehen Entwickler für mobile Applikationen und Webapplikationen. Dazu gibt es für die Programmiersprachen Swift, Kotlin und Java für Android und iOS Plattformen sowie für Web-Applikationen unter JavaScript gut dokumentierte SDKs von Google.

Für die Ansteuerung unter Delphi biete ich seit dem Oktober 2018 mit der Open-Source Library FB4D auch eine Lösung an, welche intern die REST-API der Firebase nutzt und dabei lang laufende REST-Calls aufbaut, um bei Datenbank Änderungen informiert zu werden, und dies ohne kostenintensiv die Datenbank dauernd abzufragen. Für das Anmelden stellt der Auth-Service verschiedene Workflows für die Anmeldung mit Email-Adresse und Passwort zur Verfügung.

Für die Ansteuerung der verschiedenen Webservices stehen Klassenschnittstellen bereit die über eine zentrale Classfactory einfach angesprochen werden können. Alle Zugriffsmethoden sind in zweifacher Ausführung vorhanden: Einmal als synchrone Methoden für den Einsatz in Threads, Services und in Konsolenapplikationen und als asynchrone Methoden mit Callback-Funktionen für den Einsatz in GUI-Applikationen.

Die FB4D ist eine reine Source-Code Bibliothek, welche ohne Installation einfach in jedes Delphi-Projekt eingebunden werden kann. Dank einem umfassenden Wiki mit einer Einführungsanleitung und umfangreichen Schnittstellen-Beschreibungen sowie einem Diskussionsforum wird der Delphi Entwickler bei der Einarbeitung optimal unterstützt. 6 Beispiel-Applikationen für das FireMonkey Framework FMX sowie für eine für die VCL helfen beim Einstieg und geben Ideen wie die Bibiothek genutzt werden kann.

Für Firmen, die diese Bibliothek in ihren kommerziellen Applikationen einsetzen, empfehle ich ein Sponsoring dieses Projekts. Damit sichern Sie sich die beste Unterstützung und garantierte Weiterentwicklung und Pflege für Ihre Lösung.

Warum Schneider Infosystems auch im Jahr 2022 auf die Programmiersprache Delphi setzt...

August 2022, Lesezeit 7 Minuten

Als unabhängiger Softwareentwickler, der in den letzten 30 Jahren für mehr als 20 grössere und kleinere Schweizer Firmen tätig sein durfte, werde ich oft gefragt, wieso ich denn heute immer noch die inzwischen über 25-jährige Programmiersprache Delphi einsetze? Meine Antwort lautet dabei stets und meist zur Verwunderung der Fragesteller: Da ich trotz intensiver Suche noch keine schönere und effizientere Sprache kennen gelernt habe, arbeite ich gerne weiterhin mit Delphi. Dabei ist mir aber wichtig zu erwähnen, dass die eigentliche Programmiersprache hinter Delphi - Object-Pascal - für mich nur ein viertel des Gesamtpakets Delphi ausmachen. Wichtiger sind für mich die Laufzeit-Bibliotheken und die beiden Oberflächen-Frameworks VCL für Windows und das neuere Firemonkey für die Cross-Plattform Entwicklung. Nicht zuletzt unterstützt mich in der täglichen Arbeit auch die integrierte Entwicklungsumgebung (IDE) und ich anerkenne die Fortschritte, die in den letzten Jahren von Embarcadero in diesem Bereich getätigt wurden.

Vor 5 Jahren habe ich mich in der mobilen Applikations-Entwicklung an der Fachhochschule Luzern weitergebildet und dabei Apples moderne Sprache Swift und später auch Kotlin unter Android kennen und schätzen gelernt. Beide Sprachen lösen sicher einige Technologieaspekte noch besser, als dies in der aktuellen Delphi Version Alexandria 11.2 der Fall ist. Beispielsweise kann eine «Collection» in Swift wie auch in Kotlin, unterschiedliche Datentypen enthalten, was mit Object-Pascal nur unter Verwendung von «Variants» möglich ist und bspw. das Befüllen eines Objekts aus einem JSON-Objekt doch um einiges umständlicher macht. Auch der Einsatz von null-baren Typen erleichtert das Codieren und bringt deutlich lesbaren und kürzeren Code.

Doch auch Delphi hat in den letzten Jahren viele wichtige Erweiterungen erfahren. So möchte ich heute die mit Delphi 2009 erstmals eingeführten generischen <Typen> und die sehr hilfreichen Laufzeitbibliotheks-Klassen der «Generics.Collections» nicht mehr missen. Auch die anonymen Funktionen setze ich häufig ein. Und ich bin auch sicher, die Null-baren Typen kommen in einer der nächsten Delphi Versionen noch dazu, denn sie würden aus meiner Sicht gut zu Object-Pascal passen. Andere Entwurfsparadigmen können bereits heute mit Delphi genutzt werden, man muss sie nur kennen. So verwende ich bereits häufig das Fluent-Design, was die Lesbarkeit des Codes durch verkettete Funktionsaufrufe klar verbessert und durch die Verwendung des automatischen Referenz-Countings dank Einsatz von Klassen-Interfaces zu kürzerem und effektiverem Code führt.

Demonstration des Fluent-Designs bei der Konstruktion eines JSON-Arrays
Abbildung 1: Verwendung des Fluent-Designs für die Konstruktion eines einfachen JSON-Arrays das ein JSON-Objekt enthält

Was ich bei Swift und Kotlin aber schmerzlich vermisst habe, ist eine für mich übersichtliche und robuste IDE mit einem Debugger auf den ich mich in den allermeisten Fällen blind verlassen kann und wo ich, wenn es denn mal sein muss, auch mal den erzeugten Assembler-Code und die Prozessor-Register betrachten kann. Neben der Code-Vervollständigung ist das Navigieren durch den Code zwischen Methoden-Deklaration und Implementation für effizientes Arbeiten unabdingbar. Der Delphi-Designer bietet aus meiner Sicht im Vergleich zu Android Studio und XCode gerade was die Platzierung und automatische Ausrichtung von Controls betrifft immer noch grosse Vorteile und dies sowohl für VCL wie auch für für FMX-Applikationen. Das wir mit Delphi alle Source-Dateien inklusive jener, die wir mittels des integrierten Formdesigners erstellen, als lesbare und damit vergleichbare Textdatei erhalten, ist für mich ein Musskriterium. Apropos Datei-Vergleich: Hier schätze ich täglich die Fähigkeiten von Beyond-Compare und habe in keiner anderen IDE ein solch gut funktionierendes Tool gesehen. In der Delphi-IDE könnte Beyond-Compare aber in Zukunft sicher noch besser integriert werden. Für die Entwicklung von Firebase-Backend-Funktionen mit Typescript sowie für die Crossplattform-Entwicklung durch Einsatz des MinGW-C++ Compiler setze ich auf Visual Studio Code. Dieser enorm erweiterbare Editor bietet sicher viel Nützliches, nur in der täglichen Anwendung kann auch dieses Werkzeug mich nicht restlos begeistern, es gibt zu Vieles was ich noch vermisse.

Aber den wichtigsten Trumpf bringt für mich in vielen meiner heutigen Projekte das Crossplattform Framework Firemonkey. Ich konnte damit auch grössere und komplexere Projekte (600K LOC) mit einem Single-Source-Anteil von ca. 90% für die Plattformen Windows, Mac-OS und partiell für Linux Desktop Systeme erstellen. Das bedeutet, ich muss nur ca. 10% des Codes an die jeweilige Plattform anpassen, weil die Delphi RTL oder kein Drittanbieter eine Funktion geschrieben hat, die meine Aufgabenstellung löst. Dabei handelt es sich aber oft um sehr betriebssystem-nahe Funktionen, wie beispielsweise das Detektieren eines angeschlossenen weiteren Monitors oder das Entfernen eines USB-Geräts während Applikationslaufzeit. Die Lernkurve von Firemonkey war für mich als langjähriger VCL-Anwender aber eine Herausforderung und gute Dokumentation oder Bücher über Firemonkey waren zu Beginn rar. Inzwischen füllt sich aber auch diese Lücke und das Buch «Delphi GUI Programming» von Andrea Magni kann ich wirklich jedem empfehlen, der sich mit Firemonkey beschäftigen will.

Die übersichtliche Delphi Alexandria 11.2 IDE während der Arbeit an einem neuen Vision-ML Modul für FD4D
Abbildung 2: Die übersichtliche Delphi Alexandria 11.2 IDE
während der Arbeit an einem neuen Vision-ML Modul für FB4D