// der php hacker

// neulich

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!

Von Links und JavaScript

Geschrieben am 29. Okt 2010 von Cem Derin

Der Knalli hat gestern bei Twitter auf einen eigentlich recht interessant und vor allem richtig klingenden Artikel verlinkt. Es geht darum, dass man Links, die in irgend einer Weise auf JavaScript-Events reagieren, nicht mit href=“#“ ausstatten soll. Soweit so gut. Der Autor gibt an, auf zwei Alternativen hinzuweisen, wie man es besser machen könnte. Zwei – so viele Fallen mir auch ein, und eigentlich habe ich nur weitergelesen, weil der Autor schon im Teaser von „History-Zumüllen“ geschrieben hat.

Was ich dann lesen musste, sorgte dafür, dass sich meine Fußnägel sprungartig aufrollten: Es wurde tatsächlich empfohlen, keinen Link zu benutzen, sondern Text einfach per CSS wie einen aussehen zu lassen.

<span style="text-decoration:underline; cursor:pointer;"
  onclick="foo();">click me</span>

Ziemlich unsauber. Nehmen wir an, ich habe CSS abgeschaltet. Was sehe ich? Nichts. Nur Text. Der, sofern ich JavaScript abgeschaltet habe, auch noch überhaupt nichts macht. Nicht sehr Benutzerfreundlich.
// mehr lesen

Geschrieben in Javascript 13 Kommentare

“Developers Shame Day”, Feed-URL und Kleinkram

Geschrieben am 28. Okt 2010 von Cem Derin

Hui, mit so einer Resonanz habe ich nicht gerechnet. Mehrere Dutzend Retweets auf Twitter, eine ganze Reihe Blogeinträge und sogar ein Event auf Facebook. Letzeres kam von Manuel Wildauer, teilnehmen könnt ihr trotzdem. Und wenn ihr noch andere Entwickler im Freundeskreis habt, die ein Blog oder eine Seite betreiben, könnt ihr die ja vielleicht auch einladen. Jedenfalls hat mir meine kleine Idee einen Besucherstrom beschert, der alles andere geschlagen hat (die beiden anderen Peaks waren eine Erwähnung auf der O’Reilly-Seite und eine auf den Seiten des PHP Magazins).

Aber kommen wir zu etwas nicht ganz so erfreulichem: Aus irgend einem Grund wurde mein WordPress bei irgend einem Update zerschossen. Zunächst nur an der “Not Found” Meldung im Footer zu erkennen, stellte ich erst durch eine eMail fest, dass auch meine Feed-URLs verschwunden waren. Das ist schade … so werde ich wahrscheinlich eine ganze Menge Abonnenten verloren haben, die durch die DSD-Aktion hier her kamen – und vergeblich nach einem Feed suchten. Ich hab die URL händisch nachgetragen, da ich ohnehin (mal wieder) ein neues Layout plane. Das wird dann auch etwas knackiger. Und da setzen wir dann einfach ein frisches WordPress auf.

Nebenher: Die, die immer noch treu den Feed im Abo haben, werden gemerkt haben, dass hier fast ein ganzes Jahr Sendepause war. Das lag zum einen an ziemlich viel Arbeit. Gefolgt von einer Schreibblockade gefolgt von anderen Interessen. Andere Interessen dahingehend, dass ich mich – jedenfalls privat – mehr und mehr Objective-C zugewandt habe. Es ist nicht so, dass ich damit aufgehört hätte, aber zumindest schreibe ich wieder verstärkt PHP (nicht zuletzt wegen einem Projekt, für das ich Anfang des Jahres Beta-Tester gesucht habe). Und da kamen mir dann auch wieder Artikel-Ideen. Endlich wieder was zu verbraten.

Ich habe mir zwar irgend wann einmal einen Vorsatz gemacht, hier regelmäßig zu schreiben, aber ich kann zum einen leider nicht auf einen so großen Autoren-Pool zurückgreifen wie Nils (obwohl Nils alleine auch schon eine ganze Menge schreibt), noch auf die fundierte Fachkenntnis von Michael (der sein Blog erst nach mir startete, aber trotzdem ratzfatz an mir vorbei zog). Ich mache das hier aber auch nicht um “groß” zu sein, “viele Leser” zu haben und “bekannt” zu werden. In erster Linie mache ich das, weil ich allein durch dieses Blog sehr viele nette Leute kennengelernt habe, die ich teilweise sogar heute zu meinen Freunden zählen würde (wobei ich nicht mal weiß, ob das auf Gegenseitigkeit beruht ;) ). Deswegen: Verzeiht mir meine lange “Auszeit”. (Warum ich nie ins phmnetwork eingeladen wurde, verstehe ich aber trotzdem nicht ;) )

Im Dezember feiert dieser Blog übrigens Zweijähriges bestehen, und ich denke darüber nach, eventuell soetwas wie eine kleine Verlosung zu veranstalten. Vielleicht habt ihr ja auch andere Ideen.

Geschrieben in Allgemein, Interna Ein Kommentar

Enterprise Development

Geschrieben am 27. Okt 2010 von Cem Derin

Vielleicht schon dem ein oder anderen bekannt: Die Enterprise-Development Tipps, die man sich eventuell nicht ganz so sehr zu Herzen nehmen sollte. Schön: Teilnehmen bzw. neue “Tipps” hinzufügen kann man, in dem man sich bei github an dem Projekt beteiligt. Viel Spaß!

http://enterprise-js.com/

http://enterprise-html.com/

http://enterprise-css.com/

Vielleicht habt ihr ja auch noch ein paar “lustige” Developer-Seiten in petto?

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.

XINGs Recruiting Methoden

Geschrieben am 27. Jan 2010 von Cem Derin

Eine sehr nette Idee, um sich fähige Entwickler an Bord zu holen hat XING:

Bildschirmfoto 2010-01-27 um 13.02.25

Auf der anderen Seite: Haben sie derzeit aber auch dringen nötig =)

Warum ist das eigentlich noch keinem aufgefallen?

Geschrieben am 23. Jan 2010 von Cem Derin

chalmer_balmer

Geschrieben in Allgemein Ein Kommentar

PHP Blog-Sammlung

Geschrieben am 12. Jan 2010 von Cem Derin

Ein kleiner Hinweis: Der PHP Gangsta (vom Namen darf man nun halten was man will ;) ) stellt derzeit eine mehr oder weniger ausgewählte Liste von deutschsprachigen PHP-Blogs zusammen, die halbwegs aktuell sind und nicht mehr auf Anfängerniveau schreiben zusammen. Ich habe mich ganz dreist selbst vorgeschlagen. Falls jemand noch Ergänzungen hat, könnt ihr ihm diese ja auch mal zukommen lassen.

Geschrieben in Blogosphere, PHP 2 Kommentare

(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
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.