Heute musste ich mal wieder feststellen das man in der Webentwickler-Branche nicht ohne Mac auskommt. Ich war ja zeitweise der Meinung das Apple Macs nur was für Pixelschubser sind, aber um Kompatibilität zu garantieren brauch man auch einen als Coder. Grund: Safari.
Mir sind zwar die beiden WebKit-Browser unter Windows bekannt, aber diese sind zum schreien buggy (bzw. alpha). Ich hätte zwar nie gedacht das ich für nen Browser soviel Geld bezahle, aber so ein MacBook kann ja noch einiges mehr als das (und is schön obendrein).
Während ich so die übliche Software aus dem Netz fischte (Firefox, Opera, VLC), fiel mir auf dass ich da beinahe alles habe was ich täglich brauche.
Mir fehlt jetzt nur noch eine gute PHP IDE und ein Internet Explorer (6 oder 7).. Dann könnte ich mir glatt überlegen komplett umzusteigen, bzw. einen “grossen Mac” zu kaufen. 10 Jahre Windows muss reichen und Vista ist nicht wirklich “Wow”, sondern “i-bäh”. Also grundsätzlich ein guter Zeitpunkt zum wechseln.
Wenn einer PHP auf Mac entwickelt wäre ich für Software-Tips dankbar.
Ich habe hier mal eine allgemeine Frage bzw. bin auf der Suche nach einer Erklärung. Hier das Beispiel:
class Base {
public function __toString()
{
return 'Class: '.__CLASS__;
}
}
class SubClass extends Base
{
// something
}
Unter Verwendung der Pseudo-Konstante “__CLASS__” möchte ich via “__toString()” eine dynamische Debugausgabe für alle Unterklassen von “Base” erzielen. Die definierte toString Methode wird auch vererbt, aber seht selbst:
$obj = new SubClass();
echo $obj;
// ergibt: "Class: Base"
Das diese Ausgabe falsch ist, ist offensichtlich, aber vielleicht auch nicht?
Eigentlich wird __CLASS__ mit dem Aufruf __toString() ausgeführt und sollte sich daher nicht durch die Position im Code verwirren lassen. Das Problem oben ist schon etwas älter, aber heute bin ich wieder drauf gestossen und dachte mir, das es sich eigentlich korrekt verhält.
Erklärungsversuch:
Da __CLASS__ eine magische Konstante ist und nur in Base verwendet wird, gilt dies als “der letzte Stand” und wird vererbt.
Bug oder Normal?
Letzte Woche habe ich mir die knapp 1-stündige Einführung des Firebug Autors Joe Hewitt angetan. Leider sind gute Entwickler nicht auch gleich immer gute Erzähler, mich eingeschlossen. :)
Per Zufall fand ich vorhin zu Firebug zwei kurze, aber präzise Tutorial-Videos auf YouTube. Das erste Video beschreibt wie man den Debugger im Allgemeinen einsetzt, und das Zweite zeigt wie man mit Firebug das CSS einer Seite temporär ändern kann, was es alles im Net-Tab zu sehen gibt und wie man den Inspector benutzt um schnell an Elemente zu kommen.
- YouTube: Introduction to Debugging AJAX Application
- YouTube: Introduction to CSS editing using Firebug
- Yahoo Video: Joe Hewitt’s Firebug Overview
Für CakePHP Baker dürfte dieser Link hier auch interessant sein: FireCake, ebenso wie für Nicht-Baker diese PHP Alternative: FirePHP .. oder beides ;)
Die letzten beiden Klassen haben ja alle auf file_get_contents gesetzt und ich habe bei der AmazonECS auch erklärt das ihr bei Problemen euch selbst darum kümmern musst. Bei Amazon ist das auch kein Problem, denn bei fehlerhaften Requests liefern die auch ein Fehlerformular, aber bei 404 siehts übel aus.
Ich habe nun für meine aktuelle Klasse eine Methode entwickelt die den direkten Aufruf von file_get_contents() umgeht und bei einem Fehler ein kleines XML Dokument liefert anstatt die Ausgabe mit einer hässlichen PHP Warning zu zerstören. Es ist zwar ein wenig "dirty", aber es bewahrt mich davor PHP5 try/catch Handling einzubauen nur für den beschriebenen Fall.
Zur Zeit sieht ein return wie folgt aus:
Das habe ich nun geändert und durch query_service ersetzt:
-
return $this->query_service($this->queryUrl);
Und hier ist die Methode query_service()
-
function query_service($url)
-
{
-
$errorDoc = '<?xml version="1.0" encoding="UTF-8"?>'
-
.'<php><error>There was a problem getting the content</error></php>';
-
-
{
-
$data = $errorDoc; // if data is not target, return errorDoc
-
}
-
-
return $data;
-
}
Schön wäre es natürlich wenn man die originale Fehlernachricht in das $errorDoc einfügen könnte. Irgendwelche Einwände oder gar eine bessere Lösung, Tips, Hinweise?
PS: Sobald ich die aktuelle Klasse fertig habe, werde ich die beide vorherigen dahingehend schonmal überarbeiten.
Gestern habe ich die Amazon Klasse geschrieben und aus gegebenen Anlass dachte ich mir das eine Technorati Klasse her müsste. Sie folgt dem gleichen Prinzip und liefert die XML Dokumente ohne viel drumherum. Wie auch bei der Amazon Klasse gibt es hier wieder eine ausführliche Online Dokumentation. Alle verfügbaren API Querys sind enthalten. Bloginfo, Browse, Member und Search, sowie das jedes Query alle verfügbaren Parameter beinhaltet.
Beispiele:
-
require('technorati.class.php');
-
-
// Alle Informationen zum Blog
-
$techno = new Technorati_Bloginfo();
-
$xmlDocument = $techno->bloginfo('http://www.m3nt0r.de/blog/');
-
-
// Suche nach Linkkosmos für eine Adresse.
-
$techno = new Technorati_Search();
-
$xmlDocument = $techno->cosmos('http://www.m3nt0r.de/blog/');
-
-
// Alle Informationen zu einem Mitglied.
-
$techno = new Technorati_Member();
-
$xmlDocument = $techno->getinfo('m3nt0r');
Download, Source und Docs
Heute habe ich mal eine Klasse für den ECS Dienst von Amazon geschrieben. Ich kam auf die Idee, nachdem ich für mein selbstgemachtes Framework keine vernünftige Klasse finden konnte. Es gibt zwar Services_Amazon von PEAR, aber die hat einfach zuviele Abhängikeiten für diesen einen Zweck. Die Klasse ist offen für alle Dienste und vorbereitet für die Bezahldienste wie Alexa und Mechanical Turk, etc. Ihr könnt Sie also nach belieben erweitern. Ich habe eine ausführliche Dokumentation hinterlegt und dem Archiv hinzugefügt. Leider gibt es noch keine coding-guideline und eigentlich hätte ich Alexa und die Amazon-Bezahldienste selber implementiert, nur habe ich keine Kreditkarte und einen Developer-Key hab ich auch nich gefunden. Wie auch immer. Das ECS ist zu 80% abgedeckt. Ich habe nicht bei allen Funktionen alle möglichen Variablen eingefügt, da die meisten nur in sehr speziellen Fällen Sinn machen.
Read the rest of this entry »
Jaja.. das gute Cake.. immer wieder lecker ;-)
Ich brauchte gerade ein Tool zur automatischen Übersetzung von Text. Ich dachte ein Helper is da sicherlich nicht schlecht. Also hier ist er.. TransHelper. Entscheidet anhand der vom Benutzer favorisierten Spracheinstellung welche vorhandene Übersetzung angezeigt werden soll. Ich empfehle allerdings eine Datenbank dranzuhängen um nicht in Arrays innerhalb des Views zu versinken.
Die Sache läuft so:
-
'de_de'=>'Titel',
-
'fr_fr'=>'Titre',
-
'it_it'=>'Titolo'))); ?>
Der Helper entscheidet selber was am besten ist. Gerade bei en_EN und en_US von Vorteil. Sollte nur die Sprache (en) überinstimmen wird das nächst beste geliefert. Wenn beides stimmt wird genau dessen Übersetzung zurückgegeben.
Bevor ich mit CakePHP anfing gehörte die Smarty Template Klasse von PHP.net zu meiner Standardausrüstung. Ich habe damit früher quasi meinen eigenes MVC gebastelt. Für mich war es damals ein riesiger Schritt nach vorne als ich Smarty zum erstene Mal in meine Programme gepackt habe. Nun haben wir bei CakePHP allerdings ein etwas "roheres Material".. die thtml-Dateien. Okay.. man hört oft: "Warum eine Templateengine mit eigener Sprache? PHP ist ja quasi auch eine Templatesprache.. ". Da stimme ich auch zu, aber man macht sich damit nur das Leben schwer. Jeder der sich schonmal durch einen Wald von php-tags gemixt mit HTML schlagen durfte wird mir da zustimmen.. spätestens wenn man nach 4 Monaten oder mehr mal eben was ändern will, oder sogar ein komplettes Redesign ansteht..
Lange Rede.. hier mal ein Beispiel zum Vergleich. Was lässt sich besser lesen?
-
<td><?php echo $note['Note']['id'] ?></td>
-
<td><?php echo $note['Note']['title'] ?></td>
-
<td><?php echo $note['Note']['body'] ?></td>
-
<td><?php echo $note['Note']['created'] ?></td>
-
<td><?php echo $note['Note']['modified'] ?></td>
oder...
-
<td>{$note.Note.id}</td>
-
<td>{$note.Note.title}</td>
-
<td>{$note.Note.body}</td>
-
<td>{$note.Note.created}</td>
-
<td>{$note.Note.modified}</td>
Und das ist noch ein einfaches Beispiel. Oft hat man ja noch if(!empty) oder foreach etc.. und alles mit den php tags.. Ich bin zwar schon dazu übergegangen die Shortcuts von CakePHP zu benutzen aber ich kann dem <?php e($html->link()); ?> auch nicht wirklich was abgewinnen..
Ich hab grad einen lustigen Artikel gefunden. Es gibt ja seit kurzem die Google Code-Search und die ist verdammt gut. Zumindest konnt ich sogar mich dort wiederfinden und damit hätte ich eigentlich nicht gerechnet so kurz nach dem Launch.. Wie auch immer... Der Autor hatte anderes im Sinn als Code zu suchen. Viele Programmierer schreiben oft lustige Kommentare und manche - naja - fluchen halt auch mal gerne.
Die Statistik zählt wie oft das Wort "fuck" in allen bekannten Sprachen vorkommt. PHP liegt hier weit vorne .. Tja, es gibt mitunter eine Menge frustierter Kollegen ;-)
Der Autor hat das selbe nochmal mit Lizenzen gemacht und es stellte sich heraus das die LGPL wohl die Lizenz ist unter der am häufigsten geflucht wird. Auch wenn auf den ersten Blick eine recht wertlose Statistik, so finde ich die dargestellten Tendenzen recht interessant. Was man nun für sich daraus zieht bleibt jedem selbst überlassen.
Ich habe auch mal für deutsche Schimpfwörter gesucht, aber in unseren Gefilden beschränkt sich das Fluchen bzw. Vorkommen dieser Ausdrücke auf badword-listen.. Sauber Jungs ;)
Erstmal zu dem Namen: Pretty Basic ist enstanden als Cheesus und ich das Wort "Beta" im Netz nicht mehr lesen konnten.. Irgendwie kamen wir darauf das "pretty basic" wohl zutreffender wäre .. ach .. keine Ahnung.. Ich will nicht tiefer darauf eingehen zu welcher Stunde wir das lustig fanden.. ;-)
Cheesus fand das so gut das er einen Tag danach eine Domain mit dem Namen bestellte. Nicht unbedingt des Scherzes wegen, sondern eher weil der Name eigentlich an sich auch nicht schlecht war. Und ausserdem hatter er noch eine Inklusiv-Domain bei einem Hoster frei, also immer her damit :)
Er kam dann mit der Idee zu mir, einen simplen Blog für unsere Netzfunde im Bereich Beta-Webservices zu starten und ob ich Lust hätte mitzumachen. Ich hab natürlich sofort zugestimmt. Problem war jedoch ein geeignetes System zu finden. Minimale Features und auf eine Funktion ausgerichtet .. das posten von Links mit nem Screenshot.. Wir wollten erst Wordpress nehmen aber für sowas ist das nicht wirklich geeignet. . viel zu gross..
Da ich nun mich in CakePHP gut eingelebt habe und im Moment bereits damit auch schon ein grosses Projekt schreibe, dachte ich mir das ich zum "warm werden" mal eben so einen Linkblog basteln könnte. Das hat auch alles wunderbar geklappt, so dass ich nur einen Tag gebraucht habe (inklusive Design) :-) Also ich glaube das sich dafür das Projekt schon sehen lassen kann.
Ziel:
Eine Seite wo Links geposted werden, einfache Administration, Blog-ähnlicher Aufbau, mit Screenshots
Eingebaute Features:
- LoginArea und simples Interface zum schreiben.
- Admin: Liste aller Einträge mit je folgenden Optionen: bearbeiten, de/aktivieren, löschen.
- RSS-Feed mit jeweils den 10 neusten Einträgen
- Bewertungsfunktion mit zwei Möglichkeiten: Gut/Schlecht
- Screenshotupload mit automatischem Resize.
Schon einiges für ein paar Stunden programmieren. Es kommen noch ein paar Features hinzu, aber der erste Milestone ist von mir absolviert worden und jetzt wende ich mich wieder anderen Dingen zu. ^.^
Viel Spass und happy browsing :)

