I'm a coder - KW 2

Neue Woche neue Themen, dieses Mal geht es darum wie wichtig es ist das vor der eigentlichen Implementierung alle Rahmenbedingungen und nötigen Komponenten geplant und definiert sind. Denn egal ob man privat etwas entwickelt oder professionell, merkt man mitten in die Implementierung das z.B. die Icons fehlen ist dies störend. Aus diesem Grund sollte man immer versuchen aus verschiedenen Perspektiven auf das zu entwickelnde zu blicken und entsprechend zu überlegen was alles involviert ist. Basierend darauf kann man dann zu einem Zeitpunkt X entscheiden ob alles nötige für die Aufgabe bereits vorhanden ist. Dabei ist es natürlich auch möglich einiges durch Platzhalter zu ersetzen, z.B. wenn es um Icons geht. Doch dies ist natürlich nur sehr beschränkt möglich wenn man z.B. mit einem Server bzw. einer API reden muss und diese Daten weiterverarbeiten will. Hier sind natürlich Mock-Daten eine Möglichkeit, aber nichts ist so gut wie reale Daten. Denn auch so etwas wie Mock-Daten muss erst einmal erstellt und an die Entwickler verteilt werden. Beachtet man die genannten Regeln nicht wird es im besten Fall etwas nervig für die Entwickler, im schlechtesten blockiert man die Entwicklung und verschwendet Ressourcen. Auch wenn letzteres natürlich wesentlich negativer ist als zuerst genanntes, man sollte beides vermeiden, denn ein frustrierter Entwickler ist wahrlich nichts was man möchte. Vor allem übrigens in kleinen privaten Projekten, wo niemand als Project Owner / Manager o.ä. Pläne macht, geht so etwas leicht unter. Auch hier sollte man also lieber ein paar Stunden mehr Zeit in Überlegungen und Planung stecken, als am Ende mit einem halbfertigen Produkt dazustehen, weil viele Kleinteile im großen Konstrukt einfach fehlen.
I'm a coder - KW 1

Nachdem ich bereits News-Reihen wie die Weekly Coding Question hatte, welche leider etwas eingeschlafen ist, möchte ich etwas Neues und ebenfalls wöchentlich Erscheinendes ins Leben rufen. Es geht darum das ich programmiere, sowohl privat, wie auch für die Arbeit und dies möchte ich mit euch teilen. Also zumindest die relevanten Dinge möchte ich ansprechen, z.B. Dinge die ich gelernt habe oder die man vielleicht anders machen sollte. Somit könnt ihr vielleicht aus meinen Fehlern lernen, neues mitbekommen und mir vielleicht sogar das eine oder andere Mal eure Sicht der Dinge schildern. Diese Woche beginne ich mit einem privaten Projekt, welches im Großen und Ganzen mit Terminplanung zu tun hat. Ich habe bereits vor längerer Zeit darüber geschrieben, doch dann schlief die Entwicklung leider etwas ein. Genau darum soll es auch gehen, das Arbeiten an privaten Projekten und wie schwer es ist sich entsprechend zu motivieren und die Zeit zu finden.
Weekly Coding Question - Warum funktioniert das nicht

Warum funktioniert das nicht ist eine Frage die sich sicherlich jeder Softwareentwickler schon einmal gestellt hat. Die Antwort darauf kann diverse Gründe haben, angefangen von der eigenen Dummheit, über Fehler von anderen, falsche Annahmen, bis hin zu Bugs in der Plattform auf der man implementiert. Umso tiefer man sich in den Debugging-Jungle begibt, umso abgedrehter werden häufig die Annahmen warum etwas nicht geht und dementsprechend werden auch die Lösungsversuche “spezieller”. Für diesen Bereich würde ich mir gerne eine Funktion in meinen IDEs wünschen, die mich einfach mal kurz mit einem Popup oder ähnlichem belohnt und mich fragt ob mein aktueller Code mein Ernst sei. Denn erst gestern hatte ich auf der Arbeit das Problem, dass ich ich immer tiefer in den Hasenbau gekrochen bin, um das kleine komplexe Problem zu finden, aber die Lösung war es einfach am Hasenbau vorbei zu gehen. Dementsprechend mein Rat, einfach mal eine Pause machen und nicht nur körperlich, sondern auch gedanklich kurz Abstand nehmen und noch einmal alles Revue passieren lassen. Häufig sieht man nämlich den Code vor lauter Buchstaben nicht und blockiert sich selbst.
Eclipse Neon - Meine Einsatzbereiche - Remote Webentwicklung

Vor einiger Zeit berichtete ich bereits, dass ich mein Eclipse aktualisieren will. Von der letzten Mars Version, war es mein Ziel ein stabiles neues Neon aufzusetzen und dies habe ich nun teilweise erledigt. Neben meiner vorherigen Nutzung von Eclipse, habe ich teilweise auf IntelliJ Idea gewechselt, dazu werde ich aber noch einen gesonderten Beitrag veröffentlichen. Heute geht es um Neon und ich möchte mit meinem ersten Einsatzbereich beginnen. Denn meine Website ist in PHP geschrieben und ich möchte diese gerne Remote bearbeiten können, direkt auf dem Server, aber mit den Vorteilen einer IDE. In diesem Bereich war ein Wechsel auf IntelliJ nicht möglich, zumindest nicht in dem Umfang und ohne Geld zu bezahlen. Letzteres kommt für mich nicht in Frage, da meine Website keinerlei Gewinn abwirft. Ich setze unter Eclipse auf den Remote System Explorer aus dem Target Management Project open_in_new. Diesen installierte ich einfach über die normalen Neon Paketquellen (http://download.eclipse.org/releases/neon open_in_new), ihr findet ihn unter General Purpose Tools. Meine alten Einstellungen funktionierten mit dem aktualisierten Workspace ohne Probleme. Allerdings sollte man nicht zu einem kritischen Moment den Workspace an die neue Version anpassen, denn ein Wechsel zurück ist nicht mehr möglich. Der einzig weitere nötige Schritt war die Installation der PHP Development Tools open_in_new (http://download.eclipse.org/tools/pdt/updates/latest/ open_in_new). Nach dem Abschluss der PDT Installation wählte ich nun noch den PHP Editor als Standardeditor für PHP Dateien und ich konnte direkt weiter arbeiten. Meine Basis Eclipse Version ist die Eclipse für Java Developer Edition mit einigen JEE Features. In den nächsten Teilen gehe ich auf weitere Eclipse Einsatzbereiche, wie auch auf IntelliJ ein.
Eclipse Mars - Migration zu Neon und IntelliJ Idea

Für einige mag diese Überschrift etwas verwirrend klingen, aber ich denke man wird sie schnell verstehen. Doch worum soll es hier eigentlich gehen? Ich entwickle Software, sowohl für Android (Java), wie auch für meine Webseite (PHP, HTML, CSS, JS) und auch allgemeine Java Projekte sind dabei. Während meiner Uni-Zeit brauchte ich zusätzlich noch LaTeX. Hin und wieder gab es dann noch alternative Projekte und kleinere Tests. Alles in allem wird denke ich relativ schnell klar, dass ich eine vielseitige Lösung brauchte und diese fand ich mit Eclipse. Alle genannten Sprachen und Einsatzgebiete konnte ich dort abdecken. Doch über die letzten Jahre gab es viel neues, einige alte Dinge brauchte ich nicht mehr und mein riesiges Eclipse (ein Eclipse für alles, inklusive allen Plugins, welches ich meistens aktuell hielt, auch über Major Releases hinweg) wurde auch nicht schneller. Somit schaute man etwas über den Tellerrand, teilweise freiwillig und teilweise gezwungenermaßen (Stichwort: Android Studio). Nach einer gewissen Gewöhnungsphase muss ich gestehen Android Studio (IntelliJ Idea ist die Basis) gefällt mir wirklich gut. Aus diesem Grund überlege ich aktuell mehr auf dieser Plattform aufzubauen und da kam das Update von Eclipse Mars auf Neon gerade richtig. Denn dieses Update lässt sich nicht über die internen Eclipse Update-Prozesse regeln, eine komplett neue Installation ist fällig. Somit werde ich innerhalb der nächsten Zeit meine Projekte teilweise unter Eclipse Neon und teilweise unter IntelliJ Idea neu einrichten. Über das Für und Wider und ein wenig auch über den Update-Prozess und die darin enthaltenen Hürden, möchte ich in dieser kleinen neuen News-Reihe berichten. Sollte ihr konkrete Fragen haben, nur raus damit und ich versuche sie zu beantworten. Meldet euch einfach direkt in den Kommentaren.
Resizy - Version 0.5 Multithread Release

Bereits vor einiger Zeit hatte ich es angekündigt und nun ist die neue Resizy Version 0.5 da. Sie bringt vor allem Multithread Support mit sich. Zusätzlich gab es aber auch noch ein umfangreiches Code Cleanup. Dieses konnte ich nicht komplett durchziehen, aber zumindest im Ansatz ist jetzt alles etwas sortierter. Dadurch sollten neue Funktionen besser implementierbar und Fehler besser behebbar sein. Einiges an Code wurde durch die Nutzung der Lombok open_in_new Library eingespart, welche ich euch nur empfehlen kann. Zusätzlich suche ich nun noch nach Features für einen großen nächsten 1.0 Release. Diverse UI Optimierungen sind ebenfalls für diese kommende Version geplant, konkrete Pläne gibt es aber noch nicht. Falls ihr Vorschläge habt, meldet euch einfach in den Kommentaren oder aber direkt auf GitHub. Dort könnt ihr die aktuellen Versionen nun übrigens auch herunterladen.
Droidcon 2016 - Die Sessions - Teil 5

Gegen 12:30 ging es weiter auf der Droidcon. Die Headline war Half way to clean architecture open_in_new und Thema war hier der Aufbau eurer Anwendung und wie ihr diesen nutzen könnt, um alles klar strukturiert und gut separiert aufbauen zu können. Eines der Kernkonzepte war dabei Divide and Conquer open_in_new und allgemein der Aufbau in modularen Layern, anstatt in monolithischen Activities. Ein weiterer sehr relevanter Punkt war das MVP Pattern open_in_new, welches auch ich aktuell einsetze. Dieser Talk war definitiv sehr interessant und hilfreich. Weiter ging es nach dem Mittag um 14:00 mit Professional Data Persistence and Synchronization open_in_new. Hier gab es sehr viel zur SQLite ORM Lösung GreenDAO. Auch andere Ansätze wurden gezeigt, doch alles in allem hatte GreenDAO die Nase vorn. Im Rahmen der Session wurde auch die neue Version 3 vorgestellt. Um 14:45 wurde es dann wirklich anspruchsvoll mit der Session Adoption of RxJava on the Airbnb Android app open_in_new. RxJava verfolgt relativ neue Ansätze wenn es um die Umsetzung von Aktion / Reaktion Abläufen geht. Darüber berichtete ich bereits in einem anderen Artikel. Hier wurden diverse spannende Dinge gezeigt und erläutert, diese waren wie erwähnt aber auch durchaus fordernd. Dies war dann leider auch schon mein letzter Talk, denn die letzten beiden, welche nach der Kaffeepause gestartet wären, konnte ich nicht mehr wahrnehmen. Grund dafür war die Abfahrtszeit meines Busses. Alles in allem habe ich viel gelernt und viele spannende Eindrücke gesammelt, falls euch mein allgemeines Fazit interessiert folgt einfach diesem Link.
Droidcon 2016 - Die Sessions - Teil 4

Nach einer kurzen Pause geht es heute weiter mit den Sessions des zweiten Tags. Dieser begann mit der zweiten Keynote Android Development Yesterday and Today (and maybe even Tomorrow) open_in_new. Zu dieser findet ihr im unteren Teil der News übrigens direkt das eingebettete Youtube Video. Hier gab es diverse Einblicke in das Android Ökosystem und auch einige persönliche Eindrücke des Google Android Teams. Mir gefiel dieser kleine “Schwank aus der Vergangenheit” gut, wenn er auch nicht viel technische Informationen vermittelte. Weiter ging es um 11 Uhr mit dem Talk Contextual communications and why you should care open_in_new. Dieser ging wie der Name schon sagt darauf ein, dass es für Apps extrem sinnvoll ist, den Nutzer im Kontext der App zu halten. Ich hatte hier erwartet, dass es etwas mehr darum geht den Kontext des Nutzers selbst zu erkennen, aber der Talk war trotzdem interessant. Denn er zeigte mit diversen Techniken, wie z.B. den neuen eingebetteten WebViews, wie man dem Nutzer externe Funktionen bietet, ohne die App aus dem Vordergrund entfernen zu müssen. Um 11:45 Uhr ging es weiter mit Building simple and secure account systems on Android open_in_new. Hier gab es diverse Informationen zu Googles Login Systemen und wie man mit Hilfe von diesen dem Nutzer das Leben einfacher machen kann. Definitiv eine sehr interessante Sache, wenn man die freie Wahl an Diensten hat. Ich persönlich hatte mir hier noch etwas mehr zu allgemeingültigen Ansätzen erhofft. Der Talk brachte trotzdem einige neue Informationen und vor allem im Bezug auf UI und UX gab es den einen oder anderen hilfreichen Tipp. Die weiteren Talks folgen im laufe dieser Woche.
Droidcon 2016 - Die Sessions - Teil 3

Weiter ging es um 16:00 Uhr mit der Testing made sweet with a Mockito open_in_new Session. Mockito ist ein Testing-Framework mit diversen Möglichkeiten. Unter Android nutze ich dies auf professioneller Ebene, privat eher wenig, da ich dort einfach nur in einem sehr geringen Maße teste. Mockito erlaubt auf verschiedene Arten zu testen, unterstützt Annotations und bringt diverse Hilfsfunktionen für Vergleiche mit. Auch asynchrone Dinge lassen sich einbauen und validieren. Meiner Meinung nach und ich muss anmerken, dass ich im Testbereich wenig Ahnung habe, ist Mockito wirklich gut und vor allem auch verständlich nutzbar. Schaut es euch also mal an wenn ihr Tests für Android erstellen wollt. Um 16:45 ging es weiter mit Are you coordinating already? open_in_new. In dieser Session war das Thema das CoordinatorLayout open_in_new aus der Google Design Support Library. Es erlaubt das Ein- und Ausblenden von Elementen z.B. beim scrollen innerhalb einer Liste (Stichwort: Appbar) und ist ein erweitertes FrameLayout, welches umfassend angepasst und erweitert werden kann. Dafür können Behaviors open_in_new genutzt werden. Der Talk war sehr interessant und hat mir einige Einblicke bezüglich dieser UI Komponente gegeben. Abgeschlossen wurde der Tag um 17:30 mit der Effective Android Development open_in_new Session. Hier ging es vor allem um Effizienz. Dies beinhaltet Shortcuts und Funktionen von Android Studio, Tipps bezüglich Testgeräten und welchen Versionen man am besten testen sollte und auch externe Developer Tools wurden angesprochen. Dabei gab es alles vom Deployment einer APK auf multiple Emulator-Instanzen, bis hin zu besseren Logging-Systemen. Abgeschlossen wurde der Talk durch Tipps bezüglich der Analyse der final entstehenden APK, denn dies wird oft vernachlässigt. Vor allem das Manifest sollte hier geprüft werden, wobei der ab Android Studio 2.2 vorhandene APK Analyzer helfen kann. Die Sessions des zweiten Tages folgen wie gewohnt innerhalb der nächsten Tage und bei Fragen meldet euch einfach in den Kommentaren.
Droidcon 2016 - Die Sessions - Teil 2

Der nächste Talk auf meiner Liste war Modular Android Development open_in_new. Meine Gedanke waren hier auf Module innerhalb des Codes bezogen und in diese Richtung ging es dann auch. Als Beispiel gab es eine extrem große App, welche Stück für Stück umgebaut worden war. Innerhalb des Vortrags wurde dann viel über das dabei gelernte gesprochen. Beginnen solle man mit isolierbaren Features und dann immer in kleinen Schritten, auf keinen Fall alles auf einmal. Man sollte auch neuen und alten Code nebeneinander tolerieren, anstatt mit einem großen Schuss die Tür für Fehler zu öffnen. Die Nutzung von starken Build-Diensten und den Fähigkeiten von Gradle sollte forciert werden, da diese gut bei derartigen Aufgaben helfen können. Danach gab es erst einmal Mittagessen und folgend einen leichten Start in den Nachmittag, mit dem What’s new in Android open_in_new Talk. Hier wurde einiges von der Google I/O aufgegriffen und vieles im Highlevel-Bereich behandelt, technisch interessant war für mich dann die nähere Erläuterung des neuen Constraint Layouts open_in_new, welches ich extrem interessant finde. Auch spannenden waren Neuigkeiten zur Art und Weise wie man Dateizugriffe in Zukunft umsetzen soll, die Möglichkeit zum ändern der Sprache, bessere Notifications und natürlich einige neue und optimierte Sicherheitsfunktionen. Abschließen möchte ich die heutige News mit einem sehr interessanten und unterhaltsamen, wenn auch technisch für mich nicht wirklich relevanten Talk. Diesen wählte ich bewusst, weil ich das Thema interessant finde, auch wenn ich nicht vor habe in eine derartige Richtung zu entwickeln. Augmented Reality and VisualFX with Project Tango open_in_new hieß der Talk und wie der Name schon sagt ging es um Augmented Reality mit Googles Projekt Tango Hardware. Eine sehr interessante Technik und spannend was man damit bereits machen kann. Gerade die Erfassung der Umgebung fand ich sehr spannend. Weiter geht es mit den nächsten Sessions am morgigen Mittwoch.

