Alles rund um Magento!

Archiv zur KategorieAllgemein

Vorsicht bei der Verwendung von isset() mit Arrays

Manchmal sucht man Fehler, die man wieder und wieder überliest, weil man die falschen Annahmen getroffen hat und der Code oberflächlich richtig aussieht. Erfahrungsgemäß gibt es dann ein paar “übliche Verdächtige”, die man sich genauer anschaut. Zuweisungen im if-Statement, Vergleiche ohne Typprüfung, empty() und isset() sind dabei immer heiße Kandidaten.

Wenn man die Handbuch-Seite zu isset() durchliest, klingt es, als wäre es problemlos möglich auch die Existenz von Array-Keys zu prüfen. Sogar ein schönes Beispiel gibt es dazu:

< ?php
 
$a = array ('test' => 1, 'hello' => NULL, 'pie' => array('a' => 'apple'));
 
var_dump(isset($a['test']));            // TRUE
var_dump(isset($a['foo']));             // FALSE
var_dump(isset($a['hello']));           // FALSE
 
// The key 'hello' equals NULL so is considered unset
// If you want to check for NULL key values then try: 
var_dump(array_key_exists('hello', $a)); // TRUE
 
// Checking deeper array values
var_dump(isset($a['pie']['a']));        // TRUE
var_dump(isset($a['pie']['b']));        // FALSE
var_dump(isset($a['cake']['a']['b']));  // FALSE
 
?>

Doch ganz so einfach ist es leider nicht.

weiterlesen »

Grep für Application-Logs

Bei der Fehlersuche bieten einem die Application-Logs oftmals einen guten Einstiegspunkt. Doch die Suche darin kann zum Teil recht mühsam sein. Vor allem wenn man nicht nach der Fehlermeldung selbst suchen will, sondern zum Beispiel alle Fehler haben will, die einen bestimmten Methodenaufruf im Stacktrace haben. Und dann wollte ich auch nicht nur die Zeile haben, sondern den ganzen Log-Eintrag, inklusive Message und komplettem Stacktrace.

Ich habe mir dafür ein kleines PHP-Skript geschrieben. Vielleicht findet es ja sonst jemand nützlich:

<?php
// loggrep.php 2011-12-08
if (2 !== $argc && 3 !== $argc) {
    echo "USAGE: {$argv[0]} <pcre-pattern> <file>\n";
    exit(1);
}
 
$filename = 'php://stdin';
if (isset($argv[2])) {
    $filename = $argv[2];
}
$fp = fopen($filename, 'r');
 
// "2011-11-22T02:16:34+01:00 - "
$startPattern = '#^\d{4}(-\d{2}){2}T\d{2}(:\d{2}){2}\+\d{2}:\d{2} - #';
$searchPattern = $argv[1];
 
$found = false;
 
while ($line = fgets($fp)) {
    if (preg_match($startPattern, $line)) {
        if (true === $found) {
            foreach ($buffer as $bufferedLine) {
                echo $bufferedLine;
            }
        }
 
        $buffer = array();
        $found = false;
    }
 
    if (preg_match($searchPattern, $line)) {
        $found = true;
    }
 
    $buffer[] = $line;
}

Der Aufruf sieht dann so aus:

$ php loggrep "#Mage_Core_Block_Template#" exception.log

Wichtig ist, dass der Suchbegriff mit PCRE-Syntax (inklusive Delimiter) angegeben wird.

Update 08.11.2011

Jetzt neu: Falls keine Datei angegeben wird, kann das Skript auch von STDIN lesen. Damit kann man auch einfach in gepackten Dateien suchen:

$ zcat exception.log.1.gz | php loggrep "#Mage_Core_Block_Template#"

Der Guru ist zurück

Nicht nur Virtualbox kennt den Guru, sondern auch bei Valve scheint er bekannt zu sein:

Magento-Module – goldenes Kalb oder die Büchse der Pandora?

Eines der größten Argumente für Open-Source-Systeme wie Magento sind verfügbare Module, welche die Funktionalität des Grundsystems um Lösungen für wiederkehrende Aufgabenstellungen erweitern. Magento bietet auf seiner Plattform Connect sowohl unentgeltliche als auch kostenpflichtige Module an. Das Installieren wird dem Shop-Betreiber durch den Magento Connect Manager auch sehr einfach gemacht, ein neues Modul ist in Nullkommanichts installiert und vollführt von nun an seinen Dienst. Doch gerade die mit der geringen Komplexität einhergehende niedrige Hemmschwelle beim Integrieren neuer Module kann zu großen Problemen führen. Die meisten Betreiber von Magento-Online-Shops gehen mit der Installation von Modulen deutlich zu unkritisch, teilweise naiv um und sollten die Extensions deutlich häufiger hinterfragen. Die Liste der Problematiken, die durch Module heraufbeschworen werden können, ist relativ lang:

weiterlesen »

IPC 2011 – Tag 3

Heute morgen gab es keine Keynote zu verpassen, daher starteten wir direkt mit der Aufforderung von Kore Nordmann und Tobias Schlitt (Qafoo) “Make your project SOLID!”. Die beiden stellten die von Martin C. Fowler (Uncle Bob) geprägten SOLID-Prinzipien vor. Wer Clean Code gelesen hat und sich bereits mit Clean Code Development beschäftigt hat, dürfte wenig Neues erfahren haben. Für alle anderen eine gute Zusammenfassung und Einführung in das Thema.

weiterlesen »

IPC 2011 – Tag 1

Juhu, es ist wieder so weit: Konferenz! :) Nach viel zu frühem Aufstehen (7 Uhr) ging es heute morgen auf nach Mainz zur IPC 2011. Dort konnte ich beweisen, dass die Android-Navigation den nächsten McDonalds besser findet als angebissenes Obst. Zur Rheingoldhalle konten beide Navigationssysteme gleich gut navigieren.

Auf der Konferenz angekommen gab Johannes Schlüter (Oracle) zunächst ein Update bezüglich PHP 5.4. Dabei wurde unter anderem auf Traits, die neue Array-Syntax und den internen PHP-Dev-Webserver eingegangen. Verbunden war das Ganze mit der eindringlichen Aufforderung die Nightly-Builds zu testen um solche Bugs wie in PHP 5.3.7 und andere zu vermeiden. PHP würde zwar von einer Test-Suite getestet, doch “unbeabsichtigte” (sprich: nicht im Sinne der PHP-Entwickler) Verwendungen von Funktionen würden von dieser Test-Suite eben nicht erfasst, was auch zum aktuellen Problem mit der is_a()-Funktion führe.

weiterlesen »

VirtualBox Guru Meditation

Wenn der VirtualBox Guru mal meditiert…

VirtualBox Guru Meditation

VirtualBox Guru Meditation

… heißt das, dass die VM abgestürzt ist. Schön, dass diese Fehlermeldung schon so alt ist und eine Tradition hat, das sie sogar einen eigenen Wikipedia-Artikel hat.

Google Wallet startet

Auch wenn wir ein wenig in Gefahr geraten, bald als Google-Werbe-Blog zu erscheinen, wollen wir kurz auf den Start des neuesten Produktes der Entwickler aus Kalifornien, dem Google Wallet, verweisen, zumal die Auswirkungen dieser Technologie nicht nur auf den Offline-Handel beschränkt sein bleiben.

Mit dem Launch können vorerst jedoch nur Besitzer eines Nexus 4G Smartphones in den USA den neuen Dienst in Kooperation mit dem PayPass-System von Mastercard nutzen. Bei diesem System hält der Nutzer im Regelfalle seine Kreditkarte an ein spezielles Kartenlesegerät und kann so schnell und unkompliziert zahlen. Dieser Vorgang ist nun auch mit dem Smartphone möglich. Die Übertragung der Daten erfolgt mit dem im Handy integrierten NFC-Chip, in dem die Zahlungsinformationen des Nutzers gespeichert sind. Nach und nach sollen das Bezahlen mit weiteren Karten möglich sein, auch eine Zusammenarbeit mit Visa und American Express ist bereits geplant. Gesichert ist das Verfahren durch eine zusätzliche PIN und dem sog. “Secure Element”, das die sensiblen Daten getrennt von den restlichen Informationen auf dem Smartphone speichert.

Google Wallet Payment

Google Wallet soll auf Dauer den Geldbeutel ersetzen. (Bild:Google)

Bereits seit Sommer lief ein Feldtest, der für Google offenbar zufriedenstellend verlief. Die zugrunde liegende NFC-Technik war auch bereits in den für das PayPass-System genutzten Kreditkarten eingebaut und wird nun für das Wallet genutzt. Derzeit können Kunden der Citibank mit einer Mastercard den Dienst bereits nutzen, alternativ bietet Google auch eine hauseigene Prepaid-Karte Early Adopter an. Neben weiteren Kartenanbietern wartet man vor allem auf die flächendeckende Einführung weiterer NFC-fähigen Smartphones.

Doch Google wäre nicht Google, wenn die Ziele nicht schon wieder viel weiter gesteckt wären. Neben der Bezahlfunktion sollen weitere Dienstleistungen wie Kundenkarten oder Gutscheine ermöglicht werden. Hier ist vor allem die Synchronisation des Wallet mit Google Offers als Konkurrenz zu Groupon interessant, zumal Google sich mit dem Ankauf von Daily Deal weiter in diesem Bereich verstärkt hat. Das Ganze soll per App realisiert werden. Vor allem das Thema Sicherheit steht dabei noch im Brennpunkt, Kritiker weisen vor allem darauf hin, dass eine PIN allein nicht ausreichend Schutz biete. Zudem wird die Kopplung an traditionelle Kreditkarten ebenso bemängelt wie (natürlich!) der mangelnde Datenschutz für die sensiblen Kontendaten.

Auch die deutschen Mobilfunkunternehmen Telekom, Vodafone und O2 wollen sich für ihr Payment-Projekt Mpass die NFC-Technologie zu Nutze machen und damit im nächsten Jahr ebenfalls den breiten Markt in Angriff nehmen.

Inwieweit dies Auswirkungen auf E-Commerce Plattformen wie Magento haben wird, ist noch unklar. Zumindest fürs erste scheint eine Kooperation zwischen Google und Magento in diesem Bereich unwahrscheinlich, hat doch PayPal, wie Magento eine eBay-Tochter, auch schon gegen Google Wallet geklagt, es geht mal wieder um Plagiatsvorwürfe und Abwerbung von Topkräften. Die Technologie an sich ist jedoch auf für Magento interessant. Vor allem im Hinblick auf Mobile Commerce ist denkbar, dass Bezahlvorgänge ebenfalls über das Wallet oder vergleichbare Systeme laufen könnten und hier E-Commerce und Offline-Handel wieder einen Schritt näher zusammenrücken. Gespannt sein darf man auch auf die Entwicklungen im Bereich Sicherheit. Das es mit einer zusätzlichen Pin und dem derzeitigen Secure-Element für das Wallet nicht getan ist, zumal Angriffsflächen erst durch die flächendeckende Einführung jetzt geboten werden, dessen ist man sich auch im Hause Google bewusst. Wenn man den Geldbeutel inklusive Kreditkarten in Zukunft wirklich komplett ersetzen will, sind noch ein paar Errungenschaften zu erwarten, die auch auch für Magento und Co. durchaus interessante Entwicklungen anstoßen könnten.

Google Analytics für den Datenschutz anpassen

Während die Debatte um den Facebook-Like-Button nach wie vor im Gange ist und die Äußerungen der Datenschützer aus Schleswig-Holstein im Internet eifrig diskutiert werden (die Meinungen reichen hierbei von „realitätsfremd“ bis „richtig so“), hat ein anderer Internetriese zumindest eine Problematik im deutschen Datenschutzdschungel beiseite geräumt. Google konnte letzte Woche eine Einigung mit Datenschützern hinsichtlich „Analytics“ verkünden. Die Analysesoftware stand vor allem deshalb in der Kritik, weil die IP-Adresse der Benutzer auch an die Server in den USA übermittelt wurde.Auch wenn Google weiterhin die Meinung vertritt, dass Analytics auch zuvor schon den Richtlinien entsprach, ist man nun nach ein paar Anpassungen auch offiziell Datenschutzkonform.

Google Analytics Magento

Analysesoftware Google Analytics

Schritt 1 auf diesem Weg war die Einführung eines Browser Add-Ons bereits im Mai diesen Jahres, dass es Usern ermöglichte, die Analytics-JavaScripts abzuschalten und so die Nachverfolgung ihres Surfverhaltens zu blocken. In der nun weitergehenden Maßnahme stellt Google für Webmaster eine Anpassung des Tracking-Codes zur Verfügung, nach der nun nicht mehr die komplette IP der Benutzer gespeichert, sondern ein Teil davon anonymisiert wird. Diese Anonymisierung müssen Webseitenbetreiber selbst vornehmen, in dem sie die IP-Masken-Funktion in Google Analytics aktivieren. Dies geht über eine Anpassung des Tracking-Codes von Analytics. Das Snippet hierzu finden Sie auf Google Code. Standardmäßig wird wohl weiterhin ersteinmal der Code mit der vollständigen Übermittlung von Google generiert.

Da bei Magento der Analytics-Code nicht manuell eingebunden, sondern im Backend einfach die Kundenkontonummer eingetragen wird, über die sich die Software dann den Code holt, ist es nicht mit der direkten Änderung getan. Wir werden das entsprechende Modul in den nächsten Tagen auf die neusten Magento-Versionen anpassen, zeitnah in GutHub hochladen und zur Verfügung stellen.

Mit den Anpassungen wird die Nutzung des Trackings, um wertvolle Informationen für die Auswertung in Analytics zu generieren, weiterhin ermöglicht, jedoch keine personenbezogenen Daten mehr übermittelt. Laut Google kann dies die Genauigkeit der Geotracking-Funktion etwas beeinträchtigen, sonst sollen alle Funktionalitäten erhalten bleiben.

Hackevening Javascript

Am 29. August hat das Trio von Developers Peak ihre 10 Städte Tournee in Karlsruhe fortgesetzt. An besagtem Abend wurden alle Interessierten zu einem Event mit dem Schwerpunkt JavaScript: Animations: Canvas vs DOM vs CSS3 vs WebGL eingeladen. Im Hotel Residenz in der Nähe des Karlsruher Hauptbahnhofs fanden sich ca. 25 begeisterte Teilnehmer in angenehmer Atmosphäre. Die Vorträge wurden ausnahmslos in Englisch gehalten.

David leitete das Event mit generellen Themen rund um Javascript ein und sorgte dafür, dass für das spätere Pair-Programming keine Basis-Fragen offen blieben. Der Vortrag befasste sich hauptsächlich mit der Interpretation von Javascript Code im Browser und hat sicherlich diejenigen am meisten berührt, die JS Frameworks wie Prototype und JQuery ausgiebig nutzen, aber nicht genau wissen wie der Funktionsumfang implementiert wurde.

David ist massiv auf die Referenzierung von Variablen und Funktionen eingegangen und den damit verbundenen Flaschenhälsen. Ebenso wurden die mächtigen Closures näher gebracht und wie man damit performante Werkzeuge erstellen kann. Zudem wurde erklärt, wie die Bind-Funktionalität in Prototype implementiert wurde (Bind ermöglicht es an jede definierte Funktion einen beliebigen Context zu binden).

Marek hat uns dann im Anschluss in sein Ressort der Animationen geleitet. Es gab einige Showcases und einige generelle Themen, die im Vorfeld diskutiert wurden. Step by Step wurden wir durch die einzelnen Ansätze der Animation mit Javascript geführt, angefangen mit CSS3. Wir haben dann in Pair-Programming Sessions eine Animation in CSS3 mit Fallback auf DOM-Manipulation erstellt. Weiter ging es mit dem Lösungsansatz über das HTML 5 Canvas-Objekt, auch hier haben wir aus einer angedachten Vorlage von Marek gemeinsam eine laufende Animation erstellt. Als letzten Lösungsansatz haben wir uns WebGL gewidmet.

Javascript Animation Mortal Combat

Charakter aus dem Javascript Mortalkombat Clone

Marek und David sind auf die Vorzüge und Nachteile aller Möglichkeiten eingegangen und zum Abschluss gab es noch einige Showcases zu ein paar eigenen Projekten. Zum einen stellte Marek einen vollständig in Javascript geschriebenen Mortalkombat Clone vor. Das Spiel war Multiclient fähig und hat sogar Fights im Mutliplayer ermöglicht. Die serverseitige Implementierung wurde mit einem Aufsatz mit Node JS erstellt. David stellte uns ebenfalls ein Spiel vor, welches 2 Panzer gegeneinander hat antreten lassen. Die herausstechendste Besonderheit daran war, dass David seinen Panzer mit seinem Mobiltelefon ebenfalls über Node JS steuern konnte.

Den letzten Vortrag hat Piotr übernommen und uns eingeladen zu den kommenden Workshops von David und Marek. Piotr hat auch erzählt, welchen Themen sie sich in Zukunft bevorzugt widmen möchten. Im Anschluss an den Event gab es einen regen Interessensaustausch aller Anwesenden, einschliesslich der Gastgeber.

Der Event hat bei mir persönlich definitiv Appetit auf mehr gemacht, besonders die kommenden Workshops von David de Rosier haben mich angesprochen. In den Workshops geht es zum Teil um Objekt Orientierte Programmierung (Mastering Javascript Part 2: OOP und Patterns) und um fortgeschrittene Techniken (Mastering Javascript Part 3: Hardcore JS), welche einem einen sehr tiefen Einblick in die Sprache Javascript gewähren sollten.

Wer sich gerne direkt Code anschauen möchte, kann die Github Accounts von David und Marek besuchen.

 

« Vorherige Einträge

Page optimized by WP Minify WordPress Plugin