Flutter Architektur Dokumentation

Ein Cross-Platform-Setup für Anwendungen zu nutzen bedeutet immer abzuwägen, wie sinnvoll eine solche Lösung im Vergleich zur nativen Implementierungen ist. Dafür ist es natürlich gut grundlegende Abläufe und Strukturen der jeweiligen Cross-Platform-Lösung zu kennen.
Für Flutter gibt es in diesem Bereich ein sehr umfangreiches Dokument. Dort könnt ihr mehr zu den verschiedenen Architektur-Layern erfahren und so z.B. lernen wie die Einbettung der Engine und des Frameworks selbst auf den eigentlichen Hostsystemen funktioniert.
Zusätzlich gibt es Informationen zum Reactive User interface Konzept, welches Flutter verfolgt. In diesem Kontext gibt es unter anderem mehr zum Thema State Management und wie der State eines Widgets eigentlich funktioniert.
Ebenso kann man sich bezüglich den Widgets selbst und dem Rendering- und Layouting-Flow informieren. Hier gibt es z.B. Erklärungen zum Ablauf der eigentlichen UI Erstellung in Bezug auf die Grafikkarte und wie das ganze System generell funktioniert.
Ein weiterer Baustein ist die Kommunikation mit dem Hostsystem. Hier gibt es mit Platform Channels und das Foreign Function Interface (FFI) verschiedene Wege, um mit verschiedenen Komponenten eines Systems zu kommunizieren. Dieser Bereich ist vor allem wichtig, wenn ihr komplexere Apps mit speziellen Funktionen implementieren wollt, denn in diesem Bereich seid ihr häufig auf APIs o.ä. angewiesen, die nur auf dem Hostsystem direkt genutzt werden können.
Ich habe das Dokument zum Teil überflogen, bestimmte Teile genauer gelesen und einiges sehr tiefgehend angeschaut, je nach aktuellem Wissensbedürfnis. Solltet ihr im Flutter Bereich aktiv sein, kann ein grundlegender Blick in diese Dokumentation denke ich nicht schaden.
Iconfinder - Finde deine Icons

Für verschiedene Projekte die ich aktuell plane oder bereits umsetze benötige ich Icons. Meist bin ich mit den Material-Icons gut bedient, denn diese sehen gut aus und bieten eine ordentliche Auswahl. Doch was wenn ich mal andere Icons benötige?
Ich bin durch Zufall über Iconfinder gestolpert. Eine Website die Millionen von Icons anbietet, teilweise kostenlos und teilweise kostenpflichtig. Die Seite ist sehr übersichtlich gemacht, man sieht sofort was etwas kostet und vor allem welche Dinge durch die Lizenzen erlaubt sind. Dabei wir sowohl für kostenlose Inhalte (Creative Commons), wie auch für Bezahlinhalte (eigene open_in_new, aber sehr klare Lizenz) eindeutig klargestellt was möglich ist und das mit wenigen Worten.
Die Auswahl ist wie erwähnt groß, diverse Filter sind vorhanden, ebenso wie eine Suchfunktion. Grundlegende Bearbeitungsaufgaben können bereits auf der Platform erledigt werden, denn ein Online Icon Editor steht ebenfalls zur Verfügung. Sofern man Interesse an kostenpflichten Inhalten hat, kann man einzeln zuschlagen oder bei häufigem Bedarf ein Abo abschließen. Alle kostenpflichtigen Icons werden unter anderem in Vector Formaten geliefert.
Falls ihr übrigens selber Icons erstellen und vertreiben wollt, könnte auch für euch die Platform sehr interessant sein. Ich habe bis dato noch nicht zugeschlagen, prüfe aber gerade was ich konkret brauche und werden dann wohl mal shoppen gehen. In diesem Kontext übrigens noch ein Hinweis. In Zeiten des Internets erwartet fast jeder alles gratis und selbst 5 Dollar für ein gutes Icon-Pack sind plötzlich zu viel. Das ist meiner Meinung nach ein extrem falscher Gedankengang, denn an diesen Icons haben Designer gearbeitet und einiges an Zeit investiert. Sofern ihr also nicht nur ein paar Icons zum Spaß braucht, sondern damit erwartet etwas zu verdienen, scheut euch nicht den Leuten die zu eurem Erfolg beitragen den definierten Betrag zu zahlen.
Flutter Version 1.20 erschienen

Gestern erschien eine neue Flutter Version und selbige bringt einige durchaus interessante Verbesserungen mit sich. Unter der Haube befindet sich nun Dart 2.9, wodurch unter anderem massive Verbesserungen beim UTF-8 Decoding gegeben sind. Diverse weitere Verbesserungen wurden ebenfalls in dieser neuen Dart Version vorgenommen, Null-Safety ist aber leider noch nicht verfügbar.
Im Performance Bereich können Animationen beim ersten Start der App nun flüssiger dargestellt werden, indem die Skia Shader Language Warm Up Funktion open_in_new genutzt wird. Die Größe eurer Apps wurde ebenfalls verringert, indem nicht genutzte Icons automatisch aus der App entfernt werden.
Für die Desktops wurde das Handling der Maus verbessert, sodass z.B. angepasste Cursor beim Hover über einem Textfeld integriert werden konnten. Auf den mobilen Plattformen wird nun Autofill unterstützt. Beide genannten Punkte waren sehr oft gewünschte Funktion und dürften bei der Community auf Anklang stoßen.
Sichtbare Änderungen sind vor allem die neuen und aktualisierten Widgets (InteractiveViewer, MaterialSlider, RangeSlider, TimePicker und DatePicker). Zusätzlich wurde der AboutDialog überarbeitet und ist nun responsive.
Für die Entwickler gibt es darüber hinaus noch Anpassungen im Bereich der pubspec.yaml Datei, vor allem wenn ihr Plugins entwickelt. Hier ist nun das neue Definitionsformat open_in_new. Es gibt außerdem eine Preview der neuen Dart DevTools in Visual Studio Code, verbessertes Network Tracking / Debugging, aktualisierte Importpfade beim Umbenennen von Dateien (Visual Studio Code) und viele weitere Änderungen.
Alle Änderungen, eventuelle Breaking Changes, sowie weiterführende Informationen könnt ihr den Related Links entnehmen. Dort findet ihr auch den Download. Wer bereits auf 1.20 ist sollte vielleicht noch ein weiteres Mal flutter upgrade
bemühen, denn mit Version 1.20.1 ist bereits ein Bugfix Update verfügbar.
Rainbow Six Siege - Community Video

Es ist lange her das ich etwas auf meinem Youtube Kanal hochgeladen habe, aber es wurde mal wieder Zeit. Denn ich zocke bekanntlich mit einigen Freunden diverse Spiele und darunter auch Rainbow Six Siege. Hier sind wir als Team schon einige Jahre dabei, wenn auch nur Just for Fun.
In diesem Rahmen habe ich ein kleines Community Video erstellt, welches nun auf Youtube verfügbar ist. Ihr findet es direkt in dieser News, im unteren Teil oder aber über die Related Links. Es ist kein extrem umfangreiches Editing vorgenommen worden, allerdings wurde schon etwas Aufwand in Timing und Schnitt gesteckt, insofern hoffe ich es gefällt.
I'm a coder - Das erste Mal Team-Lead

Über die letzten eineinhalb Jahre habe ich mein erstes professionelles Projekt geleitet und heute möchte ein kleines Fazit ziehen. Vielleicht ist für den einen oder anderen ein hilfreicher Tipp dabei oder vielleicht habt ihr Tipps, wie man in diesem Bereich noch besser werden kann. Über Kommentare freue ich mich wie gewohnt sehr.
Ich bin gerne ein Entwickler, soll heißen ich schreibe wirklich gerne Code, doch auf der anderen Seite koordiniere und plane ich tatsächlich auch recht gerne. Letztes ist glaub ich extrem wichtig wenn es darum geht ein Team und ein Projekt zu leiten. Denn sofern man keine Ambitionen in diesen Bereichen hat, sollte man lieber bei der reinen Entwicklung bleiben. Grund dafür ist die massive Verschiebung der Aufgaben und die entsprechend veränderte Zeitverteilung. Sofern einem dann der Verwaltungsteil gar nicht gefällt, wird man vermutlich schnell unzufrieden sein.
Wie erwähnt finde ich aber durchaus Gefallen daran und war froh mit dem genannten Team arbeiten zu dürfen. In Retrospektive denke ich damit steht und fällt generell alles, also ob das Team allgemein und menschlich funktioniert. Erst darauf kann man dann auf professioneller Ebene etwas aufbauen. Wir hatten das Glück das es passte und mit einer recht guten Wissensverteilung (2x Android, 2x iOS, 1x Testing) konnten wir eine Flutter App entwickeln, welche mit genügend Platform-Background versorgt wurde.
GitHub Design Previews

Wer rastet der rostet, das wissen wir alle und so sieht es wohl auch GitHub. Denn aktuell arbeitet man an neuen Designideen für verschiedene Bereiche der Website. Diese wurden mir vor wenigen Tagen das erste Mal angeboten und seitdem nutze ich sie. Die Feature Previews beziehen sich sowohl auf das globale User Interface, wie auch die spezifische Repository Ansicht.
I'm a coder - Projekte richtig starten

Ich schreibe seit ca. 15 Jahren Software und seit 5 Jahren ist es mein täglicher Vollzeitjob Programme zu entwickeln. In dieser Zeit fallen einem verschiedene Dinge auf und man lernt extrem viel. Vor kurzem wurde ich von einem Kollegen, der gerade den Sprung von der Uni ins Berufsleben vorbereitet, gefragt wie ich Projekte angehe und Entscheidungen in der Starphase treffe. Während ich meine Ansichten und Ideen mit ihm teilte dachte ich mir, dies könnte auch ein gutes Thema für den Blog sein und hier sind wir nun.
Meiner Meinung nach ist der Anfang eines Projekts, noch bevor man überhaupt über die Architektur nachdenkt, einer der wichtigsten Momente. Denn ich denke man sollte ein Projekt initial mit der richtigen Plattform, Technik und Sprache aufziehen. Hier gibt es natürlich Limitierungen bezüglich dem eigenen Wissen oder dem Wissen des Teams, aber man muss z.B. nicht einen Blog, einen Shop, einen Hausbootverleih und eine Dinosaurierzucht mit Wordpress bauen. Natürlich bietet es um drei Ecken die Möglichkeiten, aber ihr nehmt ja wahrscheinlich auch keine Rohrzange, um damit Nägel in die Wände zu kloppen.
Soll heißen, nur weil man etwas tun kann, heißt dies nicht dass es gut oder gar der beste Weg ist. Hier gilt auch über den Tellerrand zu schauen und vielleicht die Chance zu nutzen und etwas Neues lernen. Dabei ist es mir sehr wohl bewusst, dass dies gerade im professionellen Umfeld durchaus kompliziert und nicht immer machbar ist. Doch einige Minuten des Nachdenkens zu investieren und vielleicht Vorschläge für neue und passende Ansätze zu unterbreiten dürfte selten falsch sein.
Flutter App Development - Teil 6 - RSS Entries und mehr

Heute geht es weiter mit den eigentlichen Einträgen eines RSS Feeds. Die dazugehörigen Dateien befinden sich im lib/entry_list/ open_in_new Package und sind verglichen mit der lib/feed_list/ open_in_new Logik etwas einfacher zu handhaben. Dieser Beitrag ist der Abschluss meiner kleinen Tutorialreihe und den gesamten Source-Code findet ihr auf Github. Links zu den gennannten Dingen findet ihr in den Related Links. Mit diesen kurzen Worten der Einleitung möchte ich heute direkt mit dem User Interface starten.
I'm a coder - Probleme mit der Software-Blackbox

Im Rahmen der Software-Entwicklung nutzt man oft Libraries, Tooling und andere Dinge die man selbst nicht komplett durchdringt. Dies ist zu bestimmten Teilen auch in Ordnung und an der Tagesordnung, doch manchmal ist eine Software-Blackbox ein extremes Problem.
Doch definieren wir erst einmal Blackbox. Für mich ist eine Blackbox im Software-Bereich eine Komponente, die man selbst nicht durchdringt und die nicht mit akzeptablem Zeitaufwand, aus welchen Gründen auch immer, verstanden werden kann. Gründe sind hier, auch wenn es sich um Open Source Software handelt, andere Programmiersprachen, zu komplexe Konzepte, fehlende Dokumentation oder ähnliches. Closed Source Software ist natürlich per-se eine Blackbox.
Wann ist eine Blackbox aber nun ein Problem? Meiner Meinung nach wenn sie grundlegende Konzept abstrahiert oder zu essentielle Abläufe übernimmt und dem Entwickler dabei nicht klar ist was wann passiert und warum. Nimmt man z.B. das Build-Tool Gradle open_in_new, so hätte man vielleicht eine Blackbox vor Augen. Diese funktioniert allerdings sehr gut, es gibt eine sehr umfangreiche Dokumentation und auch weitere Ressourcen sind vorhanden. Hier muss man also Vorsicht walten lassen bei Updates und ähnlichem, falls man nicht durchdringt was dies bedeuten könnte. Doch durch vorhandene Dokumentation kann man sich entsprechend und mit akzeptablem Zeitaufwand schlau machen. Insofern würde ich persönlich nicht von einer Blackbox reden, wenn es um Gradle geht.
Hat man nun aber ein derartig wichtiges Tool (z.B. für die Build-Toolchain) oder eine Library die grundlegende Funktionen der eigenen Software übernimmt (z.B. Netzwerk-Interaktionen oder die Implementierung von Protokollen) und eine derartige Informationsquelle ist nicht gegeben, kann man sich in große Probleme manövrieren.
GitHub App - Meine Meinung

Ich bin täglich auf GitHub unterwegs und da ist es natürlich praktisch auch eine mobile Version für unterwegs zu haben. Die GitHub App gibt es schon etwas länger, aber ich wollte sie trotzdem einmal erwähnen.
Denn mit selbiger könnt ihr eure Issues, Pull Requests, Repositories und Organizations durchaus übersichtlich im Blick behalten. Vor allem der Punkt der Übersicht war mir wichtig, da ich in verschiedenen Repositories unterwegs bin und sowohl Code beisteuere, wie auch Issues verwalte und Code-Changes einem Review unterziehe.
Dabei bietet die Hauptansicht sowohl die allgemeine Navigation für die genannten Bereiche, wie auch Informationen zu euren letzten Aktionen. Weiterhin sind die Notifications und die Suche schnell und praktisch zu erreichen. Was mich persönlich allerdings mehr interessiert sind die eigentlichen Issue Seiten, wie Reviews aufgebaut sind und derartige Dinge. Denn hier wird es auf dem kleinen Screen kompliziert und komplex. Doch sowohl Issues, wie auch Code-Diffs werden übersichtlich angezeigt und sind tatsächlich auch auf dem Smartphone halbwegs gut nutzbar.
Generell erreicht man über die AppBar die Hauptfunktionen, während der eigentliche Content-Bereich alle spannenden Informationen bereithält. Damit man nun aber Kommentare und ähnliches leicht erreichen kann, gibt es eine weitere Interaktionskomponente am unteren Ende des Bildschirms. Hier könnt ihr schnell verschiedene kontextrelevante Aktionen durchführen.
Positiv für mich fällt weiterhin auf das ein Dark-Mode vorhanden ist. Ob man selbigen nutzt ist wie so vieles, Geschmackssache. Im Allgemeinen bin ich mit dem Funktionsumfang und dem Look and Feel zufrieden und freue mich auf weitere Updates. Aktuell benötige ich die App zwar eher selten, aber wenn man bald wieder mehr in der Welt da draußen unterwegs sein kann, bietet es sich natürlich an ein paar Reviews aus der Natur zu machen.