Asychrones Nerdfutter

Ich weiß ja, dass einige Nutzer über Suchbegriffe zu meiner Seite finden, die sehr IT-lastig sind. Meine kleinen Notizen und Code-Beispiele sollen Menschen helfen, deren Lage ähnlich die der meinen ist. Ich suche oft nach Lösungen zu bestimmten Problemen und finde sie oft nicht – weil ich dann vielleicht doch zu praktisch veranlagt bin und mir die fehlende Theorie über konkrete Beispiele aneigne.

Nachfolgender Code-Schnipsel ist das Ergebnis einer langen Problemsuche, bei der ich sogar die Netzwerkfachleute bei meinem Kunden aufgescheucht habe. Ich hatte wirklich geglaubt, dass der Fehler dort irgendwie im Netzwerk zu finden ist – aber das war, Stand heute, wohl doch nicht der Fall. Lösung des Problems war eine Kleinigkeit – aber die muß man erstmal wissen.

Wenn man eine Web-Applikation baut und diese mit einer Datenbank verbindet, dann findet zwischen dem Client und dem Server eine besondere Interaktion statt. Da auf der Clientseite niemals Datenbankanweisungen als Klartext sichtbar sein dürfen – jeder Browser kann den Quelltext einer jeden Seite anzeigen – müssen die serverseitigen Anweisungen auf dem Server erfolgen. Die Programmiersprache hierfür ist PHP.

Aber der Nutzer der Seite interagiert mit der Applikation auf der Clientseite. In dem er z.B. ein Passwort eingibt. Das erfolgt dann vermutlich über Javascript und mit einem der passenden Frameworks. D.h. diese Eingabe muss auf dem Server landen, also vom Client (Javascript) an den Server (PHP) übergeben werden. Diesen Mechansimus nennt man AJAX (Asynchronous JavaScript and XML) . Das A steht also für asynchron, d.h. die Auswertung auf dem Server ist dem Input nachgelagert und muss erst ein Feedback zurückgeben.

Ich bin da in eine böse Falle getappt, denn es gibt einen großen Unterschied bei diesem Feedback des Servers zwischen zwei Stati: complete und success. Das war mir nicht bekannt. Und wer oberflächlich nach Lösungen zu ähnlichen Problemen sucht, wird diesen Zusammenhang vielleicht auch erst viel zu spät begreifen. Vermutlich liegt das daran, dass AJAX Requests eher selten für das Erzeugen einer Datei verwendet werden.

Der AJAX Request gibt das Feedback success wenn er erfolgreich abgearbeitet wurde. Das Feedback complete wird ausgelöst, wenn das Ergebnis des Requests vorliegt und ist unabhängig von success (kann also auch bei einem Fehler ausgelöst sein, wenn ein Ergebnis nur teilweise vorliegt).

Konkretes Beispiel: Ich wollte anhand von zwei Clientseitigen Parametern (z.B. zwei Userangaben) das Erzeugen einer Datei auf dem Server auslösen und diese Datei dann als Input in meiner Applikation nutzen. Da ich bisher nur das Feedback success kannte und mich mit complete nie beschäftigt habe, fand diese Einbindung immer bei dem success Feedback statt. Das ist aber falsch, denn success bedeutet, die Dateierzeugung wurde erfolgreich initiiert (damit ist der AJAX Request erfolgreich abgeschlossen). Fertig ist der Request aber erst mit der vollständigen Datei und dem complete Feedback.

Ich habe also die ganze Zeit herumgerätselt, warum ich meine Datei manchmal nicht in mein Programm einbinden konnte. Da wir hier im Milisekundenbereich sind kam es ab und an vor, dass die Datei mit dem success Feedback schon vorlag und alles war OK – manchmal aber auch nicht. Die Einbindung muss also mit dem complete Feedback des AJAX Requests verbunden sein – nicht mit success. So erklärt sich der zunächst naheliegende Gedanke, dass im Netzwerk ein Problem vorliegt, welches die Datei blockiert. Naheliegend, aber falsch.

So sieht das konkret aus:

Dumm, wenn einem Nerd der Unterschied zwischen success und complete nicht geläufig ist …

coveroverkill -3

Aus aktuellem Anlass muss ich den Spieß umdrehen. Diesmal geht es nicht um eine Coverversion eines Depeche Mode Songs, sondern um die Coverversion von Depeche Mode zu anderen Künstlern.

Auf der letzten Tournee gehörte ein tolles Cover von „Heroes“ als Anerkennung von David Bowie zum Programm. Bowie hatte einen enormen EInfluss auf Depeche Mode, insbesondere auf den Sänger Dave Gahan.

30 Jahre ist jetzt der Release des Black Albums von Metallica her. Am Freitag wurde eine remasterte Deluxe-Version des Album veröffentlicht. Neben vielen Live- und Demoversionen, die die Entwicklung der Songs illustrieren, gibt es auch Tribute Versionen von anderen Künstlern als Verbeugung vor Metallica.

Dave Gahan von Depeche Mode hat seinen Beitrag dazu geleistet und den Klassiker „Nothing Else Matters“ interpretiert.

Emacs – Die ersten Hürden (Tutorial 1)

Es ist mal wieder Zeit für neues Futter für die Nerds unter meiner Leserschaft 🙂

Vielleicht geht es nur mir so, aber in Zeiten, in denen eine schleichende Verdummung durch medialen Overkill mit Alterweisheit und langsam nachlassender Jugend einhergeht, da möchte man vieles einfacher gestalten. Und trotzdem auf nichts verzichten. Ich bin jetzt nicht einem bratzenhaften Minimalismus verfallen, suche aber nach Methoden, die – wenn sie einmal eingerichtet sind – den Nerdalltag vereinfachen.

Ganz konkret: wie kann ich auf einem S7+ von Samsung (Andoid Tablet mit 12″ Display) eine Nutzerumgebung einrichten, mit der ich auch Webentwicklung (wie CONSILIUM) bequem von überall aus gestalten und überwachen kann? Nicht nur für zwischendruch, sondern so, dass mir alle Möglichkeiten offenstehen. Nie wieder einen Laptop mitschleppen – Tablet einschalten, über Tethering auf dem Smartphone ins Netz und loslegen.

Eine Entwicklungsumgebung wie PHPStorm gibt es nicht für Android. Schade. Gibt es Online IDEs, die sich nutzen lassen? Ja, aber CLOUD9 von Amazon erlaubt mir keine Installation ohne node.js. Und sowas wie codeanywhere.com ist nett. Aber, da kann ich auch gleich einen einfachen Editor nutzen. Und dann kommt man an den Punkt, an dem ich schon so oft war und den ich wegen einer zu steilen Lernkurve immer aufgegeben habe. Der wohl kompletteste Editor für alle Belange von Softwareentwicklung ist „emacs“, ein Dinosaurier, unglaublich umfangreich, gemacht bereits zu Zeiten, als es noch keine Maus gab – wir brauchen also noch nicht einmal eine grafische Oberfläche. Back to the roots bedeutet hier in diesem Fall ein Gewinn an Produktivität.

Emacs in action
Sieht aus wie ein lokales Programm – ist aber keines

Wenn ich mich für so etwas einscheide und mir doch die Fähigkeiten aneigne, die ich für die Nutzung von emacs brauche – wIe kann ich dann auf meinem Windows Desktop und einem Android Tablet die gleichen Bedingungen schaffen ohne zwei Umgebungen verwalten zu müssen? In dem ich einen kleinen Server miete, für 1,- EUR im Monat, dort ein minimales Debian Linux laufen lasse und emacs installiere. Diesen steuere ich auf dem Desktop und dem Tablet über einen Telnet bzw. ssh Client an und habe überall die gleichen Bedingungen. Selbst wenn mein Rechner in Flammen aufgeht und mir die Bude abbrennt – alles liegt auf meinem eigenen Server.

Ein sehr durchdachtes Farbschema für emacs habe ich hier gefunden. Protesilaos Stavrou, so heisst der Macher dieser Farbschema, hat außerdem noch viele brauchbare Videos und Blogeinträge zum Umgang mit emacs erstellt.

Und jetzt „übe“ ich diese Tastaturkürzel, die tatsächlich sehr durchdacht sind. Für alle, die ebenfalls nach so einem Einstieg suchen, ist diese Liste vielleicht hilfreich.

--- emacs : Tastaturkürzel für Windows-User ---

Vorbemerkungen
Mit C ist bei emacs und allen Dokumenten/Handbüchern/Tutorials immer die STRG bzw. CTRL Taste gemeint. M ist ALT. Wird als Tastenkombination z.B. C-x C-f angegeben, muss nacheinander STRF+x und dan STRG+f + ENTER eingegeben werden. Manchmal folgt dann noch ein weiterer Parameter (wie etwa ein Suchkriterium). Diese Kommandozeilen-Aktionen werden immer in der unteren Kommandozeile angezeigt, unabhängig davon, ob emacs in einem Terminal läuft unter einer grafischen Oberfläche

Datei und Bufferhandling
C-x C-f    + ENTER : Öffnet einen Buffer, in dem alle Dateien des aktuellen Standardverzeichnis angezeigt werden. Navigieren durch die Liste + ENTER öffnet dann diese Datei.
C-x o      Wechselt durch die offenen Buffer
C-x 0      Schliesst den aktuellen Buffer
C-x 1      Schliesst einen anderen Buffer außerhalb des aktuellen
C-x 2      Teilt den aktuellen Buffer in zwei (vertikal)
C-x 3      Teilt den aktuellen Buffer in zwei (horizontal)
 
C-x C-s    Speichert die aktuelle Datei. Wenn noch kein Dateiname vergeben 
           wurde, muss dieser angegeben werden.
C-x C-w    Speichern unter
C-x k      Schliesst die aktuelle Datei.
 
C-x C-c    Schliesst Emacs
M-x shell  Öffnet das aktuelle Verzeichnis
 
Bearbeitung
Dadurch, dass die STRG Taste eine zentrale Rolle spielt, weisen Kombinationen wie STRG+C (C-c) oder STRG+V (C-v) auf andere Funktionen in emacs hin. Dafür wurde der CUA Modus entwickelt, der einfach in den Optionen aktiviert werden kann.  Das ist vor allem für Nutzer von Windows interessant, bei denen die Shortcuts nahezu überall Standard sind und man sich ungern umgewöhnen möchte.
 
Mit CUA Mode
C-c        Kopiert den markierten Text in die Zwischenablage
C-v        Fügt den Text aus der Zwischenablage ein
C-x        Schneidet den markierten Text aus und kopiert ihn in die Zwischenablage
 
Wenn Sie bereits an diese Emacs Kürzel gewöhnt sind, dann gelten für dieser drei Optionen diese Kürzel:

Ohne CUA Mode
 
M-w        Kopiert den markierten Text in die Zwischenablage
C-v        Fügt den Text aus der Zwischenablage ein
C-w        Schneidet den markierten Text aus und kopiert ihn in die Zwischenablage
 
C-x h      Alles markieren
 
 
M-u        Wandelt den markierten Text in Großbuchstaben um
M-l        Wandelt den markierten Text in Kleinbuchstaben um
M-c        Wandelt den ersten Buchstaben in einen Großbuchstaben um
 
C-x C-+    Schrift vergrössern
C-x C--    Schrift verkleinern
M-h        Markiert einen ganzen Absatz
C-M-h      Markiert eine Funktion
C-a        Cursor an den Anfang einer Zeile
C-e        Cursor an das Ende einer Zeile
C-p        Eine Zeile nach oben
C-n        Eine Zeile nach unten
M-b        Cursor ein Wort zurück
M-f        Cursor ein Wort vorwärts
C-l        Cursor in der Mitte des Screens platzieren
M-d        + goto-line x  : Springt zur Zeile x
M-x        + comment-region : Kommentiert die aktuelle Auswahl aus
M-;        Kommentiert die aktuelle Zeile aus
M-d        Löscht das Wort am Cursor

Demnächst folgen noch weitere Infos über die verschiedene Modi in emacs und wie sich Funktionen dort automatisieren lassen.

Heute vor 30 Jahren: Ein Rekord für die Ewigkeit?

Ich weiß noch ganz genau, dass ich dieses Ereignis damals an meinem kleinen, ersten eigenen Fernseher in meiner Bude in der elterlichen Wohnung live verfolgt habe. Das ist heute auf den Tag genau 30 Jahre her. Es ist vermutlich eines der unglaublichsten, sportlichen Ereignisse.

Der Weltrekord im Weitsprung der Männer galt bis zum 30.08.1991 scheinbar für die Ewigkeit. Bob Beamon war 1968 bei den Olympischen Spielen 8,90m gesprungen. Ein präziser Sprung mit optimalen Timing. Und niemand war seitdem auch nur ansatzweise in diese Nähe gesprungen.

Bob Beamon 1968 bei den Olympischen Spielen

Der Ausnahmeathlet, der vielleicht zu so einem Sprung in der Lage gewesen wäre, war der legendäre Carl Lewis. Seriensieger und mit 8,68m, der beste Weitspringer dieser Zeit. Aber im Hintergrund lauerte ein gewisser Mike Powell, der immer im Schatten von Carl Lewis stand.

Dann kam dieser legendäre Wettkampf bei den Weltmeisterschaften 1991 in Tokio. Carl Lewis und Mike Powell auf dem Höhepunkt ihrer Leistungsfähigkeit – ein Showdown unter optimalen Bedingungen.

Mike Powell tastet sich im ersten Versuch schon mit beachtlichen 7,85m heran. Carl Lewis springt dann im ersten Versuch 8,68m – ein Rekord, denn niemand ist bei einer Weltmeisterschaft jemals weiter gesprungen. Niemand ahnt, dass dieser Wahnsinnssprung der schlechteste Versuch von Lewis in diesem Wettbewerb sein würde. Es folgen vier weitere Versuche, die vier weitesten Sprünge von Lewis in seiner ganzen Karriere – 8,83m und 8,91m hatten minimal zu viel Rückenwind. Die neue Weltrekordweite zählte nicht. Es folgen zwei weitere Sprünge auf 8,87m und 8,84m. Eine unglaubliche Serie.

Aber es reicht nicht. Nicht für den Weltmeistertitel und nicht für den Weltrekord. Denn der ewige Zweite, Mike Powell, springt zunächst im vierten Versuch an die 9m, aber der Versuch ist ungültig, da minimal übergetreten. Powell fleht die Kampfrichter geradezu an. Richtg angefresen und mit der Aussicht trotz Topform wieder nur Zweiter zu werden, gelingen ihm im fünften Versuch dann gültige 8,95m. Weltrekord. Weltmeistertitel. Der Rekord zählt bis heute. Selbst der dritte Kontrahent, Larry Myricks, springt 8,42m. Der Deutsche Dietmar Haaf springt 8,22m und das reicht nichtmal für eine Medaille. Diese Weite hätte bei nahezu allen Olympischen Spielen für die Goldmedaille gereicht.

Das nachfolgende Video zeigt diesen spannenden Wettbewerb. Was mag da in einem Carl Lewis vorgegangen sein? Ein absoluter Ausnahmetag mit herausragenden Leistungen – und doch war einer besser. Sehr sehenswert.

Carl Lewis springt so gut, wie nie – aber er fndet seinen Meister