Archiv der Kategorie ‘Programmierung’

Debug-Modus per Cookie

24. März 2010

Jeder Entwickler baut sich wohl seinen eigenen Debug-Modus für seine Anwendungen. Bisher habe ich bei Webanwendungen meist GET Parameter verarbeitet. Mit den prinzipbedingten Nachteilen – z.B. Tracking über mehrere Seiten. Andere Variante ist per Config-Variable den Debugmodus einzuschalten. Oder abhängig von der Source-IP. Oder wie auch immer.

Eine andere Methode habe ich mir von Google abgeschaut: Setzen von Spezialmodi per Cookie über die Adressleiste des Browsers. Google hat schon des öfteren neue Funktionen zunächst nur für einen “eingeweihten” Nutzerkreis zugänglich gemacht. Eingeschaltet wurde die Funktion dann über ein spezielles Cookie. Gesetzt wurde dieses einfach über die Adressleiste des Browsers. So hat z.B. die folgende Eingabe in der Adressleiste auf google.com das “suggest” Feature eingeschaltet:

javascript:document.cookie= "PREF=ID=175eb54605c0202d:U=a14f58424228a2a5:LD=en:
NR=10:CR=2:TM=1240146048:LM=1242596928:DV=AA:GM=1:IG=1:S=zW53HscJwnEL89bQ;
path=/;domain=.google.com";void(0);

Mittlerweile verwende ich auch immer öfter dieses Verfahren:

javascript:document.cookie="xyz_debug=1";window.location.reload();

Das so gesetzte Cookie mit dem Namen “xyz_debug” kann man dann einfach mit bekannten Funktionen serverseitig auswerten (hier PHP):

if ($_COOKIE["xyz_debug"]) {
    var_dump($_POST);
}

Natürlich sollte das verwendete Cookie nicht leicht zu erraten sein. Ich wüste gerne wie viele Debugausgaben in den weiten des Internets darauf warten über versteckte Zugänge, Parameter etc. abgerufen zu werden ;)

PHP: strpos mit Integern

24. März 2010

Wieder 2 Stunden bei der Fehlersuche verplempert…

$string = "X20";
echo (strpos("XYX20", $string) !== false) ? "JA" : "NEIN";
 
$string = 20;
echo (strpos("XYX20", $string) !== false) ? "JA" : "NEIN";

Output:

JA
NEIN

Erwartet hätte ich 2x “JA”. Leider habe ich nicht in die Doku zu strpos geschaut – hätte mir einiges an Zeit für die Fehlersuche erspart. Es ist aber immer so: Die Funktion strpos habe ich schon 1000 Mal verwendet und den Fehler definitiv nicht dort vermutet.

So geht’s:

$string = 20;
echo (strpos("XYX20", (string)$string) !== false) ? "JA" : "NEIN";

Merke: gerade die viel gelobte/gehasste vermeintlich dynamische Typumwandlung von PHP stellt einem oft ein Bein.

DNS: Wildcard Records

1. Februar 2010

Eine Sache die mir beim DNS gar nicht so bewusst war: Wildcard Records. Bei Webanwendungen arbeite ich gerne mit einem Default-Hosting und lasse die Anwendung bestimmen was bei welchem Hostnamen passiert (über den HTTP1.1 Header). In letzter Konsequenz fehlte mir eigentlich nur noch, dass ich die Hostnamen nicht mehr in die DNS-Zone eintragen muss.

Logische Folgerung (Auszug auf dem Bind-Zonenfile):

*.sub.bergercity.de.     IN A    88.151.66.11

1,2 Sekunden (eine Ewigkeit)

19. Januar 2010

Bei mir jetzt auch ein Artikel über Profiling. Soeben erlebt: Eine relativ kleine Webseite mit eigenem ollen CMS brauchte relativ lange (1,25 Sekunden) um eine Seite zu generieren. Zunächst die Datenbankabfragen angeschaut – nichts schlimmes gefunden. Also schnell den (proprietären) Profiler angeschmissen. Es zeigte sich folgendes Bild:

1,2 Sekunden? Arg viel. Ein Blick in die betreffende Zeile:

$string = strtr($string, $replace);

Hmm, da scheint strtr wohl nicht so performant zu sein. Noch nett ausgedrückt. Ausweichcode ausprobiert:

foreach ($replace as $key => $value) {
       $string = str_replace($key, $value, $string);
}

Dauert jetzt 12ms. Unglaublich.

Links
http://www.cznp.com/blog/3/strtr-vs-str_replace-a-battle-for-speed-and-dignity
http://www.simplemachines.org/community/index.php?topic=175031.0

Browser Clipboard

23. November 2009

In modernen Browsern ist mittlerweile der Zugriff auf die Zwischenablage nicht mehr erlaubt (aus gutem Grund). Möchte man aber den Benutzern seiner Webapplikation zumindest das schreiben in die Zwischenablage ermöglichen, gibt es einen Workaround: Der Umweg führt über das Adobe Flash Plugin…

Der Link zum Script: Zeroclipboard. Nicht das ich das jetzt unbedingt bräuchte – aber man weiß ja nie.

MySQL Substring

5. September 2009

Fast jede Programmiersprache hat eine Funktion für Substring. MySQL auch. Nur verhält sich die MySQL-Variante dieser Funktion anders als von mir vermutet…

SELECT SUBSTRING('abcd', 1, 3);

sollte eigentlich IMHO “bc” zurückgeben. Tut es aber leider nicht, weil MySQL schlauerweise bei 1 (statt bei 0) anfängt zu zählen – es muss also für MySQL so lauten:

SELECT SUBSTRING('abcd', 2, 4);

Merkwürdig dieses SQL… Dokumentiert ist das ganze hier.

Nagios Mail auf dem iPhone

12. Juli 2009

iphone_nagios_mailDie Extended Nagios Notification Mail ist jetzt für das iPhone optimiert. Bei der Gelegenheit habe ich mir gleich mal die entsprechenden Safari-Erweiterungen angeschaut…

Da die HTML-Mail auch vom Safari gerendert wird, helfen hier auch die iPhone-Erweiterungen. Im wesentlichen das Safari Meta-Tag “viewport”. Viele weitere nützliche Infos dazu gibt es in der Safari Referenz. So kann man z.B. auch die Ausrichtung des Bildschirms per Javascript auslesen und sogar Touch-Events auswerten.

Folgendes Beispiel legt die imaginäre Breite der im Safari dargestellten Seite auf 600 Pixel fest.

<meta name="viewport" content="width = 600">