Monatlich : Jul 2011

Mehrere Datensätze gleichzeitig bearbeiten – mit der Zwischenablage
TYPO3 Zwischenablage aktivieren

Die Zwischenablage kann unterhalb der Seiteninhalte aktiviert werden

TYPO3 bietet für Redakteure eine einfache und komfortable Lösung, mehrere Datensätze gleichzeitig zu kopieren, verschieben oder zu löschen, sprich in irgendeiner Form zu editieren. Hierzu bietet das CMS als Möglichkeit, die Zwischenablage zu nutzen. Diese muss dafür zunächst natürlich erst einmal aktiviert werden. Dazu muss einfach in der Listenansicht der Haken bei „Zwischenablage anzeigen“ unterhalb der Seitenelemente gesetzt werden.

Danach steht ein Feld mit insgesamt vier Ablagen zur Verfügung. Standardmäßig ist die normale Zwischenablage ausgewählt. In dieser sind alle Objekte aufgelistet, die zuvor kopiert oder ausgeschnitten wurden.

Mehr lesen
QTTabBar: Mehr Funktionen für den Windows Explorer

Wenn man sieht wie sich die Dateimanager anderer Systeme gegenüber dem Windows Explorer entwickelt haben, so frage ich mich doch immer wieder warum es von Microsoft versäumt wurde seinen eigenen Dateimanager um so etwas einfaches wie Reiter zu erweitern. Um so besser ist das es immer noch genug Do-It-Yourself Programmierer gibt, die sich den fehlenden Funktionalitäten annehmen wie bei dem Projekt QTTabBar. Von den vielen Möglichkeiten, die diese Erweiterung bietet, möchte ich aber nicht die Reiter hervorheben sondern eine Funktion, die vielleicht der eine oder andere Entwickler nützlich findet: Das Ausführen eigener Programme bzw. Scripte.

Was an und für sich nicht spektakulär klingt ist in der Bedienung eine schöne Vereinfachung für die tägliche Arbeit mit dem Windows Explorer. Direkt über den Application-Button von QTTabBar lassen sich so die eigenen Scripte im aktuellen Verzeichnis ausführen und per Markierung die notwendigen Dateien und Verzeichnisse als Parameter übergeben. Ich habe diese Funktionalität bei der Ausführung von selbst erstellten Codesniffer-Regeln eingesetzt um die doch immer noch sehr unbequeme Windows-Eingabeaufforderung zu umgehen.

QTTabBar aktivieren

QTTabBar aktivieren

Die zur Zeit aktuellste Version, 1.5.0.0 Beta, ist die einzige Version die unter Windows 7 funktioniert. Die Beta-Version läuft auf meinem Rechner stabil und zeigte keinerlei Probleme in der Performance. Nachdem ich die Installation durchgeführt hatte, musste ich mich unter Windows neu anmelden, damit die neuen Funktionen in den Windows Explorer geladen werden. Sollten danach noch immer nicht die Reiter oder Buttons von QTTabBar sichtbar sein, muss man noch unter Ansicht -> Symbolleisten beides aktivieren.

Einrichtung von eigenen Scripts oder Programmen

Einrichtung eines Programmaufrufs in QTTabBar

Einrichtung eines Programmaufrufs in QTTabBar

Um einen eigenen Programmaufruf in den Applicationbereich zu speichern ruft man per Rechtsklick auf die QTTabBar-Leiste unter Options die Einstellungen auf und wählt dort den Reiter Applications. Mit einem Klick auf den Plus-Button erstellt man einen neuen Eintrag und gibt diesem einen Namen. Im unteren Teil befinden sich die Felder für die Pfadangaben zum aufzurufenden Programm, dessen zu verwendeten Parametern und das Arbeitsverzeichnis. In meinem Beispiel kann man in der Abbildung meinen Codesniffer-Aufruf erkennen. Bei den Parametern bietet QTTabBar Platzhalter an, die man aus einer vorgegeben Auswahl selektieren und in die Parameter einfügen kann. Mit %f% wird z.B. eine markierte Datei zusammen mit dem dazugehörigen Pfad eingefügt. Bei Bedarf gibt es noch die Möglichkeit dem Programmaufruf eine Tastenkombination zuzuordnen. In meinem Beispiel brauche ich im Windows Explorer nur eine PHP Datei markieren und mit der Tastenkombination Ctrl+ALT+E prüfe ich diese mit Codesniffer auf ihren Inhalt. Alternativ reicht auch ein Klick auf das Windowssymbol in der QTTabBar-Leiste und wählt dort den gewünschten Programmaufruf aus.

Die Möglichkeiten wie man dieses Feature einsetzt sind zahlreich und reichen von einem schnelleren Weg die Windows-Eingabeaufforderung für das aktuelle Verzeichnis zu öffnen bis hin zur Nutzung eines Compilers. Einen Wermutstropfen hat QTTabBar allerdings: Die Entwicklung wurde vor kurzem eingestellt. Laut den Angaben auf der Homepage ist jedoch ein Fork geplant, der unter einem neuen Namen laufen soll.

Wie findet ihr die Möglichkeiten von QTTabBar? Mich würden eure Meinungen zu der Erweiterung des Windows Explorers interessieren.

Mehr lesen
Einfache Contentpflege – Das interne CMS von Magento Enterprise

Magento wirbt damit, eine Open Source Software zu sein. Das heißt jedoch nicht zwangsläufig, dass das Programm nichts kostet. Seit 2009 bietet Magento Inc. (damals noch Varien) auch eine Enterprise Edition an, die knapp 13000$ im Jahr kostet. Doch was bekommt man dabei für sein Geld? Wir wollen in diesem und in weiteren Beiträgen erläutern, wo die Unterschiede zwischen Community und Enterprise Edition liegen, ob und wo der Mehrwert der Enterprise Edition deutlich wird. Im folgenden Artikel widmen wir uns dem internen Content Management System von Magento, erklären die vielfältigen Möglichkeiten der Kombination eines CMS mit einer E-Commerce-Software und zeigen, welche Zusatz-Features die Enterprise Version bereit hält.

CMS in Magento

Die Integration eines Content Management Systems in eine Online Shop-Software bietet vielfältige Vorteile. So können umfangreiche Inhaltselemente zur Produktvorstellung und zu Marketingzwecken direkt mit dem Katalogsystem interagieren und mit diesem verknüpft werden. Programmiererfahrung ist dabei nicht nötig, Hilfeleistungen wie ein WYSIWYG-Editor unterstützen den Anwender bei seinem Vorgehen. Flagbit hat auch deshalb mit TypoGento eine Extension entwickelt, mit der TYPO3 und Magento miteinander verknüpft werden können. Doch auch Magento verfügt bereits über ein integriertes CMS, mit dem sich vor allem in der Enterprise Edition einige nützliche Features nutzen lassen.

Mehr lesen
maatkit-logo-glossy
MySQL-Tabellen mit mk-archiver archivieren

Wenn man temporäre Logdaten in eine Datenbank schreibt, muss man sich früher oder später damit beschäftigen, wie man die auch wieder effizient herausbekommt. Im Normalfall will man die Daten auch nicht einfach löschen, sondern verschieben um später wieder darauf zugreifen zu können.

Mit mk-archiver bietet Maatkit dafür genau das richtige Werkzeug. Damit kann man Daten aus einer MySQL-Tabelle in eine Datei oder eine andere Tabelle exportieren. Die Zieltabelle muss dabei weder in der gleichen Datenbank noch auf dem gleichen Server sein. Die Exportdatei wird in LOAD-DATA-INFILE-kompatiblen Format erstellt, kann also auch problemlos später wieder in die Datenbank eingelesen werden.

Nachdem ich meine Daten zuerst mal ohne die Angabe eines Charsets exportiert hatte, waren meine Umlaute beim Testimport natürlich kaputt. Nochmal so als Hinweis am Rande: immer prüfen, ob sich ein Backup auch wiederherstellen lässt und nicht zufrieden sein, wenn es erstellt wurde ;). ALs ich danach den Charset angegeben habe, stellte ich fest, dass es in Maatkit 7202 (ich weiß nicht wie lange davor und danach) leider einen Bug gab, der den Export von UTF-8-Daten in eine Datei verhinderte:

flagbit@testing ~ $ mk-archiver --source h=localhost,D=db_testing,t=log_email --file 'log_email-201102' --where "MONTH(creation_date) = 2 AND YEAR(creation_date) = 2011" --limit 100 --commit-each --ask-pass --charset utf8 -u db_testing_user
Enter password:
Wide character in print at /usr/bin/mk-archiver line 4081,  line 1.

Der Export in eine andere Tabelle funktionierte. Nachdem ich den oben bereits verlinkten Thread von Ende Januar gefunden hatte (und 7202 von Mitte Januar ist), habe ich mir mal lokal die neuste Version (7540) heruntergeladen und siehe da: es funktioniert. Für solche Tests ist das --no-delete Flag immer ganz nützlich, weil dann die Daten bei einem fehlgeschlagenen Test nicht weg sind 😉

Wenn man das ganze jetzt noch mit gzip verbindet und in einen monatlichen Cronjob packt, hat man eine schöne, feine, automatische Datenbankbereinigung.

Mehr lesen
Produktkategorien in Magento sinnvoll sortieren

Ein interessante Aufgabe für Verantwortliche eines Online Shops ist es, die vorhandene Produktvielfalt für den Kunden besonders passend und relevant darzustellen.Während der eine Kunde nach besonders günstigen Angeboten sucht, möchte der nächste lieber neuere Artikel angezeigt bekommen. Eine bekannte Möglichkeit dafür ist eine sinnvolle Einteilung der Artikel in unterschiedliche Produktlisten. Diese können dann von den Kunden nach bestimmten Kriterien sortiert werden.

Sortierfunktion im Hein Gericke Shop mit den bekannten Möglichkeiten

In Magento können verschiedene Sortierfunktionen nach Preis, Name oder Artikelnummer konfiguriert werden, die Kunden bestimmte Anhaltspunkte geben. Doch oftmals ist auch gewünscht, dass bereits bei der Standard-Ansicht einer Kategorie eine sinnvolle Reihenfolge vorherrscht und Shopinhaber auch das ein oder andere Produkt pushen können. Dies ist bisher nur durch eine manuelle Konfiguration im Backend möglich, wo bestimmten Artikeln eine Nummer zugewiesen kann, nach der dann sortiert wird.

Mehr lesen
Zend-TwoLevels-Cache speichert Einträge unbegrenzt

Der Zend-TwoLevels-Cache ist an sich eine feine Sache, da er, wie bereits beschrieben, das Schönste aus beiden Cache-Welten vereint. Diese Freude wird jedoch leider immer wieder durch manche Macken des TwoLevels-Caches getrübt.

Die Cache-Priorität wird im TwoLevels-Cache durch eine verkürzte Lebenszeit für niedrig priorisierte Cache-Einträge realisiert:

$fastLifetime = (int) ($lifetime / (11 - $priority));

Der Standardwert für die Priorität ist 8, was dazu führt, das alle Einträge standardmäßig im schnellen Cache nur mit einem Drittel der ursprünglichen Lebenszeit gespeichert werden. Damit würde der schnelle Cache nur ein Drittel der Zeit zur Verfügung stehen, danach würden alle Anfragen aus dem langsamen Cache beantwortet, bis auch dieser abgelaufen wäre und dann würde der ganze Cache neu geschrieben und das Spiel ginge von vorne los. Um diesem Problem zu begegnen und um häufig verwendete Cache-Einträge auch weiter im schnellen Cache zu halten, gibt es die Option auto_refresh_fast_cache. Ist diese aktiviert, was in der Standard-Konfiguration der Fall ist, wird der Eintrag im schnellen Cache bei jedem load() neu geschrieben, was fast immer zu masssiven Performance-Einbußen führt. Daher ist in diesem Fall Setzen der Priorität auf 10 für alle Einträge, wie von Fabrizio beschrieben die beste Lösung. Dadurch wird bei diesen Einträgen weder die Lebenszeit verkürzt noch werden die Einträge neu geschrieben.

Ein weiteres Problem tritt auf, wenn bei der Berechnung der $fastLifetime durch abrunden als Ergebnis eine 0 herauskommt. Denn dann wird der Eintrag (zumindest bei APC, Memcached und XCache) für immer im Cache gespeichert. Ich habe dazu bei ZendFramework ein Issue eröffnet. Der Patch dazu verhindert zumindest das Anlegen von unbegrenzt gültigen Einträgen.

Meiner Meinung nach sollte es für die automatische Aktualisierung – genau wie für den automatic_cleaning_factor – eine Option geben, mit der man die Häufigkeit steuern kann. Ich kann mir, außer zu Testzwecken, kein Szenario vorstellen, wo man bei jeder Leseoperation auch eine Schreiboperation erzwingen möchte. Sinnvoller wäre hier diesen Parameter analog zum automatic_cleaning_factor mit der Trefferfrequenz auf den Cache zu justieren. Oder den Cache erst beim Unterschreiten eines Schwellenwerts der Lebenszeit neu zu schreiben. Oder die Einträge einfach ablaufen lassen und erst neu schreiben, wenn sie zum ersten Mal aus dem langsamen Cache gelesen wurden. Mit der letzten Lösung hätte man auf jeden Fall am wenigsten unnötige Schreibzugriffe, aber dafür immer mindestens einen Lesezugriff auf den langsamen Cache.

Nachtrag:
Hier noch die ZendFramework-Issues zu auto_refresh_fast_cache und dem Prioritäten- / Lifetimeproblem.

Update 18.07.2011:
Der Patch wurde mit kleinen Anpassungen angenommen und sollte in der nächsten 1.11-Version enthalten sein.

Mehr lesen