// der php hacker

// archiv

Meine erste „Template-Engine“

Geschrieben am 03. Nov 2010 von Cem Derin

Die Resonanz zum Developers Shame Day war überwältigend (Feedback auf Twitter, Facebook und im restlichen Netz). Ich habe ich mich sehr über das zahlreiche Feedback gefreut, und wenn ihr diesen Beitrag hier lest, werdet ihr wahrscheinlich auch in dem ein oder anderen Blog schon ein Stück Schamcode zu sehen bekommen.

Leider habe ich die Trackback-Funktion noch nicht in die Templates einbauen können, aber wenn ihr einen Kommentar mit einem Link hinterlasst, sollte das ja auch erst einmal reichen (zu mal häufig Trackbacks gar nicht bei mir ankommen).

Natürlich stelle ich mich auch den Geistern der Vergangenheit und hab das älteste Stück PHP aus meiner Feder herausgesucht, dass ich finden konnte. Zu dem Zeitpunkt habe ich schon mit PHP mein Geld verdient, habe angenommen, ich wäre ein „fortgeschrittener Programmierer“ und habe das Stück Code in unzähligen Projekten effektiv eingesetzt. Es handelt sich um eine Template-Engine. Früher war sowas beliebt. Früher wusste ich auch nicht, was eine Klasse ist und habe den Begriff inflationär – und falsch – verwendet!

Ich war früher unglaublich stolz, heute blicke ich selbst nicht mal mehr wirklich durch. Aber genug geredet. Ich verstecke mich und ihr dürft gucken!

<?php
     /*
       Template-Klasse v1.1
       von Cem Derin, 2002-2004
     */

       // Array Funktionen

       // Array für einfachen Parser
       function array_simple($srcarray, $name, $key) {
           // Indexzahl des übergebenen Arrays ermitteln
           $icount = count($srcarray);

           // Neues Item hinzufügen
           $srcarray[$icount]['name'] = $name;
           $srcarray[$icount]['key'] = stripslashes($key);

           // Array wieder ausgeben
           return($srcarray);
       }

       // Array für Schleifen-Parser
       function array_loop($srcarray, $addarray) {
           // Indexzahl des übergebenen Arrays ermitteln
           $icount = count($srcarray);

           //Neues Item hinzufügen
           $srcarray[$icount] = $addarray;

           //Array wieder ausgeben
           return($srcarray);
       }

       // Parser-Funktionen

       // Einfacher Parser
       function parse_simple($source, $replace) {
           // Indexzahl des übergebenen Arrays ermitteln
           $icount = count($replace);

           // Quelle ¸bergeben
           $quelle = $source;

           // Counter initialisieren
           $counter = 0;

           //Schleife starten
           while($counter < $icount) {
               // Variable in Quelle ersetzen
               $quelle = str_replace($replace[$counter]['name'], $replace[$counter]['key'], $quelle);

               // Counter erhöhen
               $counter = $counter + 1;
           }

           // Bearbeitete Quelle ausgeben
           return($quelle);
       }

       // Schleifen Parser
       function parse_loop($source, $replace, $loop) {
           // Die Quelle in Array schreiben
           $quelle = split($loop, $source);

           //Die Einträge zählen
           $q_count = count($quelle);

           // Den Quellen-Pointer initialisieren
           $q_counter = 0;

           // Die Routine für jeden Quelleneintrag wiederholen
           while($q_counter <= $q_count) {
	           // Prüfen, ob die Quellzeile eine Loop-Zeile ist
	           if(grade($q_counter) != 0) {
		           // Die Quellzeile ist eine Loopzeile
		           // Ermitteln, wieviele Datensätze der Loop-Array hat
		           $l_count = count($replace);

		           // Loop-Array-Counter initialisieren
		           $l_counter = 0;

		           // Die Routine für jeden Datensatz wiederholen
		           while($l_counter < $l_count) {
			           // Ermittlen, wieviele Items der Datensatz hat
			           $i_count = count($replace[$l_counter]);

			           // Itemcounter initialisieren
			           $i_counter = 0;

			           // Den Rohling erstellen
			           $rohling = $quelle[$q_counter];

			           // Die Routine für jedes Item wiederholen
			           while($i_counter < $i_count) {
				           // Rohling bearbeiten
				           $rohling = str_replace($replace[$l_counter][$i_counter]['name'], $replace[$l_counter][$i_counter]['key'], $rohling); 

				           // Counter erhoehen
				           $i_counter = $i_counter + 1;
			           }

			           // Den Rohling mit den Vorgängern verbinden
			           $output = $output. $rohling; 

			           // Loop-Array Counter erhöhen
			           $l_counter = $l_counter + 1;
		           }

		           // Die neue Zeile eintragen
		           //$quelle[$q_counter] = $output;
		           $return = $return. $output;
		           $output = $NULL;

	           } else {
		           // Eine Grade Zahl, kein Loop
		           $output = $output. $quelle[$q_counter];
	           }

	           // Quellen-Pointer erhöhen
	           $q_counter = $q_counter + 1;
           }

           // Ausgabe
           return($return);

       }

       // Ist eine Zahl grade
       function grade($zahl) {
	       return($zahl % 2);
       }
?>

Und frei zur Verfügung gestellt hab ich das damals auch schon hier! Da gibts sogar noch ne Anleitung!

Der “Developers Shame Day”

Geschrieben am 26. Okt 2010 von Cem Derin

Ich schreibe momentan an einem Artikel, in dem ich relativ viel über sehr alten Code von mir referiere. Keine Sorge, im Grunde nutze ich eigenes Getippsel als Negativ-Beispiel. Wenn man anders will, kann man auch sagen, ich zeige, dass man sich durchaus verbessern kann, wenn man nur will.

Während ich also auf alten Backup-CDs nach dem möglichst ältesten Code von mir suchte (was leider nicht so einfach sind, da sich CDs offensichtlich schon nach wenigen Jahren selbst zerstören), fiel mir auf, dass ich selten „Shame Code“ von anderen Leuten sehe. Jedenfalls nicht freiwillig. Arbeitsbedingt sieht man dann und wann 10-Jahre alten Legacy-Code der vermutlich in einer Kaffeegeschwängerten Nachtschicht kurz vor dem Morgengrauen in den Cherry-Klotz gehackt wurde. Aber bewusst, freiwillig und vor allem Öffentlich? Nein, ich kann mich nicht erinnern.

Aus diesem Grund möchte ich eine kleine Aktion unter den Entwickler-Blogs starten: Der Developers Shame Day! Ein Tag, an dem wir mal von unserem oft hohen Ross absteigen und uns bewusst werden, dass auch wir mal Anfänger waren. Ein Tag, an dem wir aller Welt vorführen, dass auch wir schon einmal total Murks fabriziert haben.

Wann soll das sein?

Als Stichtag würde ich den 3.11.2010 vorschlagen. Ich stelle mir vor, dass an diesem Tag alle Entwickler, die ein Blog oder eine Seite betreiben, ein kleines Stück Code präsentieren, dass aus heutiger (oder vielleicht auch damaliger) Sicht total hirnverbrannt ist. Ein Stück Code, dass uns selbst die Schamröte ins Gesicht steigen lässt. Dabei ist egal, ob es sich um PHP, JavaScript, CSS, HTML, Java, C oder sonst etwas handelt. Es muss nur von euch sein und es darf nicht verändert werden (umeventuell doch als total verrückter Hund dazustehen ;) ). Ein kleiner erläuternder Text sollte natürlich auch nicht fehlen.

Weitersagen?

Klar, ich würde mich freuen, wenn sich möglichst viele Leute beteiligen wollen. Insofern fände ich es auch super, wenn die unter euch, die selbst in irgend einer Weise im Netz publizieren, auf meinen kleinen Vorschlag hinweisen könnten! Als Wiedererkennungsmerkmal habe ich eine kleine Grafik gebastelt, die gerne benutzt werden kann!

Zusammengefasst!

  1. Wenn ihr Bock drauf habt, weist auf diese Aktion hin.
  2. Wenn ihr noch mehr Bock drauf habt, macht am 3.11.2010 selbst bei der Aktion mit!
  3. Wenn ihr ganz hart im nehmen seid, verweist auf diesen Artikel, damit andere euren Code finden und euch in der Luft zerreissen können ;)

Zend Framework Captcha erzeugt monströse Bildchen

Geschrieben am 18. Okt 2010 von Cem Derin

Heute habe ich ein (stand alone) Formular schnell und einfach mit dem Image-Captcha aus dem Zend-Framework aufgerüstet. Kein Problem, soweit … wenn man davon absieht, dass man weder Schrift- noch Hintergrundfarbe der Grafik beeinflussen kann. Weitaus nerviger ist da schon die Tatsache, dass man das Ausgabeformat ebenfalls starr vorgesetzt bekommt. Wenn man an diesen Stellen jedoch keinen Anspruch hat, ist das nicht weiter schlimm. Als ich dann aber in das Verzeichnis, in das die Bilddaten geschrieben werden geschaut habe, habe ich nicht schlecht gestaunt: Jedes einzelne CAPTCHA ist um die 900kb groß – viel zu viel für eine 300×50 Pixel große Grafik. Auch ein rumschrauben am Quality- und Filter-Parameter hat nichts gebracht. So ist das ganze leider unbrauchbar für mich.

Ist jemandem das Problem schon mal über den Weg gelaufen? Könnte es an der GD-Version liegen (bundled (2.0.34 compatible))? Für Hilfestellung bin ich dankbar.

(Not) The 2010 Bug

Geschrieben am 05. Jan 2010 von Cem Derin

Da ich jetzt zum geschätzten 20. mal per eMail darauf aufmerksam gemacht wurde und es mir auch eben in einem Forum über den Weg lief, will ich mal klarstellen, dass dieser Code hier keinen (und schon gar nicht einen y2010) Bug darstellt.

var dateObj = new Date();
var curYear = dateObj.getYear();
alert(curYear);

Wer wissen will, was dabei rauskommt, der kann auch mal hier klicken. Wem das nun komisch vorkommt, dem darf man ruhigen Gewissens ein herzhaftes RTFM an den Kopf werfen. Frohes Neues =)

Geschrieben in Javascript, Kurioses 7 Kommentare

Von Eastereggs und wie man sie verstecken kann

Geschrieben am 16. Dez 2009 von Cem Derin

Uns Entwicklern wird oftmals abgesprochen, dass wir Kreativ sind. Das erkennt man leider schon oft daran, dass in den meisten Agenturen zwischen „Kreativen“ und „Entwicklern“ unterschieden wird. Dabei ist das alles andere als Gerechtfertigt. So verstehen wir unser Handwerk ebenfalls als eine „Kunstform“, erkennen in schönem Code Ästhetik, wo das ungeschulte Auge nur wirre Zeichenfolgen sieht. Investieren wir doch viel Liebe und Herz in den Aufbau und die Gestaltung unserer Applikationen ist es letztlich am Ende für den Anwender doch nur ein Werkzeug. Mich persönlich stimmt es dann und wann traurig, wenn der Betrachter das Kunstwerk, das man geschaffen hat nicht würdigt – oder würdigen kann. Aber daran wird man wohl auch nie etwas ändern können: Das was für die meisten an Software „schön“ ist, ist in der Regel nicht einmal die Software selbst sondern eben das, was die „Kreativen“ dazu beigetragen haben.

All das soll mich aber nicht daran hindern, meine Signatur unter das zu setzen, was ich schaffe. Damit meine ich nicht meinen Namen in den Kommentaren, damit meine ich auch nicht, dass ich ans Dokumentende ein pubertäres „hacked together by Cem Derin“ klatsche. Oftmals ist das ja auch gar nicht möglich. Nein, ich meine, dass ich meine Handschrift so hinterlasse, dass Sie zwar Sichtbar ist – aber trotzdem auch Unsichtbar. Dazu bediene ich mich dem, was gemeinhin als „Easteregg“ bekannt ist. So stelle ich sicher, dass meine Software von den Leuten gewürdigt werden kann, die dazu auch in der Lage sind.

Viele Seiten beinhalten einen kleinen Scherz, einen Kommentar, einen Witz oder ähnliches, wenn man bestimmte Tastenkombinationen auf einer Seite betätigt. Das hat den Nachteil, das ein gewisser Anteil JavaScript nachgeladen werden muss und man ggf. auch Resourcen einbettet, die kein Mensch freigegeben hat. Da man sowas natürlich auch nicht mit seinem Gewissen vereinbaren kann, hatte dies zur Folge, dass meine Eastereggs so versteckt waren, dass sie keiner Gefunden hat.

Irgendwie hat auch das geschlaucht. Da gab es dann aber noch eine andere Möglichkeit, wie man ein Easteregg unterbringen kann: ASCII-Art. Obwohl, nicht direkt. Im Grunde meine ich nur das hinzufügen von zusätzlichem Whitespace. Man verändert den Inhalt nicht, sondern lediglich die Formatierung, so dass dem Betrachter eine Botschaft ohne jegliche Nebenwirkungen übermitteln kann.

Dazu habe ich ein kleines Programm geschrieben, dass zwar noch alles andere als ausgereift ist, aber seinen Zweck trotzdem schon erfüllt. Zu finden ist es hier. Und wer sich nun fragt, was das Ding macht – der schaue sich den Quelltext dieses Beitrags an =)

Übrigens: Die Textbasis ist derzeit die, die ihr hier grade lest. Das wird sich aber bald ändern. Außerdem stehen die Einstellungsmöglichkeiten noch nicht zur Verfügung – denn um ein halbwegs zufrieden stellendes Ergebnis zu erzielen, muss man ganz schön den Parametern rumjustieren.

URL-Shortener http://to./

Geschrieben am 06. Dez 2009 von Cem Derin

Vor ein paar Tagen schwirrte etwas durch interessantes meine Twitter-Timeline. Ich weiß leider nicht mehr von wem (geschweige denn den genauen Wortlaut), aber es ging um den angeblich “kürzesten” URL-Shortener der Welt. Anbei war ein Link zu http://to./

Folgt man diesem, so landet man auf einer sehr rudimentären (bzw. definitiv von einem Entwickler gestalteten) Eingabemaske, die eine URL, einen Namen sowie ein Passwort annimmt. Versucht man allerdings das Formular auszufüllen und abzuschicken, passiert – nix.

Das könnte natürlich daran liegen, dass unter dem Formular in roten Lettern darauf hingewiesen wird, dass das ganze Teil (noch) nicht für den öffentlichen Gebrauch bestimmt ist. Wie dem auch sei.

Wirklich interessant ist: Wie kommt man an eine Domain “to.”? Viele werden wahrscheinlich wegen dem Punkt am Ende verwirrt sein. Prinzipiell kann man aber jeden TLD mit einem Punkt am Ende aufrufen. Und im DNS stehen sie sowieso genau so drin. Hier ist er allerdings wichtig, da die eingegebene URL nur so vom Browser als FQDN erkannt wird. Was macht der Browser nun? Er lässt im DNS nachschauen, wohin die Domain to. auflöst. Und das ist auch schon der Knackpunkt: to. wurde als Ressource eingetragen, löst korrekt auf eine IP auf und hinter dieser verbirgt sich ein Webserver. Padabing!

Und warum kam das nicht eher? Weil es eher unbequem, verwirrend und die Auswahl der möglichen Domains eher eingeschränkt ist ;)

Geschrieben in Allgemein, Kurioses 3 Kommentare

Egosurfing

Geschrieben am 25. Mrz 2009 von Cem Derin

Gerade einen paar Wochen alten Forenthread gelesen, über einen Post gestolpert und drüber geschmunzelt. Dann fiel mir auf, dass ich den Post selbst geschrieben habe. ;-)

Der Satz, den ich amüsant fand: “Prinzipiell ist es mir egal, aber man muss auch nicht auf jeden Zug aufspringen, der durch den Entwicklerbahnhof fährt und fancy aussieht“.

Geschrieben in Interna, Kurioses Kommentieren

Meine Backup-Nemesis

Geschrieben am 18. Mrz 2009 von Cem Derin

Ich gebe es zu: Ich bin eine Backup-Niete. Ich lege Backups immer nur sporadisch, schlampig und hastig an. Und meistens arbeite ich an dieser Strategie nur, wenn ich einmal auf Backups angewiesen war und – Überraschung – keine zur Verfügung hatte. Beruflich ist das kein Problem: Da übernehmen andere Leute die Arbeit für mich. Leute, die Ahnung von dem haben was sie tun – und keine Ahnung von dem was ich tue. Aber privat ist und war das schon immer ein Problem (vor allem in meiner Freelancer-Zeit).

Ich muss allerdings dazu sagen, dass ich mich immer irgendwie aus dem ärgsten rauswinden konnte. Quelltexte hatte ich verstreut zwischengelagert und konnte das meiste innerhalb einer angemessenen Zeitspanne wieder zusammenklauben. Layouts waren irgendwo mal als eMail verschickt worden, wenn auch in früheren Versionen. Und eMail-Korrespondenz hat man durch Weiterleitungen ohnehin auf mehreren IMAP-Servern.

Da ich in vielen Bereichen meines digitalen Lebens ein pedantisches Arschloch bin und auf meinem Desktop mehr Ordnung herrscht als in meiner WG-Stube, meine MP3′s wie meine Platten penibel nach Jahrgang und Genre Sortiert sind, ist mir das Thema Backups immer ein übles Dorn im Auge gewesen und befleckte meine ansonsten blütenweiße Nerdweste. Aus diesem Grund will ich mal meine (laut Feedbruner nicht mehr so kleine) Leserschaft zu rate ziehen, und mir ein paar Best Practices für “Desktop”-Backups abholen. Evtl. gibt es ja auch ein paar Buchempfehlungen o.ä. ;-)

Ich freue mich schon.

Dinge die man nicht mehr missen will, Teil 1

Geschrieben am 15. Mrz 2009 von Cem Derin

Neulich saß ich bei einem Kollegen am PC Mac, und wollte schnell ein paar Zeilen hacken (wäre einfacher gewesen als an meinem Arbeitsplatz die entsprechenden Dateien zu suchen und zu öffnen). Da ich einem völlig anderen Editor gegenüber saß, musste ich mich zunächst im Quelltext zurechtfinden. Seine lustige kleine Mighty Mouse hatte zwar einen kleinen Scrollball, der war aber defekt. Ich fand es erstaunlich, wie oft ich instinktiv versuchte, damit zu scrollen. Mir wurde klar: Nie wieder eine Maus ohne Scrollrad.

Geschrieben in Allgemein, Kurioses Ein Kommentar

Es ist genau 1234567890 Uhr!

Geschrieben am 14. Feb 2009 von Cem Derin

Wir haben soeben den Unix-Timestamp 1234567890 passiert. Herzlichen Glückwunsch! Das macht uns keiner mehr nach!

Geschrieben in Kurioses Ein Kommentar
theme von mir, software von wordpress, grid von 960 grid system. funktioniert in allen browsern, aber der safari bekommt das mit der schrift am schönsten hin.