Boehrsi.de - IT und Gaming Blog

I'm a coder - Over engineered... again

Erstellt am event Uhr von account_circle Boehrsi in label Boehrsi
I'm a coder - Over engineered... again Bild

Es ist schon etwas länger her das in dieser Sammlung etwas geschrieben wurde, aber nun wird es mal wieder Zeit. Denn nach einem durchaus ausführlichen Gespräch mit einem guten Freund und Entwicklerkollegen, hab ich mal wieder neues Lesematerial für euch.
Heute geht es um das Thema Over-Engineering und das in verschiedenen Formen. Den Anfang macht dabei die oft angepriesene nutzerzentrierte Entwicklung von Anwendungen. Ein schönes Buzzword, welches quasi immer im Raum steht bei Anwendungen die für Endanwender gedacht sind, aber sehr oft und sehr schnell vergessen wird. Egal ob die kleine private Anwendung, ein internes Firmentool oder aber eine große App für einen Kunden, das Problem mit dem Over-Engineering ist allgegenwärtig.
Dies äußert sich quasi immer darin, dass man im stillen Kämmerlein entwickelt und entwickelt. Man baut Features, implementiert Abläufe und davon immer mehr und mehr. Manchmal hat man konkrete User Stories, manchmal hat man sich selber etwas überlegt, aber am Ende basiert alles meist auf Annahmen. Denn selbst die beste Marktanalyse kann nicht garantieren, dass die entwickelten Funktionen der Art und Weise wie der Endanwender mit der Anwendung umgehen wollen entspricht. Dies bekommt man im eingeschränkten Rahmen durch Tests raus, aber am besten einfach durch echte Nutzer, die die Anwendung wirklich im Alltag verwenden. Entsprechend gilt hier Release Early Release Often mehr denn je.

Tessa App - Update mit Dark Mode und anpassbaren Kategorien

Erstellt am event Uhr von account_circle Boehrsi in label Development
Tessa App - Update mit Dark Mode und anpassbaren Kategorien Bild

Es gibt wieder neues von mir aus der Flutter Welt. Meine App Tessa hat ein Update erhalten. In dieser Version fügte ich einen Dark Mode und anpassbare Kategorien hinzu. Natürlich wurden auch diverse Fehler behoben und einige Anpassungen an der UI vorgenommen. Letzteres sorgt vor allem für einen modernen Look im Bereich der Snackbars. Ebenfalls verbessert wurde die Performance.
Im Rahmen des Updates habe ich das erste Mal mit Flutter in Verbindung mit einem dedizierten Dark Mode gearbeitet und ich bin durchaus zufrieden. Generell musste ich lediglich mein allgemeines Theme in ein helles und ein dunkles aufteilen und der Großteil war geschafft. Natürlich muss man sich dann noch um eventuelle manuelle Einstellungen kümmern, aber extrem vieles lief einfach so. Selbst UI die von Third Party Libraries gebaut wird, konnte bis auf kleine Ausnahmen ohne Änderungen verwendet werden. Hier merkt man das Flutters Material Komponenten alle aus einem Guss kommen.
Bedenken sollte man allerdings auch die nativen oder statischen Komponenten. In diesem Bereich habe ich vor allem kleinere Anpassungen an den genutzten Bildern vorgenommen und den initialen Splash Screen angepasst. Hierfür habe ich innerhalb von Android selbst die gegebenen Möglichkeiten genutzt. Da zu diesem Zeitpunkt Flutter selbst noch nicht aktiv ist, ist der Splash Screen immer gemäß des System Themes gesetzt und manuelle App Einstellungen greifen dann nachdem der Flutter Kontext geladen ist.

Related Links

Jetpack Compose - Meine ersten Erfahrungen

Erstellt am event Uhr von account_circle Boehrsi in label Development
Jetpack Compose - Meine ersten Erfahrungen Bild

Ich habe in den letzten Wochen relativ eingehend erste Schritte mit Jetpack Compose gemacht. Dies ist Androids neues Framework zu Erstellung des User Interfaces. Dabei entfernt man sich weit vom bekannten Ansatz, bei welchem ausgelagertes XML genutzt und später auf die eine oder andere Art mit der eigentlichen Logik verbunden wird.
Mit Compose bewegt man sich in sehr ähnlichen Welten wie bei Flutter. Die gesamte UI wird direkt im Code definiert und entsprechend ist eine extra Verbindungsschicht unnötig. Dadurch spart man sich natürlich einiges an Boilerplate Code. Auf der anderen Seite muss man natürlich umdenken, was mir persönlich durch meinen Flutter Hintergrund relativ leicht fällt.

Related Links

Boehrsi.de Services - Modulares Kotlin Setup

Erstellt am event Uhr von account_circle Boehrsi in label Boehrsi
Boehrsi.de Services - Modulares Kotlin Setup Bild

Über die Git Struktur meiner Dienste schrieb ich bereits, heute geht es etwas tiefer in die technischen Interna und die Ideen dahinter. Wie erwähnt nutze ich einen Core und selbiger erhält eine beliebige Anzahl an Implementierungen. Dies kombiniert ergibt dann einen Service. Doch wie habe ich dies umgesetzt, wie erfolgt im Code die eigentliche Verbindung zwischen Core und Implementierungen und wie arbeitet man wirklich mit diesem simplen Modularisierungskonzept?
Wie bereits mehrfach erwähnt nutze ich den folgenden Ansatz für kleinere Projekte, an welchen ich meist alleine arbeite. Für mittlere Projekte, mit mehreren Entwicklern, könnte man den Ansatz mit simplem Scripting auch nutzbar machen, für größere Teams würde ich selbigen aber nicht empfehlen. Doch nun zum technischen.

Flutter in Production mit Tessa - Reit-Assistent

Erstellt am event Uhr von account_circle Boehrsi in label Development
Flutter in Production mit Tessa - Reit-Assistent Bild

Ich arbeite gerne mit Flutter, migrierte meine internen Java & Android Projekte und schreibe quasi täglich die eine oder andere Zeile Code. Doch ist Flutter auch was für den echten produktiven Einsatz? Diese Frage kann ich seit kurzem nun auch offiziell mit einem klar ja beantworten. Grund dafür ist meine erste Flutter App im Google Play Store (Tessa - Reit-Assistent open_in_new), welche durchaus umfangreich geworden ist und mit Dart und Flutter als Basis sehr gut funktioniert.
Der Kontext ist mit einer Companion App für Pferdebesitzer eher außerhalb meiner Kernkompetenzen, aber genau dies zeigt mir noch mehr das man mit Flutter Apps entwickeln kann, die den eigenen Wünschen oder den Wünschen eines Auftraggebers entsprechen. Grund für das Thema der App ist meine Frau, welche mit dem Reiten ein Hobby gefunden hat, welches durchaus komplex sein kann.

Related Links

Boehrsi.de Services - Modulare Code-Struktur mit Git

Erstellt am event Uhr von account_circle Boehrsi in label Boehrsi
Boehrsi.de Services - Modulare Code-Struktur mit Git Bild

Um sowohl ein hohes Maß an Wiederverwendbarkeit, wie auch ein niedriges Level an Komplexität zu erreichen, habe ich mir für meine Boehrsi.de Services eine Kleinigkeit überlegt. Meinen Ansatz zur flexiblen Entwicklung ohne unnötigen Overhead möchte ich im Folgenden mit euch teilen. Dabei geht es um die Datei- und Git-Struktur, denn auf den Code Aufbau werde ich in einem gesonderten Beitrag eingehen.
Wie bereits erwähnt gibt es viele Wege und das Spektrum ist sehr breit, wenn es darum geht ein Setup für Projekte mit mehreren Modulen, bzw. einem gewissen Level an Flexibilität zu erreichen. Um einordnen zu können wo mein Konzept hilfreich sein könnte und wo es an seine Grenzen stößt, gibt es im folgenden meine Anforderungen und die Beschreibung meines eigentlichen Ziels.

Boehrsi.de Services - Ideen und die Basis-Architektur

Erstellt am event Uhr von account_circle Boehrsi in label Boehrsi
Boehrsi.de Services - Ideen und die Basis-Architektur Bild

Nachdem ich bereits ein paar Worte darüber verloren habe, warum ich meine Services selbstgeschrieben habe, geht es heute mit den Anforderungen und der generellen Architektur weiter. Als ich vor zwei Jahren meine Java Services schrieb, war das Thema Microservices natürlich auch in meinem Kopf sehr aktiv. Das Resultat damals waren zwei komplett unabhängige Services, für die Suche und die Kommentare. Alles unabhängig, was natürlich seine Vorteile hat, aber eben auch Nachteile.
Die Nachteile wollte ich mit meinen neuen Diensten eliminieren, denn wenn man schon erneut auf der grünen Wiese startet, soll das Ganze natürlich auch ordentliche Verbesserungen bringen. Insgesamt überlegte ich mir die folgenden Anforderungen, welche auf meinen Erfahrungen mit meinen bis dato aktiven Services beruhen.

Boehrsi.de Services - Warum selber entwickeln?

Erstellt am event Uhr von account_circle Boehrsi in label Boehrsi
Boehrsi.de Services - Warum selber entwickeln? Bild

Ich habe schon oft über die Services, welche die Such- und Kommentarfunktion hier im Blog zur Verfügung stellen, gesprochen. Das ich selbige selbst entwickelt habe wurde auch schon oft breitgetreten, aber auf die Interna bin ich bis dato noch nicht eingegangen.
Dieser Beitrag macht nun den Anfang und ist der Start für eine neue News-Sammlung. Heutiges Thema soll die Frage sein, warum ich die genannten Services selber entwickelt habe und nicht einfach vorhandene Lösungen genutzt habe. Im allgemeinen lässt sich die Frage recht einfach beantworten, denn ich bin ein Softwareentwickler. Entsprechend baue ich meine Software falls selbiges sinnvoll ist, gerne selbst. Doch warum hatte ich in diesem Fall das Gefühl es wäre sinnvoll?

OnUpgrade - Mein erstes Dart / Flutter Package

Erstellt am event Uhr von account_circle Boehrsi in label Development
OnUpgrade - Mein erstes Dart / Flutter Package Bild

Während es für fast alles ein Plugin / Package gibt im Dart / Flutter Kontext, existieren natürlich trotzdem die kleinen Ausnahmen die einem fehlen. Für diese Dinge schreibt man dann selber Code, verwendet ihn in der nächsten App wieder und entscheidet sich dann vielleicht eine Library daraus zu machen.
Selbiges tat ich vor kurzem und in diesem Zuge habe ich mein erstes Dart / Flutter Package veröffentlicht. OnUpgrade open_in_new soll dem Entwickler helfen eventuell nötige Migrationen bei App-Upgrades durchzuführen oder den Nutzer über neue Funktionen zu informieren. Das Package stellt dabei die Logik zum Speichern, Vergleichen und Auswerten der zuletzt installierten und aktuell genutzten App-Version zur Verfügung. Was im Falle eines Updates ausgeführt wird, wie ein eventueller Dialog aussieht oder wie der generelle weitere Ablauf ist, entscheidet der Entwickler.

Related Links

I'm a coder - Die Workaround-Hölle

Erstellt am event Uhr von account_circle Boehrsi in label Boehrsi
I'm a coder - Die Workaround-Hölle Bild

Eigentlich möchte man defensiv programmieren und entsprechend dem Nutzer möglichst viele Fehler vom Leib halten, das macht auch Sinn. Doch Workarounds und Fallbacks über und über einzusetzen, sodass man irgendwann eher Probleme einbaut als sie zu verhindern, ist meiner Meinung nach schlimmer als ein ordentlich kommunizierter Fehler. Als Beispiel würde ich hier ein Auto nehmen. Es hat Benzin im Tank und falls selbiger bald leer ist fährt man zur Tankstelle. Sollte diese geschlossen sein, macht es Sinn zur Sicherheit einen Kanister mit Benzin auf Reserve zu haben. Was aber eher wenig Sinn macht, ist alle zufällig herumstehenden Kanister des Nachbarn in den Tank zu schütten und zu hoffen es war Benzin dabei. Mit diesem Vorgehen hat man vielleicht in wenigen Fällen Glück, meist ist es aber eher eine wenig zielführende Idee.

format_list_numbered  Seite 1 Nächste navigate_next