blog.andreas-klingler.de

Notizen und Gedanken von Andreas Marc Klingler

Schlagwort: Softwareentwicklung

Code-Realität

In Vorlesungen hört man ja ab und zu Horror-Geschichten über „die Realität“(tm). Man lacht dann meist darüber und fragt sich, ob es denn stimmen kann, das in freier Wildbahn wirklich dermaßen unglaublich schrecklicher Code existieren kann. So blöd kann ja keiner sein.

Letzte Woche habe ein solches Beispiel erlebt, bei dessen Code-Analyse ich minutenlang nicht mehr aus dem Lachen herauskam. Auch wenn Weinen wohl angemessener gewesen wäre.

Es ging um eine Webplattform, die trotz 8-Kern-Systems mit 32 GB RAM kaum noch benutzbar war aufgrund extrem langer Antwortzeiten im Minutenbereich. Ein Hauptproblem war eine Mehode, die folgendes gemacht hat:

  • Lade zu Beginn erstmal alle Objekte aus der Datenbank in eine Variable.
  • Lade, weil’s so schön ist, auch direkt alle abgeleiteten Objekte abgeleiteter Tabellen in Variable.
  • Führe diverse Transformationen mit allen diesen Objekten aus (deren Sinn sich mir nicht zu 100% erschlossen hat).
  • Filtere ca. 80% der Objekte raus.
  • Führe mit der verbleibenden Objekten weitere Transformationen durch.
  • Ermittle schließlich die Anzahl der Elemente, die in der „Hauptvariable“ noch drin sind, und …
  • verwende diesen Wert nie wieder.

Überflüssig zu sagen, dass auch die anderen Variablen überhaupt nicht verwendet werden. Tja…

Willkommen in der Realität! (Fluchtmöglichkeiten sind nicht ausgeschildert.)

(Nachtrag: Zum Thema: devopsreactions.tumblr.com, codinghumor.tumblr.com uvm.)

Allmächtiges Frontend

Ich experimentiere seit einiger Zeit hin und wieder mit JavaScript-Frameworks wie Angular.js oder Ember.js. Darin kann man mittlerweile komplette MVC-Anwendungen schreiben, die komplett im Browser laufen können und ggf. höchstens noch per JSON/XML mit einem Server-Skript zur persistenten Datenspeicherung kommunizieren müssen. (Wobei auch das teilweise schon lokal geht.)

Ein interessanter Aspekt, der mir heute Abend bei einem Gespräch auf dem Angular.js-Meetup gekommen ist: Es gibt einen Trend, immer mehr Logik in das Frontend (→ Browser) zu verschieben.

In den meisten Webanwendungen wird derzeit die meiste Logik im Backend in einer eigenständigen (Skript-) Sprache geschrieben und daraus HTML-/JS-/CSS-/usw.-Code erzeugt und vom Browser gerendert. Zwar wird die Darstellung zwar oft noch per JavaScript gerendert, aber die wesentliche Logik liegt im Backend.

Die JavaScript-Frameworks laufen dagegen vollständig im Browser ab. Daraus folgt dann aber auch, dass die gesamte Logik öffentlich wird. Jeder kann sich im Browser durch die JavaScript-Dateien hangeln, die komplette Logik nachvollziehen, auf Schwachstellen analysieren und gar komplett herunterladen, verändern und woanders manipuliert hochladen.

Das eröffnet nebenbei völlig neue Möglichkeiten zum „Plattformklau“ oder zu Angriffen, bei denen man nicht mal mehr andere Seiten nachbauen muss, weil man sie komplett auf einen eigenen Server kopieren kann. Schnell noch eine Vertipper-Domain registrieren und dann mal schauen, wer sich so anmeldet. Die Anmeldedaten kann man dann auch gleich speichern, um damit auf der richtigen Plattform fremde Nutzerkonten übernehmen zu können.

In diesem Zusammenhang lohnt sich auch ein Blick auf die Seite nobackend.org, auf der bereits Ideen und Lösungen gesammelt werden für eine Welt, die vollständig ohne Backend auskommt.

Die Idee finde ich für einige Anwendungsfälle ganz interessant und ich werde das auch weiterhin beobachten. Aber es fühlt sich irgendwie komisch an, eine Plattform so leicht komplett kopieren zu können. Vielleicht bin ich da aber auch nur zu voreingenommen, weil ich es bisher anders nicht kenne. Mal schauen, wie sich das entwickelt.

Exzellentes Blog über Softwaretechnik und -entwicklung

Vor einiger Zeit bin ich auf ein wunderbares Blog gestoßen, dass ich allen ans Herz legen möchte, die Software auch entwickeln: Joel on Software.

Es handelt um Softwaretechnik und -entwicklung sowie einer größeren Epsilon-Umgebung davon. Viele Artikel sind Augen-öffnend und zumindest ich habe in den gut vier Wochen, in denen ich das Blog „ausgelesen“ habe, sehr viel erkannt und gelernt. (Untere anderem auch gute Gründe dafür, warum man in der Praxis oft Dinge tut, für die es im akademischen Bereich aber auch gute Gründe gibt, sie zu verpönen.)

Auf der Hauptseite gibt es in der zweiten Spalte eine sehr lange Liste auf gute Artikel aus verschiedenen Bereichen. Ein guter Anfang. Über die Archiv-Seite kann man dann geordnet alle Beiträge ab März 2000 lesen.

Ursprünglich habe ich an dieser Stelle auch noch eine Auswahl hervorragender Zitate aus dem Blog anbringen wollen. Ich habe mich bei der großen Menge, die ich mir herauskopiert habe, nicht mehr entscheiden können und gebe daher allen Interessierten lieber den Rat, das Blog selbst auszulesen. Man kann sich ja auch damit Zeit lassen, die Artikel laufen ja nicht weg. :-)

ManagedObjectContext von Core Data mit Storyboard in XCode 4.2

Um Core Data in einer iOS-Anwendung benutzen zu können, muss man die Komponenten des Core Data-Frameworks instantiieren, was normalerweise im Application Delegate geschieht. Normalerweise wird dort in der Methode didFinishLaunchingWithOptions das erzeugte NSManagedObjectContext-Objekt den View Controllern übergeben, damit diese es für Zugriffe auf die Datenbank nutzen können.

Die Standardlösung, die auch in vielen Dokumenten von Apple noch vorkommt und von der dieser Code stammt, sieht wie folgt aus:

Weiterlesen