// der php hacker

// archiv

Re: Crap Code – Warum gibt es so viel schlechte Software?

Geschrieben am 02. Dez 2010 von Cem Derin

Ralph hat sich vom letzten Artikel von Nils inspirieren lassen, und seine Antwort als eigenen Post verfasst. Find ich gut und hab ich auch schon gemacht.

Aber, es geht um was anderes: schlechten Code. Oder: wie kann man ihn vermeiden. Nils gibt dazu ein paar Tipps zur Hand. Grundsätzlich stimmen die auch alle, trotzdem gibt es dahingehend von mir noch zu kommentieren: die besten Vorgänge, die ausgefuchsten Prozesse, hochwertigsten Tipps und die knackigsten Checklisten schützen nicht vor Blödheit. Doofes Wort, ist aber so. Das allerwichtigste ist zu begreifen, wofür das alles gut sein soll. Und wenn man das auf die Einnahmen der Firma und somit auf das Gehalt runterbricht, wird das den allermeisten auch schlagartig bewusst ;)

Zu Ralphs Meinung hab ich dann etwas mehr zu erzählen. In erster Linie stört mich, dass er seine Meinung als “das ist so” hinstellt. Das mach ich auch dann und wann, versuche aber auch zu erläutern, warum das so ist. Aber das ist nur eine Formalität. Ich unterstelle ihm einfach mal, dass er es doch mehr als “Thesen” verstanden wissen will. Dann gehe ich mal auf die einzelnen Punkte ein.
// mehr lesen

Zwei Dinge, die mich immer schon an Webapplikationen genervt haben

Geschrieben am 16. Nov 2010 von Cem Derin

Es gab eine Zeit, da war eine Webapplikation nichts weiter als die etwas hübscher aufbereitete Darstellung von Daten die an gewissen wenigen Punkten sogar dynamisch war. Ich erinnere mich da an meine ersten Tage im Internet zurück. Damals war GMX so ein Dienst, wo man kostenlos eine Email-Adresse bekommen hat. Wow. Eine Email-Adresse. Sowas hatte nicht jeder – lag vielleicht auch daran, dass kaum einer (oder zumindest keiner den ich kannte) wusste, was das eigentlich ist. Über eine Weboberfläche konnte man Emails schreiben und lesen. Unglaublich unkomfortabel und hässlich – jedenfalls aus heutigen Gesichtspunkten.
// mehr lesen

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!

Wusstest du schon …

Geschrieben am 31. Dez 2009 von Cem Derin

… dass PHP jonglieren kann? Und zwar mit Typen. Type juggling nennt man das, was passiert, wenn man einen String mit dem Inhalt “1″ versucht mit einem Integer zu addieren. Oder wenn man den String “Foo” mit dem Booleschen Wert “true” vergleicht: PHP würfelt die Typen einmal kräftig durch. Das sieht manchmal willkürlich aus, ist es meist aber nicht. Damit man keine bösen Überraschungen erlebt, sollte man sich mal diese Comparison Tables zu Gemüte führen.

Das wird dann auch mein letzter Post für dieses Jahr gewesen sein. Ich denke ich werde dann und wann noch einmal ein paar “wusstest du schon”-Beiträge raushauen. Ich hoffe ich konnte euch die Brückentage etwas verkürzen und vielleicht das ein oder andere neue erzählen. Ich wünsche euch allen einen guten Rutsch ins neue Jahr (… nen Fünfer ins Phrasenschwein – oh Mist. Schon wieder ;) ) und wir sehen uns dann 2010 in alter Frische wieder! Und als kleines Silvestergeschenk noch dieses tolle Video. Über den Song kann man streiten, aber die Performance ist toll. Also dann: Ciao!

Wusstest du schon …

Geschrieben am 28. Dez 2009 von Cem Derin

… dass das schließende PHP Tag nicht zwingen notwendig ist? Im ZF findet man es kaum, PDT lässt es seit ein paar Versionen auch weg und meine Wenigkeit ebenfalls.

Aber warum macht man das? Zwei Gründe: Der erste ist mit Sicherheit eine gewisse Faulheit. Der zweite jedoch hat Hand und Fuß: Man stell sich vor, hinter dem schließenden PHP-Tag befindet sich ein Zeilenumbruch oder Whitespace. Wird nun kein Output-Buffering benutzt, wird man keine Cookies oder Customized Header mehr setzen können. Das wäre natürlich blöd.

Während den Tagen bis zum neuen Jahr werde ich immer mal wieder ein bisschen aus dem Trick- und Nähkästchen plaudern. Die arbeiten an Brawler stagnieren derzeit ob des Fresskomas unter dem ich grade leide, aber da mich mein gähnend Leerer Feedreader annervt, will ich wenigstens dazu beitragen, dass ein wenig passiert.

Von Hackern, Crackern, Entwicklern, Sicherheit und all dem Zeug

Geschrieben am 03. Mai 2009 von Cem Derin

Irgendwer hatte mich neulich mit den Worten “martialischer Blogtitel” (sinngemäß) verlinkt. Ich nehme an, man bezog sich da auch das “Hacker”. Nun, im Grunde weiß ja jeder, der soch ein bisschen mit der Materie beschäftigt hat, dass jeder ein Hacker ist, der gerne Programmcode schreibt, Hintergründe verstehen will und Experimentierfreudig ist. Sicherlich, in der “bürgerlichen” Welt ist ein Hacker ein nebulöser Technikfreak, der im abgedunkelten Raum vor einem grün flimmernden Monitor sitzt und Bankzugangsdaten sowie militärische Abschusscodes stiehlt, um sie an den Russen Chinesen Islamisten zu verkaufen. Abgesehen von der Tatsache, dass niemand mehr Monochrom-Monitore nutzt (und ich zum Beispiel nie benutzt habe ;-) ), sind diese Leute natürlich auch Hacker – sie haben Spaß an den selben Sachen. Das macht im Umkehrschluss Hacker aber nicht zu Kriminellen.


// mehr lesen

Geschrieben in Hintergrund, Interna 3 Kommentare

Die Sache mit dem Vertrauen in den Entwickler

Geschrieben am 29. Apr 2009 von Cem Derin

Ich habe heute einen sehr interessanten Blogartikel gelesen. Der erste ist von Tim: Er plaudert eigentlich nur ein bisschen über Twitter, wie er es benutzt und was er davon hält. Nichts weltbewegendes eigentlich. Der wirklich interessante Aspekt ergab sich erst in den Kommentaren. Ich gab meinen Senf dazu, und erzählte, dass Twitter für mich mehr oder weniger die nächste evolutionäre Stufe dessen darstellt, was ich früher mit dem IRC gemacht habe: In Kontakt mit Gleichgesinnten bleiben. Ich bin immer schon mehr der Freund von “öffentlichen” Runden als von “direktem” Kontakt gewesen. Sprich, ich hab es lieber mit Mehreren gleichzeitig zu reden – so ergeben sich eben viel interessantere Diskussionen. Aber ich schweife ab … Tim jedenfalls kam mit dem Aspekt, dass diverse Dinge am Computer ablenken.


// mehr lesen

Warum die() so oft falsch eingesetzt wird

Geschrieben am 27. Apr 2009 von Cem Derin

Wir kennen die Funktion alle: die(). Bewirkt einen sofortigen Abbruch der Ausführung des Scriptes und ermöglicht ein allerletztes Lebenszeichen aus dem Script heraus. Anzutreffen vor allem als Debug-Werkzeug, wenn kein Debugger zur Verfügung steht. Allerdings ist diese Funktion darüber hinaus auch noch zu fragwürdiger Bekanntheit in einer Unzahl von Tutorials gelangt. Warum “fragwürdig” und warum “die();” im Grunde nicht eingesetzt werden sollte, möchte ich im folgenden erklären.


// mehr lesen

Versuchen und fangen: Ein paar Hinweise zu try-catch

Geschrieben am 26. Apr 2009 von Cem Derin

Ich wollte schon länger ein paar Worte zu diesem Thema schreiben. Ausschlaggebend war die Tatsache, dass viele Entwickler (oder die, die sich dafür halten), Exceptions durchaus einsetzen, aber offensichtlich nie verstanden haben, wie das Prinzip funktioniert, denn die Ausnahmebehandlung wirkt wie aus einem Beispielquelltext einer beliebigen Dokumentation. Wie man Exceptions effektiv einsetzen kann, möchte ich im folgenden erklären.

// mehr lesen

It’s magic: Magische Methoden in PHP

Geschrieben am 20. Apr 2009 von Cem Derin

In den ersten zwei Teilen meiner Miniserie über die magischen Eigenschaften von PHP bin ich auf die magischen Konstanten und magischen Funktionen eingagangen. Im dritte und letzten Teil werde ich die magischen Methoden behandeln, die mit Abstand die Umfangreichste implementierung von “Zauberei” in PHP darstellen.


// mehr lesen

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.