Alle Beiträge von Benedict

Agavi Form Population Filter (FPF) und HTML5

Ich arbeite gelegentlich mit dem PHP-Framework Agavi. Um hier Formularfelder vorauszufüllen und insbesondere auch um Fehlermeldungen nach dem Ausfüllen von Formularen anzeigen zu können, setzt Agavi den Form Population Filter (FPF) ein. Die Idee ist, dass das Framework den DOM-Baum analysiert und die Meldungen direkt an die entsprechende Stelle einfügt, die der Entwickler somit nur einmal global spezifizieren muss (z. B. immer vor dem jeweiligen Feld). Soweit die Theorie.

In der Praxis ist der Form Population Filter einer der größten Teufeleien, die ich jemals erlebt habe, er verursacht alle möglichen ärgerlichen Seiteneffekte, da er ja das Markup der ausgegebenen Seite massiv verändert und funktioniert häufiger nicht, als er es tut.  So führt zum Beispiel eine nicht-wohlgeformte Seite (falsche Tags, illegale Entities etc.) dazu, dass der FPF entweder seinen Dienst komplett einstellt, der zugrunde liegenden libxml sei Dank, oder im Besten Fall die Seite mit falsch codierten Entities wieder ausgibt. Insbesondere bei HTML5-Seiten ist dies ein Problem, da libxml kein HTML5 unterstützt (oder zumindest der FPF nicht). Laut Dokumentation sollte es ausreichen, dem FPF mit dem Parameter ignore_parse_errors klar zu machen, dass er eben dies tun solle, dies funktioniert jedoch nicht.

Wer das gleiche Problem hat, so konnte ich mir helfen:

<ae:parameter name="ignore_parse_errors">true</ae:parameter>
 <ae:parameter name="force_output_mode">xhtml</ae:parameter>
 <ae:parameter name="parse_xhtml_as_xml">false</ae:parameter>

Durch force_output_mode wird der FPF gezwungen, anstatt HTML XHTML auszugeben. Das ist natürlich großer Unsinn und führt zu allen möglichen Fehlern, die man jedoch wieder abfangen kann, indem man parse_xhtml_as_xml abstellt, sodass intern wieder loadHtml anstatt loadXml verwendet wird. Alle verbleibenden Fehler werden mit ignore_parse_errors ignoriert (was kurioserweise beim output_mode xhtml funktioniert, nicht jedoch bei html). Bei ignore_parse_errors sind neben true und false auch noch LIBXML_ERR_… möglich, siehe Release Notes von Agavi 1.0.5.

Man beachte, dass diese Methode ebenfalls gewisse Seiteneffekte nach sich zieht (aus <script src=”foo”></script> wird z. B. <script src=”foo”/>, was aus XHTML-Sicht völlig korrekt ist, aber, zumindest bei meinem Browser in Verbindung mit HTML5  nicht mehr funktioniert).

Redirected Port in Windows 8 erstellen (RedMon)

Beim Erstellen eines “Redirected Ports” (RedMon) bekam ich immer wieder die Fehlermeldung “Der angegebene Anschluss konnte nicht hinzugefügt werden. Unzulässige Funktion.”

Mich betraf das, weil ich dieser Anleitung folgte: http://www.stat.tamu.edu/~henrik/GSWriter/GSWriter.html

Zum Glück gibt es eine einfache Lösung: Auf einen bestehenden Drucker (egal welchen, es kann ein lokaler, ein Netzwerkdrucker, der Microsoft XPS Document Writer, usw. sein) mit rechts klicken und “Druckereigenschaften” (nicht Eigenschaften!) wählen. Ggf. muss nun noch ein Klick auf den Button links unten mit dem Schutzschild erfolgen, damit Administratorberechtigungen vorliegen. Jetzt unter der Registerkarte “Anschlüsse” auf “Hinzufügen…” klicken, “Redirected Port” wählen. Erstaunlicherweise funktionierte das bei mir problemlos. Wichtig: Nachdem der Anschluss erstellt wurde, den Haken wieder beim richtigen Port des Druckers, der für die Erstellung des neuen Anschlusses kurzfristig verwendet wurde, setzen.

Ich hoffe der kleine Tipp hilft jemandem weiter.

Liste aller Blogs in einem WordPress-Netzwerk (Multisite)

Ich verwende ungern Funktionen, die als deprecated (veraltet) markiert sind, wie in WordPress schon seit langer Zeit die Funktion get_blog_list(). Eine Alternative zu schreiben ist allerdings recht problemlos möglich, hier der Code inkl. Kommentaren (ich habe bewusst darauf verzichtet, die Liste direkt aus der Datenbank zu holen, da ich im Zweifelsfall lieber die API verwende – mir ist bewusst, dass die Performance ggf. – gerade bei größeren Netzwerken – bei meiner Methode nicht besonders gut ist):

 /**
* Liefert einen Array mit allen Blogs in einem Netzwerk zurück
*
* @returns array
*/
function listBlogs() {
   $blogList = array();        

   // Array aller Super-Admins - das sind die Netzwerk-Administratoren, die die Blogs anlegen
   $superAdmins = get_super_admins();

   foreach($superAdmins as $admin) {
      // Leider liefert get_super_admins() einen Array von login-Namen (und nicht IDs oder WP_User-Objekten), auch die keys des Arrays sind keine IDs
      // Daher wird für jeden Eintrag zunächst das zugehörige User-Objekt und daraus die ID gesucht
      $admin = get_user_by('login', $admin);

      // get_blogs_of_user() ist im Gegensatz zu get_blog_list() nicht als deprecated markiert und kann also verwendet werden
      $blogList = array_merge($blogList, get_blogs_of_user($admin->ID));
   }

   return $blogList;
}

 

Wichtig: Das größte Problem mit dieser Funktion ist, dass die Ergebnisliste nun nach den anlegenden Admins (und nicht etwa alphabetisch etc.) sortiert ist. In meinem Anwendungsfall war das egal, wer eine andere Sortierung benötigt, muss die Funktion entsprechend umschreiben

jQuery-Datatables mit serverSide und columnFilter Plugin

DataTables sind bekanntlich die beste Erfindung seit geschnittenem Brot. Und um das Brot zu belegen, äh, die Tabellen zu filtern, ist Jovan Popovics großartiges DataTables ColumnFilter Plugin nutzenswert. Beides habe ich in eigenen Projekten im Einsatz und es funktioniert großartig. Als ich vor kurzem eine DataTable auf serverseitige Daten umgestellt habe (serverSide: true) habe ich allerdings festgestellt, dass meine columnFilter nicht mehr funktionieren. Die Lösung war einfach: Ich hatte diese versehentlich mehrfach initialisiert, d. h. $("foo").dataTable().columnFilter(...); wurde mehr als einmal aufgerufen, was wohl bei nicht-serverseitigen Daten keine negative Auswirkung hat, bei serverseitigen jedoch zu einem dieser lustigen “oSettings not defined” Fehler führt. Vielleicht hilfts ja jemandem weiter.

Kmail1-Emails in Thunderbird importieren

Schritt 1: Das Thunderbird-Add-On “ImportExportTools” installieren (via Tools -> Add-Ons) und Thunderbird neu starten

Schritt 2: Die Kmail-Mails finden und eine Sicherheitskopie anlegen (meine Mails lagen unter ~/.kde/share/apps/kmail/mail/inbox/cur/)

Schritt 3: Die Maildateien in .eml umbenennen, z. B. mittels find . -type f -exec mv ‘{}’ ‘{}’.eml \;

Schritt 4: In Thunderbird unter Tools->ImportExportTools->Alle EML-Dateien eines Verzeichnisses importieren das Verzeichnis wo die eml-Dateien liegen auswählen

Yay!

Kann Theater Beta sein? Performance Ajax//Don Quichotte

Am 17.11.2011 um 20 Uhr feiert ein grandioses Projekt meiner Theatergruppe Antigone 2.0 Premiere: Die Performance Ajax//Don Quichotte wird im Theater im Schokohof (TiSCH) in der Ackerstr. 169/170, Berlin gezeigt. (Anfahrtsinformationen)

Ajax//Don Quichotte lotet die Möglichkeiten aus, Theater als “perpetual beta” zu produzieren: Unsere Generation hat sich an den Umgang mit dem Unfertigen, Unvollständigen, dem Halbwissen und dem Unterbrochenen gewöhnt. Der Zugang zu Cervantes Don Quichotte und dem antiken Helden Ajax erfolgt, ohne die entsprechenden Texte vorher gelesen zu haben. In Form einer Talkshow wird das Halbwissen zusammen getragen, es ergibt sich eine heitere aber durchaus auch nachdenkliche Performance.

Zur offiziellen PressemitteilungWeitere Informationen

Aufführungen

  • 17.11.2011, 20 Uhr (Premiere)
  • 18.11.2011, 20 Uhr
  • 19.11.2011, 20 Uhr
  • 20.11.2011, 20 Uhr (RC)

Bitte geht alle hin! 🙂

Schulung zum Thema Webseiten erstellen geplant

Ich spiele mit dem Gedanken Schulungen zum Thema “Wie erstelle ich meine eigene (dynamische) Webseite und bringe sie ins Internet?” anzubieten. Es soll sich um einen Anfängerkurs handeln, der Grundlagen von HTML, CSS und PHP vermittelt, vielleicht noch ein bisschen MySQL. Ganz gerne würde ich für Freunde/Verwandte/Bekannte einen “Probelauf” zum halben Preis anbieten, um erstmal Feedback zu sammeln (z. B. ist meine Planung für Einsteiger zu umfangreich? Oder im Gegenteil viel zu wenig? Fehlt noch etwas wichtiges? Usw.). Es stellt sich die Frage, ob überhaupt jemand von diesen an einer solchen Schulung Interesse hätte, daher hiermit der Aufruf: Schreibt mir einen Kommentar oder eine Nachricht, wenn ihr bei sowas mitmachen würdet.

Schulung zum Thema Webseiten erstellen geplant weiterlesen

Herzlich Willkommen!

Herzlich Willkommen auf meiner Seite!

Mein Name ist Benedict Roeser, was schon an der Domain klar geworden sein sollte. Auf dieser Seite sind die wesentlichen Informationen, die es über mich zu wissen gibt zu finden. Außerdem möchte ich einiges an Texten, Programmen usw. sammeln und veröffentlichen, was für den ein oder anderen nützlich sein könnte.