Programmierblog von Johannes Dienst

JavaScript-Bug ganz subtil

Posted by in JavaScript

JavaScript ist manchmal eine Sprache, die subtile Bugs produziert. Hier ist die Preisfrage: Was ist an diesem Code-Schnipsel falsch und was sind die Auswirkungen?

Keine Idee? Ich musste auch erst überlegen, da ich solche Fehler eigentlich nirgendwo erwarten würde. Das Problem ist in Zeile 6 zu finden. Die Variable json_data wird dort initialisiert. Leider nicht im lokalen Scope, sondern anscheinend im globalen Scope. Von JSON.parse() wird ein Array zurückgeliefert. Beim Debuggen hat sich dann gezeigt, dass die Array.length nicht zurückgesetzt wird. Hat es die Länge 10 bei einem Durchlauf…read more

0

TypeScript 1.6: Endlich sinnvolle Mixins?

Posted by in JavaScript, TypeScript

Wie in meinem Artikel im JavaSpektrum beschrieben, gab es bis zur Version 1.6 keine richtige Untersützung für Mixins. Mixins waren nur mit einer zusätzlichen applyMixins() möglich und auch dann hatte man jede Menge Boilerplate-Code zu schreiben, die die ganzen Vorteile zunichte gemacht haben. Intersection Types für die Rettung? Mit Intersection Types sollen jetzt laut diesem Blogpost Mixins endlich sinnvoll einsetzbar sein. Aber stimmt das? Schauen wir uns dazu einfach das Beispiel aus dem Post genauer an:

Man braucht eine Methode, um zwei Instanzen zu mixen. So ganz erklärt das…read more

0

Homoikonizität

Posted by in clojure, funktionale Programmierung

Die letzten Monate habe ich damit verbracht zwei neue Programmiersprachen zu lernen. Eine davon ist Clojure, das mich schon seit meiner Studienzeit interessiert hat. Leider hatte ich damals noch nicht einmal Java gelernt und so blieb mir die eigenartige Syntax und das funktionale Programmierparadigma mehr oder weniger verschlossen. In nächster Zeit werde ich immer wieder über Konzepte schreiben, die diesen Sprachen zugrunde liegen, um mir selbst darüber klar zu werden, was sie denn eigentlich bedeuten. Sollten sich Fehler einschleichen, können diese gerne angemeckert werden 🙂 Homoikonizität Was ist denn eigentlich…read more

0

Warum man als Programmierer bescheiden bleiben sollte

Posted by in clean code

Da ich ständig versuche über meine Arbeit zu reflektieren – was übrigens auch von einem Clean Code Entwickler erwartet wird – komme ich immer wieder zu der Frage: Was macht denn einen guten Softwareentwickler aus? Inzwischen glaube ich ja, dass ich gar nicht so schlecht in dem bin, was ich tue. Aber ich bin weit vom Expertenstatus des Dreyfus Modells entfernt. Für Projekte, die ich selbst mitentwickelt habe, kommt es tatsächlich vor, dass ich Experte bin, da ich bei Bugs intuitiv sagen kann, wo genau das Problem liegt. Also wie…read more

0

Ausbilderqualifikation in Vollzeit bei der IHK Würzburg-Schweinfurt

Posted by in Allgemein

Seit Anfang April bin ich stolzer Besitzer einer Prüfungsurkunde laut AEVO. Damit bin ich qualifiziert, Fachinformatiker ausbilden zu können. Falls Interessse an einer Ausbildung besteht gehts hier zu der Seite meines Arbeitgebers MULTA MEDIO Informationssysteme AG. Wie der Unterricht und die Prüfungen abgelaufen sind, werde ich in den nächsten Absätzen beschreiben. 1. Woche Nach einem langgezogenen Papierkrieg und vielen Unterschriften wurden wir nach einer kurzen Vorstellungsrunde von unserer engagierten Dozentin Frau Münch in Gruppen aufgeteilt. Wir sind ein bunter Haufen bestehend aus einem Informatikkaufmann, einer Hotelfachfrau, einem Restaurantfachmann, einer Verwaltungskauffrau…read more

0

Git: Repository aus Github klonen und bearbeiten

Posted by in git

In meinem Artikel Git: Basics habe ich grundlegende Funktionalitäten von Git im Zusammenspiel mit Github anhand eines Beispiels vorgestellt. Dieser Artikel zeigt, wie ich ein auf Github erstelltes Repository klone und dann Dateien hochpushe. Kleine Werbung am Rande: Es handelt sich dabei um einen Output-Wrapper für xml.js der hier zu finden ist xml.js-Output-Wrapper. Repository klonen Zuerst muss man das Repository auf github erstellen. Die URL ist in diesem Fall https://github.com/JohannesDienst/xml.js-Output-Wrapper.git. Dann kann man schon klonen.

Dateien adden und committen Der xml.js-Wrapper besteht aus genau zwei Dateien. Zuerst der Wrapper…read more

0

LESS in Eclipse automatisch kompilieren

Posted by in CSS, eclipse, Präprozessor

In letzter Zeit arbeite ich viel mit dem CSS-Präprozessor LESS. Da es für meine Lieblingsentwicklungsumgebung Eclipse anscheinend kein gutes Plugin gibt, habe ich mir einen Project-Builder zusammengebaut, der bei einer Änderung in LESS automatisch die neue CSS-Datei erstellt. Setup Unter der github-Seite des Projekts in der Sektion Getting started gibt es verschiedene Installationsmöglichkeiten. Je nach Einsatzgebiet wählt man dann das Passende aus. Wichtig ist, sich den Installationsort zu merken (vor allem unter Windows). Unter Linux hilft einem das Konsolenkommando whereis lessc weiter (bei mir ist das /usr/bin/lessc). Dieser Pfad wird…read more

0

SASS mit libsass in Nodejs (1): Installation

Posted by in CSS, Nodejs, Präprozessor

Dieser Blog beschreibt das Setup das notwendig ist, um SASS anstatt mit Ruby mit Nodejs zu kompilieren. Dazu wird die Library namens libsass benötigt und der Taskrunner Grunt mit dem Modul grunt-sass. Grunt sorgt dafür, dass bei einer Änderung in den SASS-Dateien automatisch das CSS neu erstellt wird. So erspart man sich nervige manuell angestoßene Kompilierungsvorgänge. package.json Zuerst erstellen wir einen Projektordner und legen in diesen eine package.json mit folgendem Inhalt:

Soweit so gut und nichts Besonderes. grunt-contrib-watch sorgt für das automatische Neukompilieren bei Änderung von SASS-Dateien. grunt-sass musste…read more

0

Legacy Code refactoren

Posted by in clean code, legacy

Immer wieder komme ich mit Legacy Code in Berührung, der mitunter schon ziemlich alt sein kann. Dementsprechend schwierig kann die Arbeit mit so einer Codebasis werden. Richtig knifflig wirds, wenn von mehreren Entwicklern Änderungen eingepflegt wurden und immer wieder Spezialfälle individuell gelöst wurden, anstatt einen generellen Ansatz zu verfolgen. Inzwischen habe ich mehrere Punkte für mich herausarbeiten können, die mir besonders weiterhelfen, wenn ich mit Legacy Code zu tun habe Umfangreiches Refactoring braucht Zeit. Diese Zeit muss vor allem störungsfrei sein. Ansonsten gibt es nur Frust und man zerstört im…read more

0

Clean Code mit PHP: Geht das?

Posted by in Allgemein

Der aufmerksame Leser wird festgestellt haben, dass ich nun schon seit längerem im zweiten Grad der Clean-Code-Developer Initiative verweile. Der erste Grund ist der, dass ich erst seit 3 Wochen wieder Vollzeitprogrammierer bin. Vorher war ich mit Continuous Integration beschäftigt, das vielleicht auch noch einen Artikel wert ist. Jetzt aber zurück zum eigentlichen Grund meines langen Verweilens im orangenen Grad: PHP. Im Moment integriere ich eine Reihe von Shortcodes in WordPress um mit Motopress anschließend Seiten zusammenklicken zu können. Dabei habe ich nicht nur oberflächlich mit PHP zu tun, sondern…read more

0