I'm a coder - KW 29
Das Rad neu erfinden, ist heute Thema meiner I’m a Coder News. Denn auch wenn man selbiges eigentlich nicht tun sollte und auch nicht will, so passiert es trotzdem häufiger als man denkt. Manchmal einfach aus dem Entwickler-Flow heraus und manchmal da man bestimmte Dinge auch einfach nicht kennt. Denn für vieles gibt es gute und mächtige Libraries, doch man kann niemals alle von ihnen kennen. Aus diesem Grund sollte man vor Grundsatzentscheidungen bei Implementierungen, sich erst einmal schlau machen ob nicht vielleicht stabile und gute Bibliotheken vorhanden sind. Auf der anderen Seite bin ich der Meinung, dass wenn man selber guten Code schreiben kann, ist auch dies nicht verwerflich. Eine Ausnahme ist hier meistens Code der auf Sicherheitsfunktionen bezogen ist, denn hier sollte man sich immer an die Standards halten. Tut man dies nicht, kann dies zu großen Problemen führen. Auch wenn selbiges ebenfalls bei etablierten Implementation passieren kann, ist dort zumindest das Risiko meistens geringer. Ich selber erwische mich von Zeit zu Zeit dabei die genannten Tipps selbst nicht zu beachten, versuche aber mich zu bessern. Vor allem wenn man seinen eigenen alten Code verwendet, ohne ihn noch einmal einem Review zu unterziehen, kann man sich gut selbst in die Falle manövrieren. Also immer über den Tellerrand schauen, seine eigenen Code-Snippets nicht als fehlerfrei ansehen und den guten alten gesunden Menschenverstand auch beim Programmieren nutzen, dann ist man auf einem guten Weg.
Wie schnell muss mein Internet sein
Internet ist heutzutage extrem wichtig. Ich denke an dieser Aussage gibt es nichts zu rütteln. Doch welche Geschwindigkeiten braucht man eigentlich, um ordentlich surfen zu können. Ich selber war in den letzten Jahren immer mit mindestens 32 Mbit unterwegs und habe bereits vor einiger Zeit einen Wechsel auf VDSL (50 Mbit Download / 10 Mbit Upload) vollzogen. Dieser Schritt entstand eher aus der Not heraus, denn ich hatte lediglich die Wahl zwischen 6 Mbit Download und den besagten 50 Mbit. Ich fand das Ganze damals etwas übertrieben, aber muss gestehen das ich mittlerweile froh über die Entscheidung bin. Grund dafür ist ein aktuelles Problem mit meiner Leitung, welches selbige auf 16 Mbit Down- und 1 Mbit Upload limitiert. Denn die Leitung wird zu zweit genutzt und man zockt, lädt Daten, ist auf Voice-Servern und tut noch wesentlich mehr im Internet. Dadurch stellt man tatsächlich fest, dass 16 Mbit in diesem Fall nicht reichen. Wenn dann noch ein geschmeidiger 20 GB Download für ein Spiel dazukommt wird klar, VDSL ist bei der aktuellen Nutzung definitiv nicht mehr übertrieben. Ich hoffe das Problem wird bald behoben, denn man kommt damit klar, aber dies möchte man eigentlich nicht müssen, deswegen hat man ja entsprechend schnelles Internet bestellt. Wie sieht es mit eurer Geschwindigkeit aus und denkt ihr sie ist übertrieben hoch oder braucht ihr sie wirklich? Bezüglich dem brauchen war bei mir immer ein wichtiger Punkt, dass ich nebenbei noch im kleinen Stil selbständig Webseiten entwickle und somit auch einen stabilen und starken Upload brauche.
I'm a coder - KW 28
Heute gibt es mal wieder eine I’m a Coder News. Das Thema ist simpel, nämlich der Wechsel zwischen verschiedenen Programmiersprachen nach längerer Zeit. Zum einen ist dies interessant und bringt Abwechslung in den Entwickleralltag. Auf der anderen Seite ist es manchmal dermaßen verwirrend, dass man ausflippen könnte. Mein aktuelles Beispiel ist Java und PHP. Ich schreibe viel Code in Java und bin dementsprechend sehr an die Eigenheiten gewöhnt. Seit einiger Zeit habe ich aber mal wieder mehr Berührungen mit PHP und dies war am Anfang wirklich wieder eine große Umstellung. Stichwort ist hier die Syntax, so versuchte ich in PHP Klassen Methoden mit “Objekt.Methode” aufzurufen und habe sage und schreibe 10 Minuten gebraucht, um zu verstehen das “Objekt->Methode” vielleicht sinnvoller wäre. Dinge die mir seit Jahren geläufig sind, haben sich in meinem Kopf teilweise vermischt und vor allem auch Dinge wie “public, private und protected” und die entsprechenden Unterschiede in Java und PHP, haben mir zu schaffen gemacht. Man kommt schnell wieder rein, es ist etwas wir Fahrrad fahren, aber ein paar Mal legt man sich schon hin. Alles in allem läuft es bei mir wieder rund mit beiden Sprachen, aber mir zeigt dies etwas. Entweder man sollte kontinuierlich Sprachen immer mal wieder nutzen oder sie komplett und endgültig verwerfen. Wirklich lange Pausen sind nicht zielführend und eher verwirrend. Was sagt ihr zum Thema und hattet ihr bereits ähnliches Problematiken?
I'm a coder - KW 27
Ich programmiere gerne und dabei möchte ich halbwegs vielseitig sein. Allerdings ist es natürlich nicht ganz so einfach, einen Mittelweg zwischen großer Vielseitigkeit und dem wirklichen Beherrschen einer Programmiersprache zu finden. Deswegen werde ich in den nächsten I’m a Coder Beiträgen etwas auf die Sprachen eingehen, die ich mir zumindest teilweise angeeignet habe und erklären warum ich dies tat. Dabei werden einige Erklärung sinnvoll und andere eher trivial sein, denn gerade meine ersten Sprachen waren eher zufällig gewählt. Heute fange ich direkt mit Java an, allerdings mit dem initialen Einstieg und z.B. nicht mit meiner Android-Entwicklung, denn dies lernte ich gezwungenermaßen in der Schule.
I'm a coder - KW 26
Es ist mal wieder Zeit für eine kleine I’m a Coder News. Heute möchte ich ein wenig über die Möglichkeiten sprechen wie man seine Objekte verwaltet, wenn diese mehrere Repräsentationen haben können. Damit meine ich z.B. eine Datenbank-Version, ein POJO und eine JSON Repräsentation. Solche Dinge geschehen wenn man Server Interaktionen und innerhalb z.B. einer Android App eine Persistenz implementiert. Denn man erhält Daten vom Server, wandelt diese in Java Objekte um, arbeitet mit diesen und später speichert man sie für die persistente Nutzung. Dabei nutzt man meistens Libraries, um den Overhead zu reduzieren. Nun stellt sich die Frage ob man ein Java Objekt für all diese Zustände (z.B. Incoming Server Object, Model, Database Object) hat, dieses entsprechend mehr oder weniger befüllt und die Daten zentralisiert konvertiert. Alternativ kann man für jeden Zustand ein Java-Objekt bauen und diese unabhängig voneinander befüllen lassen. Im letzteren Fall wird dann meistens via Factories oder ähnlichem die Konvertierung in die anderen Objekttypen durchgeführt. Während die erste Lösung den Vorteil hat weniger Objekte zu haben und zentrale Stellen für die Verwaltung bereitstellt, bietet die zweite Lösung immer eine adäquate Darstellung, man weiß auf welcher Ebene man arbeitet und man spart unter Umständen Speicher. Ich finde beides ist durchaus vertretbar und hängt stark von der Situation ab. So würde ich bei kleineren Projekten, die vielleicht auch nicht mit sehr großen Datenmengen auf einmal arbeiten müssen, zur ersten Lösung tendieren. Sobald man aber wirklich unterschiedliche Daten erhält und z.B. Integers vom Server und Booleans in der Datenbank auf ein Level bringen muss, würde ich eher Richtung Lösung zwei gehen. Sobald man dann noch sehr große Mengen von Objekten hat, würde ich die zweite Lösung noch stärker bevorzugen. Da man immer nur die Art von Objekt, mit den minimal nötigen Inhalten, zur Verfügung stellt und unnötigen Overhead vermeidet. Doch das ist nur meine persönliche Meinung und ist wie gesagt sehr stark von der Situation abhängig. Hatte ihr schon einmal derartige Entscheidungen zu treffen und wenn ja, wie fielen diese aus?
I'm a coder - KW 25
Heute gibt es mal wieder eine I’m a Coder News und diese ist außer der Reihe auch in der Kategorie Fail zu finden. Denn auf der einen Seite ist es vielleicht hilfreich was ich schreibe, doch das eigentliche Problem ist definitiv eher ein Fail. Es geht heute darum, zu prüfen was Skripte tun und zu hinterfragen wofür sie gedacht sind, anstatt sie blindlings auszuführen. Hintergrund ist eine Erfahrung am gestrigen Tage, mit nicht mehr funktionierenden SSH Keys und geänderten GIT Einstellungen. In dieser Situation landete ich nach Testläufen für Skripte, welche eigentlich in Docker Containern laufen sollen und dementsprechend andere Abläufe verfolgen. Dazu gehörte ein spezielles Handling für SSH Keys, welches auf meiner lokalen Maschine allerdings unpraktische Ergebnisse zu Tage führte. So wurde mein privater SSH Key durch eine leere Datei ersetzt und einige GIT Global Config Werte wurden überschrieben. Letzteres ist offensichtlich kein Problem, denn man kann diese Werte wieder ändern. Ein verlorener SSH Private Key hingegen kann unschöne Arbeit bedeuten. Aufgrund von Backups konnte ich diesen Prozess umgehen, aber diese hat man nicht immer und alles in allem sollte man einfach nicht in eine derartige Situation geraten. Soll heißen, auch bei Skripten die man selber geschrieben hat, vor dem Ausführen drüber nachdenken was die Skripte tun und für welche Umgebungen sie gedacht sind. Denn eigentlich logische Abläufe auf einem CI System open_in_new, können lokal für Chaos sorgen. Vor allem wenn man einen Docker Container, der ja eher temporär sein kann, mit einem normalen produktiv Desktop-System vergleicht. Am Ende war nun alles halb so schlimm, aber dennoch unnötig und etwas was man vermeiden sollte.
I'm a coder - KW 24
Es ist mal wieder Zeit für eine I’m a Coder News und dieses Mal soll es um die richtige IDE für die richtige Aufgabe gehen. Hier stehen für mich Eclipse und IntelliJ Idea an erster Stelle. Die beiden Umgebungen erlauben mir, meine hauptsächlich im Java Bereich angesiedelte Entwicklung, umzusetzen. Denn egal ob Server-, Android- oder generelle Java-Entwicklung, mit diesen beiden Tools bin ich gut bedient. Zusätzlich kann ich mit Eclipse die Verwaltung meiner PHP Seite via Remote FTP Verbindung umsetzen. Doch aktuell plane ich für meine Webentwicklung einen drastischen Wechsel zu einer statischen Website. Somit brauche ich nur HTML, CSS und JavaScript. Doch hier stellt sich mir nun die Frage welche Software ich hier nutzen kann. Eclipse ist mir für diesen eher simplen Bereich zu schwerfällig und umfangreich und IntelliJ Idea bietet die besseren Webentwicklungsfunktionen leider nicht wirklich in der Community Edition. Letztere Aussage basiert auf einer Recherche von vor ein paar Monaten und ich weiß nicht ob sich dies in der Zwischenzeit geändert hat. Freuen würde ich mich, denn aktuell habe ich noch keine perfekte IDE gefunden, die mir in diesem Bereich komplett zusagt. Gegen ein neues Tool hätte ich nichts, auch wenn ich es nach Möglichkeit natürlich gerne verhindern würde. Solltet ihr hier eine gute Idee haben, gerne auf ein Editor + Erweiterungen, würde ich mich über Meldungen in den Kommentaren freuen. Außerdem würde mich interessieren was ihr entwickelt und welche Tools ihr dafür nutzt. Alles in allem freut es mich sehr die Wahl zu haben und auch Editoren wie Atom sehen sehr interessant aus, doch am Ende sind sie Mittel zum Zweck um Programme zu entwickeln und sollten nicht mehr Arbeit schaffen, als sie einem abnehmen. Wichtig finde ich zum Beispiel, dass die Integration von Versionsverwaltungssoftware möglich ist, vielleicht sogar Addons / Plugins für weitere Funktionen vorhanden sind und man schnell und effektiv arbeiten kann. Die beiden zu Beginn genannten Tools erfüllen für die genannten Bereiche genaue diese Aufgaben, erscheinen mir aber nicht zu 100 Prozent passend für die reine Webentwicklung. Sobald ich übrigens für mich etwas Passendes gefunden habe, melde ich mich natürlich mit einem weiteren Beitrag.
I'm a coder - KW 23
Heute geht es um Programmierbereiche die man immer mal wieder betritt und in welchen man eigentlich erfahren ist. Trotzdem macht man gerne Fehler, denn tut man etwas häufig wird man oft etwas unachtsam. Mir ist ähnliches beim Modellieren und Implementieren einer SQLite Datenbank für eine meiner neuen Android Apps aufgefallen. Denn ich hatte verschiedene Dinge einfach nicht bedacht, da ich die Datenbank sehr iterative und pro Feature erstellte. Da sie relativ schlicht ist dachte ich dies funktioniert, obwohl ich mir sehr bewusst bin das eine Datenbank definitiv vorab stark durchdacht und geplant werden will. Somit fiel mir dann bei einer eigentlich kleinen Änderung auf, dass ich diverse Beziehungen ändern muss und in diesem Zug baute ich die gesamte Datenbank einmal ordentlich auf. Wesentlich mehr Zeit ging dadurch ins Land und ich hätte dies einfach von Anfang an machen sollen. Deswegen der Hinweis an euch alle da draußen und natürlich auch an mich selbst, auch Dinge die wir häufig implementieren, planen oder designen wollen ordentlich und mit voller Konzentration durchgeführt werden. Habt ihr zuvor bei einem konkreten Feature erst geplant, dann implementiert und dann getestet, bleibt dabei und lasst keine Schritte weg. Am Ende hat man sonst vielleicht Pech und macht Fehler oder aber braucht wesentlich länger.
I'm a coder - KW 22
Ich programmiere gerne und dazu gehört es für mich auch Skripte zu schreiben, denn lieber das Skript auf der Platte, als die Zeit auf der Uhr. Dies gilt natürlich nur für häufiger nötige Aufgaben, denn Dinge die man nur einmal macht sind meistens natürlich nicht sinnvoll und zeitsparend via Skript umsetzbar. Dabei setzte ich vor allem auf die Shell unter Ubuntu. Sowohl mein Server, wie auch meine Umgebung auf der Arbeit sind entsprechend aufgesetzt. Auf meinem Desktop läuft zwar Windows, aber durch die neuen Windows 10 Funktionen und die Git Bash ist auch unter Windows einiges mit der Shell möglich. Die Kommandozeile unter Windows kommt für mich aufgrund der wirklich nervigen Syntax meistens nicht in Frage und zur Powershell habe ich bis dato noch nicht so den Zugang gefunden. Um übrigens ein paar konkrete Beispiele zu nennen wofür ich Skripte nutzte, sei z.B. die Updatefunktion meines Servers erwähnt, diverse Dinge mit Bezug auf meine Android-Entwicklung, z.B. ein kleines Skript welches Libraries + Abhängigkeiten auflistet und genutzte Versionen mit angibt und auch Backups auf meinem Desktop PC löse ich auf diesem Weg. Die Liste ist wesentlich länger und mein aufwendigstes Skript war vermutlich die automatische Integration von Ubuntu Rechnern in ein Active Directory, inklusive diversen weiteren Softwareinstallationen, Updates, Konfigurationen und Einstellungsmöglichkeiten für das Skript selbst. Wie sieht es bei euch aus schreibt ihr auch gerne mal ein Skript oder agiert ihr lieber manuell?
Rocketbook Everlast - Mein neues unendliches Notizheft
Vor einiger Zeit habe ich mal wieder bei einem Kickstarter zugeschlagen und mir das Rocketbook Everlast bestellt. Ein Notizheft welches mit normalen Fineliner ähnlichen Stiften beschriftet werden kann. Anschließend kann eine App, nach kurzer Einrichtung, die Seite scannen und entsprechend euren Wünschen verarbeiten. Dafür macht ihr auf der Seite ein Kreuz bei einer der Kategorien und erfasst die Seite mit der App. Der Scan landet dann z.B. in eurer Dropbox, Google Drive, wir per Mail an euch versendet oder wird einfach gespeichert. Dies könnt ihr selbst wählen und verwalten. Ist eine Seite archiviert könnt ihr sie mit einem feuchten Tuch abwischen. Der Block fühlt sich dabei wirklich Papier ähnlich an und auch das Schreiben ist angenehm. Ich habe bis dato noch nicht alles ausführlich getestet, da das gute Stück erst vorgestern ankam, aber ein ausführlicher Bericht wird noch folgen. Alles in allem bin ich aber auf den ersten Blick sehr begeistert und freue mich meine bis dato vier verschiedenen Blöcke für unterschiedliche Bereiche vereinigen zu können. Bei Interesse folgt einfach den Related Links und bei Indiegogo könnt ihr das gute Stück sogar bestellen. Falls ihr konkrete Fragen habt, meldet euch einfach in den Kommentaren und ich versuche auf diese einzugehen. Im unteren Teil der News findet ihr noch ein kleines Youtube Infovideo, damit ihr euch besser vorstellen könnt worum es sich bei diesem Produkt handelt.