Boehrsi.de - IT und Gaming Blog

I'm a coder - Ein Update schadet nicht, oder?

Erstellt am event 08.04.2020 - 20:30 Uhr von account_circle Boehrsi in label Boehrsi
I'm a coder - Ein Update schadet nicht, oder? Bild

Lasst uns doch kurz noch das Framework / die Library aktualisieren. Ein Satz den sicherlich der eine oder andere Softwareentwickler schon häufiger von sich gegeben hat. Vermutlich auch kurz vor einem Release, selbst wenn man eigentlich weiß, dass das vielleicht riskant ist. Aber man testet ja, überprüft nochmal die bekannten Flows und eigentlich sieht ja alles ganz gut aus oder?
Nein, einfach nur nein. Auch wenn es vielleicht von Zeit zu Zeit funktioniert, vor einem Release machen wir sowas einfach nicht. Egal ob es ein Update auf die nächste IDE Version ist, eine aktualisierte Library oder gar eine frische Framework Version, am Ende gibt es immer etwas was man nicht überprüft hat.
Erst heute habe ich diese Lehre wieder gezogen. Denn ich arbeite seit langem mit der aktuellen Beta Version des Flutter Frameworks, um einige Funktionen bereits testen zu können. Nun ergab sich das für ein Projekt, welches eigentlich auf dem Flutter Stable-Branch lebt, eben dieser Beta-Branch ein Problem löst. Da ich schon lange auf selbigem unterwegs bin, entschied ich - wenn auch mit einem mulmigen Gefühl - wir versuchen es mit dem Beta-Branch. Alles in allem habe ich ja schon viel getestet und was soll schon passieren?

Weiterlesen…

I'm a coder - Fail Fast Fail Often vs. Bug freie User Experience

Erstellt am event 28.03.2020 - 09:00 Uhr von account_circle Boehrsi in label Boehrsi
I'm a coder - Fail Fast Fail Often vs. Bug freie User Experience Bild

Es ist schon wieder etwas her das ich eine News in diesem Bereich geschrieben habe, doch nun wird’s mal wieder Zeit. Denn aktuell grübele ich bezüglich einem Thema, bei welchem ich nicht zu einem optimalen Entschluss komme. Es geht um die Menge der zu verwendenden Guards bzw. Sicherheitsmechanismen, um eine fehlerfreie User Experience zu gewährleisten.
Generell sind wir Softwarenentwickler uns bestimmt einig, dass das User Interface und alles was der Nutzer darin zu sehen bekommt, eher robust sein sollte und entsprechend Fehler gut abfangen muss. Doch wie weit soll man gehen, wenn es darum geht die UI und Logik gegen fehlerhafte APIs zu schützen, die man selber mehr oder weniger unter Kontrolle hat. Ich rede hier von Schnittstellen die auf dem Gerät in Form von Bibliotheken vorhanden sind, nicht von externen APIs, die z.B. auf entfernten Servern liegen (letztere sollten definitiv umfangreich und effektiv abgesichert werdern). Denn auch selbstverwaltete Bibliotheken, welche vielleicht von einem Kollegen der aktuell keine Zeit hat gepflegt werden, können hin und wieder Fehler beinhalten.
Ich bin ein Fan von Fail Fast & Fail Often, denn meiner Meinung nach gehen ansonsten zu viele Fehler unter. Doch wie geht man mit mehr oder weniger bekannten Issues um, welche in darunterliegenden Ebenen vorhanden sind, die teilweise zum eigenen Code gehören.
Baut man Guards ein - vielleicht auch nur temporär - können selbige in Vergessenheit geraten und später das Debugging massiv erschweren. Lässt man die Fehler zu, kann es zu sichtbaren UI Fehlern kommen, was natürlich zu vermeiden ist. Ich persönlich sehe hier eine Zwickmühle, welche ich zwar nicht perfekt, aber für mich für den Moment passend lösen konnte.

Weiterlesen…

I'm a coder - Minimalismus für die Website Erstellung

Erstellt am event 25.02.2020 - 13:00 Uhr von account_circle Boehrsi in label Boehrsi
I'm a coder - Minimalismus für die Website Erstellung Bild

In den letzten Tagen habe ich mich mal wieder mit der Erstellung von Webseiten beschäftigt und dort vor allem mit der Gestaltung. In diesem Bereich habe ich in der letzten Zeit wenig getan, denn mein Blog ist aktuell in einem guten Zustand und ich habe mit Flutter und Kotlin verschiedene andere Projekte. Allerdings wollte ich mal ausprobieren mit wieviel HTML und CSS + gegebenenfalls ein wenig JavaScript ich eine ordentliche Grundstruktur und einige wiederverwendbare Komponenten erstellen kann.
Grund dafür ist unter anderem dieser Beitrag meinerseits, in welchem ich mich etwas darüber aufrege das in der heutigen Zeit, welche uns das Flex Layout open_in_new bietet und diverse andere schöne HTML5 + CSS3 Komponenten, alles mit teils extrem umfangreichen UI-Libraries gelöst werden muss. Dies fällt nicht nur in die Kategorie mit Kanonen auf Spatzen schießen, auch die Ladezeit und die Individualität einer Webseite kann dadurch leiden.
Ich will hier nicht gegen Bootstrap open_in_new und ähnliche Libraries wettern. Sie sind meistens extrem gut und bieten für viele Einsatzzwecke genau was man braucht, aber die kleine Firmenseite von Nebenan muss vielleicht nicht unbedingt damit gebaut werden. Hier sollte gelten, dass man nicht immer den einfachsten Weg für den Entwickler nimmt, sondern vielleicht den optimalen allgemeinen Weg. Etwas mehr Aufwand für den Entwickler, dafür mehr Kontrolle, mehr Individualität und auch mehr Flexibilität z.B. bei Kundenwünschen.

Weiterlesen…

I'm a coder - Review rejected

Erstellt am event 20.12.2019 - 21:00 Uhr von account_circle Boehrsi in label Boehrsi
I'm a coder - Review rejected Bild

Es wird mal wieder Zeit für eine I’m a coder News und das heutige Thema werden Reviews sein. Selbige sind extrem wichtig für die Qualität einer Software, welche mitunter maßgeblich durch die eigentliche Codequalität definiert wird. Denn vor allem über längere Zeit ist Software mit guter Codequalität besser wartbar, erweiterbar und erlaubt einen einfacheren Einstieg für neue Entwickler. Reviews sind wichtig, doch auch schwierig und zeitaufwendig. Entsprechend gehen sie manchmal unter, werden nur halbherzig gemacht oder sind zu streng bzw. zu nachsichtig. Hier einen guten Mittelweg zu finden ist schwer, aber extrem wichtig. Nachdem man die eigentlichen Änderungen verstanden und die Funktionalität überprüft hat, folgt der meiner Meinung nach schwerste Teil. Denn nun muss man die Validierung bezüglich der Einhaltung von Coding Guidelines und Naming Vorgaben durchführen.

Weiterlesen…

I'm a coder - Code-Klarheit vs. Boilerplate Minimierung

Erstellt am event 01.12.2019 - 14:00 Uhr von account_circle Boehrsi in label Boehrsi
I'm a coder - Code-Klarheit vs. Boilerplate Minimierung Bild

In der letzten Zeit Wechsel ich oft zwischen Programmiersprachen, Projekten und Frameworks hin und her. Grund dafür ist unter anderem Flutter open_in_new als neues Framework für professionelle und private Projekte, aber auch Kotlin open_in_new als moderner Ersatz für Java. Nun hat man aber auch aktive Projekte (auch wenn ich mein Projekt FileSize gerade beendet habe) und entsprechend puren Java Code oder Android Projekte mit Java Basis. Bedenkt man nun noch Libraries die z.B. Annotation Processing betreiben, also z.B. Lombok open_in_new oder ObjectBox open_in_new, so gibt es einiges zu beachten.
Daraus ergibt sich häufiges umdenken und öfters auch Fehler, denn gerade wenn man in ein laufendes, aber nicht so aktiv gepflegtes Projekt schaut, welches viele spezielle Dinge benutzt, optimiert man gerne mal Code aus Unwissenheit weg. So passierte es bei mir, dass ich Default-Konstruktoren entfernte, da sie nicht genutzt wurden, ObjectBox diese aber für den generierten Code und die Initialisierung der Objekte in selbigem brauch. Entsprechend werde ich für mich versuchen für nicht implizit klare Dinge wieder mehr auf Kommentare zu setzen. Normalerweise schreibe ich quasi keine Kommentare und sorge dafür dass der Code für sich selbst spricht, doch nutzt man mehrere komplexe Libraries die Boilerplate Code entfernen, kann häufig die Klarheit des Codes leiden.
In einem solchen Fall hat man also einen Vorteil durch weniger Code, aber auch einen Nachteil durch weniger klare Codestrukturen. Kommentare können hier hilfreich sein und ohne viele unnötige Zeilen Code diese Wissenslücke füllen. Mich würde interessieren, wie ihr derartige Dinge löst. Verzichtet ihr generell auf Tools, die zu viel Codestruktur abstrahieren bzw. verbergen oder nutzt ihr andere Ansätze, bzw. schreibt ihr lieber mehr Boilerplate Code, solange selbiger dann besser verständlich ist?

I'm a coder - Ungesunde Abhängigkeit von Abhängigkeiten

Erstellt am event 15.11.2019 - 09:00 Uhr von account_circle Boehrsi in label Boehrsi
I'm a coder - Ungesunde Abhängigkeit von Abhängigkeiten Bild

Für wiederkehrende Leser dürfte mein Android-Entwickler-Hintergrund mittlerweile bekannt sein, für alle anderen die Information: Ich entwickle unter anderem Android Apps. In diesem Bereich gibt es extrem viele gute Libraries, die einem Aufgaben in allen möglichen Bereichen abnehmen, gut gepflegt sind und extrem viel Zeit sparen.
Die externen Abhängigkeiten sollten dann aber natürlich auch verwaltet, geprüft und aktualisiert werden. Libraries die nicht mehr unterstützt werden, sollten ausgetauscht werden und auch generell sollte man immer ein Auge auf Code haben, welchen man in seine Projekte integriert. Ein gewisser Zeitaufwand ist auf lange Sicht also auch hier zu erwarten.
In diesem Kontext bin ich aber durchaus positiv eingestellt, wenn es um externe Abhängigkeiten geht. Doch mittlerweile wirkt es so, als könnte man vieles zu einfach mit Libraries lösen, denn für teilweise die kleinsten Aufgaben werden komplette Library-Konstrukte integriert und nie wieder mit nur einem Auge betrachtet. Dies gilt für komplexe Dinge, wo Libraries meiner Meinung nach Sinn machen, aber auch für die trivialsten Dinge. Denn eine Abhängigkeit hinzufügen und einfach eine Methode aufzurufen, ist halt immer noch leichter als 5-6 durchdachte Zeilen selbst zu schreiben.
Viele Libraries können hilfreich sein, aber die Selbstverständlichkeit mit welcher, unabhängig von der genutzten Plattform, Programmiersprache oder der Build-Umgebung, Abhängigkeiten überall integriert werden, lässt mich teilweise mit dem Kopf schütteln. Der finale Auslöser dieses Beitrags ist meine Web-Entwicklung mit dem Static-Site-Generator Hugo open_in_new und die damit verbundene Idee warum ich Hugo wählte. Ich arbeite mit Hugo, weil es schnell und einfach funktioniert und dabei eine einzelne ausführbare und aktualisierbare Datei ist. Ohne Abhängigkeiten, ohne 5-Stufigen Build-Prozess, Downloads, Setups, Updates und was man sonst noch alles aufführen könnte.
Ich habe mir ein durchaus komplexes Theme gebaut, kann aber verstehen wenn man bereits fertige nutzen möchte. Was auf meinem Server, für eine andere - nicht von mir entwickelte Website - gerade getan wird. Die Hugo-Webseiten auf dem Server werden mit einem kleinen automatisierten Script, was ich geschrieben habe, gebaut und ich war verwirrt als mir vom Ersteller der Seite mitgeteilt wurde, dass seine Seite nicht erfolgreich erstellt wird.

Weiterlesen…

I'm a coder - Regelmäßige Software-Wartungen

Erstellt am event 31.10.2019 - 14:30 Uhr von account_circle Boehrsi in label Boehrsi
I'm a coder - Regelmäßige Software-Wartungen Bild

Während ich aktuell mal wieder in der Android-Welt unterwegs bin (leider noch mit Java, aber mein nächstes Projekt wird Kotlin) fällt mir mal wieder auf wie wichtig es ist bei Plattformen, Frameworks und auch Programmiersprachen am Ball zu bleiben. Seit dem letzten Update meines aktuellen Projekts ist einige Zeit vergangen und es gibt einfach unfassbar viel nachzuholen. Auf der einen Seite ist dies schön, denn ich habe nun neue Möglichkeiten, auf der anderen steigt die Menge an Änderungen langsam in unangenehme Bereiche (Stichwort: Regressions).

Weiterlesen…

I'm a coder - Die Ein-Sterne-Bewertungs-Fraktion

Erstellt am event 19.10.2019 - 17:00 Uhr von account_circle Boehrsi in label Boehrsi
I'm a coder - Die Ein-Sterne-Bewertungs-Fraktion Bild

Das Internet bietet viele Möglichkeiten und vor allem als Softwareentwickler ist es die Basis die eigene Software zu verteilen und eine breitere Masse zu erreichen. Dies ist sehr positiv, aber es gibt auch diverse Schattenseiten in diesem konkreten Bereich, die ich heute einfach mal ansprechen möchte.
Mir geht es vor allem um die Art und Weise wie mit Software und Apps umgegangen wird, wenn mal etwas nicht funktioniert. Dabei sollte man vor allem im Hinterkopf behalten, dass man die meiste Software in diesem Bereich gratis bekommt und genau auf diese möchte ich speziell auch eingehen. Hier bekommen Nutzer also kostenlos Software, die ihnen hilft, sie unterhält oder was auch immer für einen Zweck hat und der jeweilige Nutzer entdeckt ein Problem.

Weiterlesen…

I'm a coder - Vergangenheits-Daniel nervt

Erstellt am event 14.10.2019 - 19:00 Uhr von account_circle Boehrsi in label Boehrsi
I'm a coder - Vergangenheits-Daniel nervt Bild

Heute gibt es mal wieder neue Geschichten aus der Welt der Softwareentwicklung. Denn am Wochenende war ich mal wieder fleißig und wollte Googles Bitte nach einem Update meiner Android App FileSize nachkommen. Selbige ist aktuell meine einzige gelistete PlayStore App open_in_new und es wurde mal wieder Zeit die Target-Android-Version anzupassen.
Im Rahmen dieser Aktualisierung dachte ich es wäre eine gute Idee Abhängigkeiten zu aktualisieren, Gradle open_in_new einem Update zu unterziehen und diverse kleinere Aufräumarbeiten durchzuführen. Außerdem wollte ich einen seit langem existierenden Bug beheben und ein neues Feature einbauen. Hier und dort gab es bei diesem Plan natürlich Probleme, doch das eigentliche Problem, welches auch Thema dieses Beitrags ist, ist Vergangenheits-Daniel und im Ernst der nervt mich wirklich.

Weiterlesen…

I'm a coder - Lessons Learned anwenden

Erstellt am event 24.08.2019 - 14:30 Uhr von account_circle Boehrsi in label Boehrsi
I'm a coder - Lessons Learned anwenden Bild

Während der Software Entwicklung lernt man viel, teils in Bezug auf neue Programmiersprachen und ähnliches und teils allgemeine Dinge. Zu letzteren zähle ich so etwas wie: “Keine IDE Updates kurz vor einem Release", nicht “einfach so Libraries aktualisieren” und “das sollte einfach so funktionieren” ist meistens nicht wahr. Die Liste geht noch weiter, quasi unendlich lang, doch worum es mir geht ist diese Lesson Learned auch anzuwenden.
Wir wissen diese Dinge, doch wir vergessen, wir sind im Stress und missachten eigentlich klare Abläufe und dadurch machen wir Fehler. Ich selber habe erst vor kurzem auf meinem privaten System ein Update von IntelliJ Idea 18.1 auf 19.2 gemacht, ohne auch nur eine Sekunde über aktuelle Projekte nachzudenken. Dies wurde natürlich prompt damit quittiert, dass das Projekt nicht mehr baute und ich erstmal das Projekt und die IDE debuggen musste, statt ein neues Feature zu entwickeln.
Um Lessons Learned anwenden zu können muss man sich erst einmal an sie erinnern, somit hilft es im ersten Schritt sie aufzuschreiben. Egal ob in einem Wiki oder auf einem Post-It am Monitor, man sollte den für sich persönlich richtigen Platz finden. Denn hier geht es vor allem um Sichtbarkeit im Alltag. Im nächsten Schritt versuche ich aktuell meine Aufzeichnungen zu bestimmten Kontexten von Zeit zu Zeit erneut zu betrachten, denn was hilft die beste Dokumentation, wenn man sie nicht liest. Um die entsprechenden Dinge dann final anwenden zu können bleibt eigentlich nur der gesunde Menschenverstand. Nicht überstürzt handeln, Backups erstellen, erst prüfen ob z.B. mit Updates Probleme bekannt sind und ähnliches kann helfen Probleme zu vermeiden. Auch Automatisierung in Form von Skripten oder ähnlichem kann hier und da vor Fehlern schützen. Generell fasse ich für mich die Abläufe in Document (z.B. Wiki), Repeat (regelmäßig erneut lesen), Apply (denken und anschließend handeln) und Protect (Skripte, Berechtigungen restriktiv setzen) zusammen.
Mich würden eure Lesson Learned im Bereich der IT interessieren und ich würde mich freuen einige in den Kommentaren finden zu können, denn wir alle lernen nicht aus.

format_list_numbered  Seite 1 Nächste navigate_next