Digitale Signaturen mit S/MIME Java

22. October 2025

Die grundlegende MIME-Struktur besteht aus einem Header und einem Body. Eine Übersicht über die Header findet sich in RFC 2076. Es gibt jedoch noch viele Weitere, wie beispielsweise RFC 2047. Der Body kann aus mehreren Nachrichten bestehen (Content-Type: multipart/…).

development
Fünf Künstler - ein Bild.

17. July 2025

Folgende Frage kam mir unter: Wieviel Struktur soll / muss man Entwickler vorgeben? Dazu eine Analogie: Software ist wie Kunst. Am Anfang ist das weiße Blatt Papier. 5 Entwickler versuchen auf diesem weißen Blatt Papier eine geforderte Problemstellung umzusetzen. Die Herausforderung besteht darin, dass Menschen zu einer gegebenen Problemstellung meist unterschiedliche Lösungen finden werden. Ist das schlecht? Ein Bild mit mehereren Lösungen

development
Umgang mit generierten Klassen am Beispiel von AVRO

01. December 2024

AVRO ist derzeit ein sehr populäres Serialisierungs-Framework. Dank Schemaregistry für Enterprise-Anforderungen bestens gerüstet. Es macht Sinn, die generierten Klassen im Code zu verwenden - allerdings ist der Code dann oft mit Zusatzcode zugepflastert, der mit der generierten Klasse interagiert, obwohl die Funktionalität eigentlich besser in die integrierte Klasse passen würde. Ein kurzer Exkurs: Große Schemas verwalten Ein Finding war, dass komplexe Schemas in einer *.avsc File wenig Sinn machen. Die Herausforderung ist, dass beim ersten Vorkommnis ein record typ definiert wird und bei weiterer Verwendung nur mehr referenziert wird – das ist echt mühsam.

development
Microservices und stabile Interfaces

27. November 2024

Microservices sind ein beliebtes Tool, um komplexe Domänen zu zerteilen. Doch am Ende des Tages macht die Entscheidung des übermäßigen Einsatzes – in manchen Fällen – dann mehr Kopfweh als Nutzen. Vor Kurzem ist mir dabei folgendes Beispiel im Zuge einer Diskussion in den Sinn gekommen: Schauen wir uns einen Teil eines Webshops an: Order Management mit der Aufgabe den Bestellvorgang abzuwickeln Pay Service mit der Aufgabe der Bezahlung Neben fachlichen Aspekten, die für das Schneiden wichtig sind, welche Eigenschaft sind noch wichtig? Stabile Interfaces. Schaut man sich diese an, so merkt man, dass diese relativ einfach sind und eigentlich über die Zeit hinweg stabil sein sollten: Pay Service: Input Parameter: Geldbetrag

development
Sinnvoller Einsatz von Table-Partitioning in SQL Server

26. November 2024

Wann macht Table-Partioning Sinn? Vor kurzem hatte ich die Aufgabe, eine Liste aus Rechnungen filterbar zu machen – das schwierige dabei war, dass die Anzahl der Rechnungen nicht bekannt ist und diese auch noch hierarchisch waren (1 Rechnung hat 0..n Positionen – wobei die Positionen von unterschiedlichem Typ sein können). Ebenfalls war die Anforderung “über Jahre hinweg eine stabile Performance zu haben”. Herausforderung 1: Die Pagination in der Übersichtsliste von Rechnungen ist auf der Rechnung – d.h. 10 Element auf der Seite entspricht 10 Rechnungen mit 0..n Positionen. Was bei großen Tabelle gut funktioniert, ist das Suchen nach gewissen Kriterien: e.g. gib mir alle Positionen mit der SomeValue = 123:

development
Asp.Net Core Controller mit OpenAPI

07. October 2024

Wenn man im Projekt die Situation hat, dass man z.B. zwei unterschiedliche Personen hat, welche einerseits den OpenAPI Contract schreiben und anderseits implementieren, macht es Sinn, den Contract-First Approch zu verfolgen. Bei .NET geht das nicht so out-of-the-box, wie z.B. bei Spring mit Maven. Schritt 1: NSwag Studio laden Das neueste NSwag Studio kann man von hier beziehen: https://github.com/RicoSuter/NSwag/releases. In NSwag kann man den OpenAPI Contract pasten und on-the-fly generieren lassen.

development
Domain-Driven-Design

05. September 2024

Bei Domain-Driven-Design gibt es zwei Flughöhen: Strategic: Hier befasst man sich mit dem „schneiden“ der Domänen Tactical: Hier geht es bis in die Implementierung Ich möchte meine Gedanken zu Tactical zu Blatt bringen. Analyse von Aggregaten Aggregate umschließen jene Entitäten, welche eine atomare Einheit bilden sollen. Das hört sich auf den ersten Blick nutzlos an – aber in fast allen Applikationen muss man von parallelem arbeiten an einem Datensatz durch mehrere Personen ausgehen. Und hier ist das Thema Konsistenz dann ein großes Thema.

development
Requirements dokumentieren in agilgen Projekten

27. August 2024

Welche Funktionalität ist in meiner Software? Diese Frage ist oft in agilen Projekten nicht einfach zu beantworten – zumindest seriös. Ist das Benutzerhandbuch die einzig valide Quelle? Folgende Vorgehensweise habe ich kennengelernt (es gibt auch viele andere): 1. User-Story Map Als erstes versucht man die User-Stories zu priorisieren. Da kann eine User-Story Map helfen, um eine gute End-to-End-Sicht zu bekommen. Wichtig ist nur zu verstehen: Man soll nicht versuchen, alles in eine User-Story Map zu pressen – man kann ohne weiteres mehrere haben.

development
Static Web App mit Microsoft Azure

28. February 2024

Azure Subscription Die Reise beginnt in Azure. Man muss eine Subscription anlegen - dort werden die Zahlungsdaten hinterlegt. Wichtig ist, dass man ein Budget anlegt (Achtung: Es kann bis zu 24h dauern, bis man ein Budget bei einer neuer Subscription anlegen kann). Repository Beginnen tut die Reise in Azure DevOps: Falls noch nicht passiert, muss man eine Organisation anlegen.

development
SQL Server und RCSI

16. January 2024

SQL Server Als erstes möchte ich das ganze bei SQL Server ausprobieren. Dazu starten wir eine Instanz in Docker:

development
Langzeitbackups machen

09. January 2024

Die meisten Anbieter haben inzwischen Lösungen für Cloud-Drives (OneDrive von Microsoft, Google Drive, Apple iCloud). Doch ab und zu schläft man besser, wenn man noch ein zusätzliches Backup hat. Amazon Glacier Amazon Glacier ist kinderleicht zu bedienen und extrem kostengünstig. Das Anfordern des Inventars kann schon einige Stunden in Anspruch nehmen, aber ein Backup braucht man ja nicht jeden Tag. Wir reden hier von ca. 60cent pro Monat für 80GB. Man lädt die Inventar Metadaten lokal und synced dann. Storage Class ändern ist nicht erforderlich.

development
DELL Precision 3660 vs. Techbold custom PC

27. October 2023

Vorweg: es war nicht unbedingt notwendig. Aber ich habe mir vor 3 Jahren einen ThinkPad T14 gekauft – leider mit AMD. Aktuell habe ich auch einen T15 mit Intel und einen HP mite Intel und Nvidia (beides Arbeitslaptops). AMD bedeutet: USB mit externen Monitoren – kann funktionieren – muss aber nicht. Bluetooth reagiert nicht mehr? Kann passieren. TouchPad spielt verrückt (hat wahrscheinlich nichts mit AMD zu tun) – passiert – wurde dann gewechselt. Und wenn man nach AMD googelt: Funktionierende Treiber schreiben, scheint nicht die Stärke von AMD zu sein. Intel und Nvidia funktionieren einfach zuverlässiger.

development
Entitäten und deren Identifier

09. September 2023

Gedanken Identifier helfen dabei, manche Entitäten – eindeutig – zu benennen. Diesmal starte ich unten im Code-Model und mit einem technischen Detail: Wie gestalte ich die Tabellen am besten? plaintext CREATE TABLE schema.table ( id bigint PRIMARY KEY GENERATED ALWAYS AS IDENTITY

development
Requirements-Management: From Domain to Code – Was ist Traceability?

02. September 2023

Requirement Traceability “We just learned that the new union contract is changing how overtime pay and shift bonuses are calculated,” Justin reported at the weekly team meeting. “It’s also changing how the seniority rules affect priority for vacation scheduling and shift preferences. We have to update the payroll and staff scheduling systems to handle all these changes right away. How long do you think it will take to get this done, Chris?”

development
Die Dosis macht das Gift – wieviel Logik soll in eine Datenbank?

22. August 2023

Ich versuche meine Meinung mit folgender Definition zu beginnen: Object-relational impedance mismatch: Bezeichnet die Herausforderung, Objekte aus einer objektorientierten Programmiersprache in einer relationalen Datenbank zu speichern. Dafür gibt es ein oft verwendetes Hilfsmittel: ORM (Objekt-Relationales Mapping): Beispiele dafür sind Hibernate oder Entity-Framework. Es handelt sich um Libraries, die das Arbeiten mit relationalen Datenbanken – fast – transparent erledigen. Der Benutzer kann in seiner objektorientieren Welt bleiben und das Framework kümmert sich um Joinen, Change-Tracking, uvm.

development
Kafka and Redis Streams

03. March 2023

General goal Kafka is used as source of truth it lots of projects - especially when the project is modeled around events. In lots of situations other technologies are needed to make the post-processing / allowing for queries / … easier. PostgreSQL for example can be used to make analytical queries. PostgreSQL can also act as a time series database (using the BRIN index and for in some situation also a B-Tree - influxDB may use less memory - but anyhow).

development
Der modulare Monolith

27. February 2023

Ein Test Der modulare Monolith ist ein gängiger Architectural Style. Die Vorteile sind – was mir auf die Schnelle einfällt: Wiederverwendung von Funktionalität ist sehr einfach Änderungen, welche mehrere Komponenten betreffen, sind einfacher zu koordinieren Commincation Style ist sehr einfach und die Performance ist leichter vorhersehbar Das Deployment bzw. dessen Planung ist sehr einfach Das schöne bei diesem Stil ist: Architekturelle Unit-Tests sind möglich. Siehe dazu folgende Blog-Einträge:

development
Dual DELL U2722D mit ThinkPad T14

12. July 2022

Die freie Wahl, Home-Office zu machen, finde ich genial. An manchen Tagen will man sich die Zeit von 1.5h, die man in Öffis verbringt, einfach sparen. Zeit, sich im Home-Office einzurichten. Da man als ITler rund 9h in einen Monitor schaut war mir eines wichtig: es muss etwas Hochwertiges sein. Ich habe bereits 2 DELL U2711D (11 Jahr alt – damals zu einem stolzen Stückpreis von 700 EUR) im Einsatz und bin sehr zufrieden. Das aktuelle Modell ist der DELL U2722D. Die beiden DELL U2711D werden per DisplayPort an einen Stand-PC angeschlossen. Durch die WQHD Auflösung war das vor 10 Jahren auch nicht trivial – ich habe mir damals eine Nvidia Quadro FX580 besorgen müssen. Heute sind Notebooks aber schon extrem leistungsstark. Mein Notebook: Lenovo Campus ThinkPad T14 20UES00L00:

development
Healthendpoint aus theoretischer Sicht

12. March 2022

Health Endpoint eines Services Ich habe eine interessante Problemstellung bearbeitet: Wie könnte ein Health-Endpoint ausschauen? Nach kurzer Recherche im Internet: the status of the connections to the infrastructure services used by the service instance the status of the host, e.g. disk space application specific logic (Quelle: https://microservices.io/patterns/observability/health-check-api.html) Meine Meinung dazu: Punkt 1: zu oberflächlich Punkt 2: aus meiner Sicht sind das Metriken – anderes Thema Punkt 3: ok (obwohl nicht genau gesagt wurde, was hiermit gemeint ist) .NET Core 2.2 hat es native enhalten: Health checks in ASP.NET Core. So wird z.B. bei SQL Server mit SELECT 1 überprüft, ob die Verbindung und die Authentifizierung funktioniert. Wie immer würde ich das gerne mit theoretischen Sichtweisen verschmelzen.

development
Adresssuche in PostgreSQL

12. March 2022

Ein interessantes Thema – vorallem, weil die Schreibweisen von Adressen oft nicht trivial sind. Auf die Schnelle habe ich folgende zwei Strategien gefunden: pg_trgm: Dieses Modul erlaubt es, die Ähnlichkeit von Wörtern zu messen. Durch das Anlegen eines Index, ist diese Methode extrem performant. Phonet: Erlaubt einen String auf einen „Aussprache“ String zu projizieren. Ähnlich klingende Strings mappen somit auf den gleichen String. Anschließend Abgleich mit pg_gtrm. Der Vorteil: Aussprachefehler werden „ausgebessert“ und führen zu einem besseren Match. Wann funktioniert das gut? Wenn man die Menge an Möglichkeiten voreinschränkt. Dazu bietet sich natürlich die Postleitzahl an. In Österreich 4-stellig – aber es reicht, wenn man auch nur 1-2 Stellen eingibt. Vorangestellt oder nicht – je nach dem. Ich war mit dem Ergebnis sehr zufrieden.

development
PostgreSQL Tabellen nach Gherkin Tabellen

05. March 2022

Dapper Ansich nichts besonderes - trotzdem ein interessantes Thema. Points of Interst: Wenn die Tabelle leer ist, muss man sich einer Hilfstabelle bedienen Gherkin Tests sollten nicht zu technisch sein - ob man jetzt tasächlich Tabellen prüfen sollte - fraglich. Anderseits ist es ein netter Integrationstest - ob BDD das beste Tool dafür ist, sei dahingestellt. Ich kenne zumindest keinen Business Analysten, der sich solche Tests selber zusammen schraubt. Allerdings kann es beim Verfassen von Akzeptanzkriterien hilfreich sein.

development
Historisieren mit Hibernate

04. March 2022

Wie kann man Daten am besten historisieren? Viele Wege führen nach Rom – ich möchte an dieser Stelle einen beschreiben. Möglichkeit 1: Man nutzt Frameworks in der Zielsprache. Zu erwähnen wäre Hibernate Envers oder Entity Framework Auto-History bzw. Audit.NET. Möglichkeit 2: Man lässt das die Persistenz erledigen. Datenbank wie SQL Server unterstützen Temporale Tabellen. PostgreSQL hat Plugins – aber man ist auch gut beraten, selber Hand anzulegen – warum, zeige ich gleich. Temporal Tables sind im SQL:2011 Standard zu finden.

development
RDBMS vs GraphDB

03. February 2022

Zu diesem Zweck hab ich mir von Oreilly 3 Bücher heruntergeladen und bin diese überflogen, um die Konzepte zu verstehen. Die in den Büchern vorgestellten Datenbanken verwendeten die sogenannte Gremlin Query Language. Trotzdem muss ich sagen: Ich war skeptisch – wie ich bei sehr vielen NoSQL Datenbanken skeptisch bin. Es gibt sicher einige gute (Cassandra, Redis, …) – aber viele scheinen mir auch klassische Sonntagsprojekte zu sein und haben niemals den Tiefgang und die Professionalität von e.g PostgreSQL.

development
.NET C# mit Roslyn

25. December 2021

Dabei kann man diverse Schritte zwischen C# und IL analysieren und auch manipulieren (in Form von Ergänzung). Die Manipulation macht unter anderem bei Aspekt orientierter Programmierung Sinn, wenn man Cross-Cutting-Concerns auslagern will. Das ging bis dato nur mit PostSharp gut. Vor- und Nachteile wurden hier im Detail abgehandelt. Ich habe Roslyn für die Analyse von Source-Code verwendet. Es funktioniert sehr gut. Die Challenge ist eher der Kompilierprozess per API – der ist ein wenig wackelig.

development
Playing around mit Java und Hibernate

22. April 2021

PostgreSQL unter Windows 10 Windows 10 mit Docker Desktop und WSL2 funktioniert einfach super. Man hat die Einfachheit von Windows gepaart mit der Power von Linux. Auf dem Entwicklerrechner habe ich daher:

development
Ausflug FH Technikum-Wien: Softwarekomponentensysteme

28. November 2019

Durch Zufall hat es sich heuer ergeben, dass ich eine Vorlesung am Technikum-Wien übernehmen konnte. Das Thema Softwarekomponentensysteme ist ein Thema, welches mich interessiert und ich hatte eine konkrete Vorstellung, was ich darüber erzählen würde. Damit die Folien nicht untergehen, hab ich mich dazu entschlossen, sie auch hier online zu stellen. All in All war es eine (zeitaufwendige) Challenge – aber durchaus auch eine lehrreiche. Anmerkung: Ich musste neben der Vorlesung alle Folien und Übungen machen - vermute, es sind noch einige Fehler drinnen - bzw. würde ich noch ggf. einiges überarbeiten.

development everyday-life
Software Aging

05. September 2019

Ich habe im Laufe meiner Entwicklerzeit schon einiges gesehen. Leider musste ich extrem viele Stunden mit dem Analysieren von Bugs verbringen. Dabei waren für mich immer die angenehmsten Bugs, wenn eine Exception geflogen ist nach dem Motto „Das habe ich in diesem State nicht erwartet“. Der Fehler war schnell zu verstehen und schnell behoben. Aber dann gibt es diese Bugs wo man dran sitzt und keine Ahnung hat … Wie kam die Software in diesen State? Wie kann ich es überhaupt reproduzieren? Kann ich es überhaupt reproduzieren?

development
Parallele Software Übersicht

01. May 2019

Neben Exceptions ist Threading ein weiteres Thema, welches viel Kopfweh bereiten kann. Bei Exceptions hat man oft gute Erfolgschancen zu verstehen, was schief gegangen ist. Bei e.g. Race-Conditions schauts relativ schlecht aus. Man kann es oft lokal nicht nachstellen oder sieht nur die Auswirkung – die Ursache zu finden ist dann meist unmöglich. Neben den Bugs gibt es aber auch positive Aspekte: die Applikation wird performanter, denn moderne CPUs haben viele Kerne.

development
Exception Handling

01. May 2019

Oft sind die trivialsten Themen jene, die – wie es so schön heißt – versumpern. Und es sind auch jene Themen, die dann am Ende des Tages – durch den häufigen Einsatz – am meisten Kopfweh machen. Nach dem 100sten Bug, den man analysiert hat – akribisch – fast wie ein Detektiv – kommt zum Schluss: das hätte alles nicht so sein müssen – ich hätte mir viel Arbeit erspart, wenn es der Entwickler „besser“ gemacht hätte. Ein Thema ist: Exception Handling.

development
SQL Server & Kafka

02. March 2019

Im Laufe meiner Arbeitskarriere bin ich immer wieder auf 1 Problem gestoßen: Komponente A hat einen State, andem andere Komponenten interessiert sind. Ich hab schon die unterschiedlichsten Lösungen gesehen: DataTables mit RowChanged und anschließend über .NET Remoting Events raus WCF Events .NET Sync-Framework Auch habe ich im Laufe meiner Arbeitskarriere immer wieder die gleichen Probleme gesehen: Bug gemeldet: State in Komponenten X passt nicht: erwartet wurde State 1 - aber State ist 2. Wie kam es zu State 2? Was waren die vorhergehenden States? Als Entwickler kann man jetzt die Log durchforsten und sich die Stimuli von Komponenten X “raussuchen” und hoffen, dass man es irgendwie nachstellen kann. Aber im Regelfall kann man nur mit der Schulter zucken - vermutlich Events durcheinander gekommen. Bug gemeldet: “komisches Verhalten” - es scheinen Events zu fehlen. Das durchschauen der Logs lenkt den Verdacht auf Verbindungsverluste / Service-Neustarts / … Das System steht: Self-Denial Attacks [1] ist der Klassiker. Eine Zentrale Komponente, bei der sich andere Komponenten registrieren. Startet diese neu, kommt es meist zu einem Neu-Subscriben - oft umgesetzt mit Snapshot-Delta Strategie. Das belastest dieses zentrale Komponente enorm. Ab und zu ist der Betreuer des Systems dazu gezwungen, Services manuell “langsam” zu starten, damit die zentrale Komponenten nicht “versagt”. Ich hab daraus drei Dinge gelernt:

development
Playing with TPL

27. December 2018

Weihnachtszeit und etwas Zeit sich irgendwas anschauen – da muss auch ein wenig Platz für Entwicklung sein. Diesmal: Wie könnte man einen Teil eines Actor Frameworks im C# Style mit möglichst wenig Aufwand schreiben? Es gibt nichts schlimmeres im Code als ein Threading Massaker. An 1000 Stellen Thread.Run oder new Thread – da läufts jedem Entwickler kalt den Rücken runter, wenn der nächste Bug in Jira anflattert und nur ein Hauch von Race-Condition Problemen aus der Beschreibung herauszulesen ist („Nicht mehr reproduzierbar“, „passiert nur manchmal“ usw.).

development
Apache Kafka und Co – Ein Ausflug

09. June 2018

Erste Station RabbitMQ RabbitMQ ist ein etablierter Message Broker, welcher in Erlang geschrieben ist. Erlang ist für hoch parallele Applikationen interessant, da es jeden Core der CPU mehr als gut ausnutzen kann (1 Thread pro Core – Erlang Prozesse kann man Millionen machen – siehe Actor Modell). Wie funktioniert RabbitMQ? Quelle: https://www.cloudamqp.com Dieses Bild zeigt die Funktionsweise: Eine Nachricht wird an einen Exchange geschickt. Anhand von konfigurierten Bindings wird die Nachricht an eine Queue weitergeleitet:

development
Dies und Das in ASP.NET Core

18. February 2018

Immutable Objects aus dem Path Für das nachvollziehen von Fehlern in einem Code gibt es nichts angenehmeres als Immutable Objects, da sie den State nach dem Erzeugen nicht mehr ändern können. Immutable Objects werden per se nicht von .NET unterstützt (durch Reflection kann man sie immer ändern) – aber man kann durch e.g. Private-Setter einen ähnlichen Effekt erreichen. Auch AOP Postsharp bietet ein Immutable Threading Model. In ASP.NET Core musste ich ein wenig suchen – daher hier ein Beispiel:

development
Ausflug SQL Server

11. February 2018

Relationale Datenbanken Ich konnte mich in letzter Zeit mit Microsoft SQL Server auseinandersetzen. Wie im Produkt schon zu sehen ist, spricht dieser Server “SQL” (Structured Query Language). Auch wenn jedes RDBMS einen eigenen Dialekt hat, so sind die Gemeinsamkeiten doch sehr groß. Jemand der in PostgreSQL CRUD-Operationen schafft, wird es auch in SQL Server schaffen. Auch wird man viele Konzepte immer wieder finden: Indextypen (Clustered, Non-Clustered) Interne Funktionsweisen (Heap Tables, Pages, …) Funktionsweise von Transaktion Query Planer (Cardinality Estimation bzw. Table Statistics, …) … Lustigerweise bin ich mit dem Gedanken gleich gegen eine Wand gefahren. Bei gewissen Aufgabenstellungen ist es nicht mehr ausreichend, 10% der Werkzeuge eines Produkts zu kennen – man muss die Werkzeuge verstehen, die SQL Server bietet – und das ist eine Menge. Rückblickend zahlt es sich – je nach Problemstellung – durchaus aus, sich externe Hilfe zu holen. Jemanden zu holen, der eine breite Palette an Werkzeugen und Problemstellungen kennt und Tipps geben kann, mit welchen Werkzeugen man am meisten Chancen hat. Eine Tabelle mit 600 Millionen Datensätze mit diversen Operatoren zu aggregieren ist kein triviales Unterfangen. Vor allem, wenn die Abfrage durch ein Frontend angestoßen wird und der Endbenutzer sich zeitnah eine Antwort erwartet. Auch das Updaten von großen Datenmengen (2 Millionen Datensätzen) in einer Transkation, kann Kopfzerbrechen machen.

development
Software Architekturen

29. December 2016

Hast du Bauch- und Kopfweh, dann schau dir spätestens jetzt das Thema Software Architekturen an. Inzwischen habe ich einige interessante Erfahrungen bzgl. dieses Themas gemacht: Viele wissen nicht, was eine Software-Architektur überhaupt ist. Das Wort ist in vielen Münder - ein paar “Kastln und Linien” halt – die irgendwer vorher mal gemacht hat … Oft wird es auch mit Software-Design und Solution-Architektur verwechselt … Das Thema interessiert nicht viele. Ich habe die Erfahrung gemacht, dass man am Projektbeginn kurzzeitig in die Rolle “schlüpft”. Hier und da ein paar Dokumente mit Diagrammen: “Fancy-Names” für ein paar “Boxen” - ein paar Linien, vielleicht noch ein Sequenzdiagramm über Schönwetterfälle, um das Ganze ein bisschen abzurunden. Fragt man dann Verantwortliche, ob sie sich schon Gedanken gemacht haben, wie das Protokoll zwischen den Komponenten ausschaut – Fehlanzeige. Das kommt ja im Laufe der Zeit … Emergente-Architekturen können eben auch falsch praktiziert werden …. Wohlgemerkt rede ich hier nicht von trivialen Architekturen, wo sich die Entwicklung auf das “herunter-programmieren” von e.g. Formularen beschränkt … That´s just the way it is. Komplizierte Refactoring-Sprints werden oft als gegeben hingekommen. Software ist komplex. Unser Problem ist komplex. Oft vergleichbar mit dem Hausbau: Man fängt mit Erdgeschoss Zimmer 1 und Zimmer 2 an. Dann kommt man drauf, dass die Einteilung der Zimmer ungünstig ist und Zimmer 1 und 2 besser getauscht gehören. Aber kein Mensch hierzulande wird einen Hausbau ohne einen “Blue-Print” anfangen … Dass man sich an den Architekten des Vertrauens wendet ist hierzulande selbstverständlich. Und eine solcher Umbau in Bauphase würde man als sehr kritische bezeichnen – nicht so aber bei Software. Hier nimmt man es als gegeben hin … Das richtige Maß finden. Wie viel Software-Architektur Up-Front Design ist genug? In welcher Form macht man es? Eine sehr schwierige Frage, die auch nicht gerne beantwortet wird, weil man sich vermutlich die Finger nicht verbrennen will. Aber auch hier sollte man recht zielsicher ans Werk gehen: das korrekte Maß an Up-Front Design sollte erkannt werden um die genannten Risiken zu eliminieren bzw. zu senken. Aber beginnen wir am Anfang: Was ist nun Software-Architektur?

development
Static Site Generators unter Windows

04. September 2016

Spätestens durch GitHub hat Static-Site Generation für die breite Masse an Bekanntheit gewonnen. Das Prinzip ist relativ einfach: statt auf einem Server die Seite von PHP oder ASP.NET “zusammenrechnen” zu lassen, macht man es auf dem Entwicklerrechner und spielt die einzelnen HTML Dateien anschließend auf dem Server. Die Vorteile die ich dadurch sehe: Der Webserver kann sehr einfach sein. Dadurch verringert sich die Komplexität in Wartung und Sicherheit. Migration auf andere Server sehr einfach. Sehr hohe Performance, da der Webserver nur mehr die HTML Seite ausliefern muss. Gut versionierbar. Einträge (wie hier in meinem Blog) können e.g. in Markdown geschrieben werden. Die Sprache ist textbasiert – daher hat man sehr gut leserliche “diffs” und weiß was geändert wurde. Git bietet sich e.g. gut an. Wenig Kopfweh. Man muss sich nicht mit Full-Blown Tools wie Wordpress und Co herumschlagen, wenn man die Features gar nicht braucht. Right Tool for Right Job. Die Nachteile sind natürlich auch abzuwiegen:

development
Technologie ist nicht alles – Business Analyse und Requirement Engineering revised

26. July 2016

We are Developers Ich hatte die “Ehre”, vor einem Monat die We are Developers Konferenz zu besuchen. Während der Konferenz gab es schon einige Unstimmigkeiten, welche Javascript Frameworks wohl die Besten sind. Viele Speaker sprachen sich gegen Framework X aus und verfechten das ultimative Framework Y. So ging es die ganze Zeit. Als eine Speakerin ein Framework (ich glaub es ging um das Framework von Xamarin) nicht kannte, ging ein Raunzen und Unverständnis durchs Publikum. Dieses Verhaltensmuster bringt mich immer zum Schmunzeln. Aus meiner Sicht wird es immer eine bessere technologische Lösung für ein Problem geben, als die momentan gewählte. Die (aus meiner Sicht) einzig relevanten Fragen am Ende des Tages sind: Konnte ich mit meiner Lösung den Kunden zufrieden stellen? Werde ich in Zukunft auf Änderungen meines Kunden effizient reagieren können? Nuancen in Framework-Unterschieden sind für mich dabei keiner religiösen Diskussion wert.

development
Business Analyse: Hoch kollaborative Umgebungen verstehen

23. March 2016

In der Firma beschäftige ich mich momentan mit Business Analyse. Das Buch Business Analysis For Dummies [1] definiert Business Analyse wie folgt: set of tasks and techniques used to work as a liaison among stakeholders in order to understand the structure, policies, and operations of an organization, and to recommend solutions that enable the organization to achieve its goals. Es geht bei Business Analyse also darum, Unternehmensabläufe zu verstehen, um sie verbessern zu können. E.g. auch mit Hilfe von Software, welche bis dato noch fehlte oder veraltet ist. Im Zuge der Recherche habe ich mir einige Gedanken gemacht und auch Synergien zur Uni gesucht. Die Gedanken möchte ich hier zu Blatt bringen.

development
Kryptographie

26. February 2016

Die meisten Informationen habe ich aus dem Netz und aus dem Buch Kryptografie: Verfahren, Protokolle, Infrastrukturen (iX Edition). Wie man Wikipedia entnehmen kann, ist Kryptografie heute mehr als nur die Lehre der Verschlüsselung: … war ursprünglich die Wissenschaft der Verschlüsselung von Informationen. Heute befasst sie sich allgemein mit dem Thema Informationssicherheit …

development security
Representational State Transfer (REST)

20. December 2015

REST ist in vielerlei Munde. Oft sind sich die Nutzer über die Bedeutung dieses Buzzwords aber nicht einig. Grund genug, sich einmal die orginal Arbeit anzuschauen. Das erste Interessante an der Arbeit ist einmal der Betreuer: Richard N. Taylor. Wenn man sich mit Software Architekturen auseinandersetzt (vorallem im akademischen Bereich), kommt man kaum um ihn herum. Auch sein Buch ist recht interessant.

development
Coding Dojo – Top-Down oder Bottom-Up

11. October 2015

Ziel des letzten DOJOs war die Implementierung von Game Of Life. Auch wenn immer versucht wurde bis Ende des DOJOs eine lauffähige Version zu bekommen, so stand das Software Design und die korrekte Methodik (e.g. TDD) im Vordergrund. Es ist für einen Entwickler oft schwer sich zu bremsen und auf die korrekte Ausführung zu achten – daher empfinde ich es als gute Übung. Die Implementierung erfolgte in 10 Minuten Pair Programming Sessions auf einem Laptop, sodass jeder Teilnehmer mit “Entscheidungen” anderer Teilnehmer arbeiten musste.

development
Coding Dojo und die Motivation für Upfront-Design

22. August 2015

Übung macht den Meister – nicht nur im Sport. Coding Dojo erlaubt es, sich mit anderen Entwicklern auszutauschen und Ideen fließen zu lassen. Die Softwerkskammer ist jene Plattform, an denen diverse Treffen angekündigt werden. Was passiert bei den Treffen? Teilnehmer bekommen Aufgaben gestellt und lösen diese meistens zu zweit. Zeit, um Denkweisen anderer Entwickler kennen zu lernen, Zeit um eventuell seine IDE besser kennen zu lernen oder womöglich bietet sich sogar eine Möglichkeit an, eine neue Programmiersprache zu lernen. In einem der letzten firmeninternen DOJOs haben wir ein CRC (Use Class, Responsibilities, and Collaboration) Spiel 2 x 45 Minuten gemacht. Das letzte Mal hatte ich CRC auf der TU vor 8 Jahren benutzt.

development
Software Sicherheit – wir haben es ignoriert

15. August 2015

Ich habe mich im letzten Sommer ein wenig mit den Grundlagen der Kryptografie beschäftigt. Inzwischen ist Kryptografie nicht nur mehr die Lehre des Verschlüsselns, sondern weit mehr [1][2]. Neben der Kryptografie hab ich auch noch ein anderes Schlagwort gefunden: Security Engineering [3]. Vorweg: die Ganze Thematik ist extremst komplex aus meiner Sicht. Betrachten wir nur Mal die Kryptografie. Ein paar Schlagworte (jemand, der von Kryptografie Ahnung hat, wird an dieser Stelle lachen – für einen Newcomer doch sehr viel Information zum Verarbeiten):

development security
Agile Software Entwicklung - ein Freifahrtschein? Zuverlässige Software

19. June 2015

Vom Sonnenschein zum Schlechtwetter - Fault Tolerance Wie im ersten Teil festgestellt, gibt es viel zu oft nur Schönwetter-Tests. Damit nicht genug – das System ist auch oft nur für Schönwetter gebaut. Wer kennt das nicht?

development
Agile Software Entwicklung - ein Freifahrtschein?

16. March 2015

Wo alles anfing Agile Softwareentwicklung ist in aller Munde. Die meisten Teams haben diesen Softwareentwicklungsprozess adaptiert - oder zumindest die angenehmsten “Dinge” davon. Den ersten Kontakt mit agilen Methoden hatte ich bei einem Seminar auf der TU - u.a. mit “User Storys”. Ein guter Einstieg für mich war damals das Buch von Mike Cohn [1]. Ein sehr interessantes Zitat, welches bis heute in meinem Hinterkopf hängen geblieben ist:

development