Relevanssi mit (führender) Interpunktion

Ich nutze meine Tags insbesondere auch zum Suchen (wozu würde man die sonst brauchen?), aber WordPress indiziert die von Haus aus gar nicht. Deshalb nutze ich Relevanssi. Das wiederum versucht, besonders schlau zu sein, was (meiner Meinung nach: Wie immer) etwas nach hinten losgeht, denn so wird beispielsweise aus .NET “net”. Was total OK für die URL ist, aber beim Suchen nicht hilft, denn eine Suche nach “net” findet grundsätzlich auch “.NET” (weil Teilwort); eine Suche nach “.net” aber dann nicht!

Die Lösung ist das Folgende in der functions.php:

siehe hier.

Safari blockiert Plugin ohne entsprechenden Hinweis?

Safari blockiert Plugins wie Flash und Java. Normalerweise bekommt man einen entsprechenden Hinweis:

es sei denn, man hat diesen Hinweis explizit deaktiviert. Manchmal erscheint der Hinweis allerdings nicht, und keiner weiß, warum. Eine erste Beobachtung: Wenn ich in den Entwicklertools (oder wie auch immer das beim Safari heißt) die Höhe des SWFs von 100% auf 99% ändere, dann erscheint der Hinweis. Vielleicht liegt’s an den 100%? Aber nein, steht das SWF schon beim Laden auf 99%, bleibt der Fehler. Es muss also am Repaint liegen, der durch die Änderung in den Entwicklertools ausgelöst wird.

Deshalb, die Lösung: Eine Millisekunde Verzögerung zwischen Seitenaufbau und Rendering des SWF

Plus: Safari scheint die Seite nach Freischaltung des Plug-Ins aus seinem Cache zu ziehen und dann irgendwie durcheinander zu kommen. Deshalb setze ich die folgenden Header für die Seite:

Dann geht’s.

Ich weiß, warum ich froh bin, mich mit diesem Crossbrowser-Gedöns nicht mehr (allzu oft) beschäftigen zu müssen m(

Firefox: “Pixel Perfect” ohne Button “Add Overlay”

Das großartige Plugin “Pixel Perfect” hat in der (aktuellen) Version 1.7.1 ein Problem mit aktuelleren Feuerfüchsen: Der Button “Add Overlay” ist verschwunden. Lösung (OS X-Version):

  • /Users/<benutzername>/Library/Application Support/Firefox/Profiles/<id>.default/extensions/pixelperfectplugin@openhouseconcepts.com/chrome/pixelperfect/content/PixelPerfectPanel.js öffnen
  • unter “addMenuOption(‘Hide Overlay When Inspecting’, …” (etwa Zeile 183) die Zeile addMenuOption(‘Add Overlay’, Firebug.PixelPerfectModule.addOverlay, false); hinzufügen

Der Button erscheint nun im Dropdown-Menü im des “Pixel Perfect”-Tabs

WordPress: Posts sortieren über mehrere Custom Fields

In WordPress kann man eigene Daten zu jedem Post speichern, so genannte Custom Fields. Technisch funktioniert das so, dass pro Post und Field ein Eintrag in der Tabelle wp_postmeta angelegt wird.

Beispiel: Ein Rating-Plugin könnte pro bewertetem Post einen Eintrag <meta_key:rating> mit der Gesamtzahl an “Sternen” (1=schlecht, 5=super), und einen Eintrag <meta_key:raters> mit der Anzahl an abgegebenen Stimmen anlegen. Also zwei Zeilen in wp_postmeta pro Post, für den Stimmen abgegeben wurden. Genau so macht es “Post Rate“. Anmerkung: Man speichert das schon deshalb als zwei diskrete Werte, um bei der nächsten Bewertung wieder den Durchschnitt berechnen zu können – ich musste kurz überlegen, bis mir das klar wurde 🙂

So, nun hat man in dem Beispiel bewertete Posts, und möchte diese Posts vielleicht nach ihrer Bewertung sortiert anzeigen. Kann ja nicht so schwer sein, schließlich gibt es zB $wpdb mit get_results(). Zu einem Problem wird das (für jemanden, dessen SQL-Kenntnisse etwas eingerostet sind mich) dadurch, dass es eben zwei Einträge in wp_postmeta gibt – und beide speichern ihren Wert in wp_postmeta.meta_value! Für eine Sortierung müsste man die Bewertung (stehen unter <meta_key:rating> in meta_value) durch die Anzahl an Stimmen (stehen unter <meta_key:raters> in meta_value) teilen.

Lösung: JOIN. Erst habe ich einen LEFT JOIN versucht geklaut, aber der definiert sich so, dass er alle Posts ausgegeben hätte, selbst wenn für sie gar kein Rating abgegeben wurde. Deshalb also nur JOIN. Basierend auf dem Foreneintrag mit dem LEFT JOIN ist dabei folgendes entstanden:

Etwas wie AS lag mir schon auf der Zunge, allerdings eher als SELECT AS… das in einem (bzw. zwei) JOIN zu verwenden, und zwar sowohl in dem JOIN (“rating.post_id”), wie auch im ORDER BY hätte ich nicht hinbekommen. In diesem Sinne: HTH 🙂

PS: Die formatierte Ausgabe ergibt sich dann aus dem bereits erwähnten Eintrag.

Arduino mit Eclipse, zweiter Versuch

Nachdem der erste Versuch ziemlich zäh lief, hat mich Michael freundlicherweise auf ein neues Plugin hingewiesen. Und das funktioniert tatsächlich ziemlich gut (allerdings sind einige Kleinigkeiten zu beachten, wenn ihr auf dem Mac arbeitet):

  1. Man benötigt Eclipse in der C/C++-Version und die Arduino IDE (ich habe die 1.0 verwendet).
  2. Das Plugin gibt es unter “http://www.baeyens.it/eclipse/update site”. Wichtig: Das Leerzeichen darf nicht durch %20 ersetzt werden (macht Eclipse evt. automatisch)! Etwas unglücklich.
  3. In den Plugin-Einstellungen soll man den Pfad zur Arduino-IDE angeben. Auf dem Mac ist Folgendes einzutragen (Quelle): /Applications/Arduino.app/Contents/Resources/Java
  4. Der AVRDude-Pfad (siehe): /Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/etc/avrdude.conf
  5. Unter Arduino/Paths sind folgende Pfade einstellen, siehe Screenshot und arduino.cc. (genaues Hinschauen lohnt sich – mich hat das doppelte “avr” der “AVR Header Files” 5 Minuten Fluchen gekostet^^)
  6. Beim Anlegen eines neuen Projektes muss man die Board-Version (zB “Uno”) auswählen und den Port angeben. Der Port ist das, was in der Arduino IDE unter Tools -> Serial Port ausgewählt wird – bei mir “/dev/tty.usbmodemfa131”
  7. Für diejenigen unter euch, die (wie ich) nicht vertraut mit der C++-Version sind: Kompiliert wird mit dem “Hammer” (dauert bei mir recht lange); auf’s Board geschoben wird das Ganze mit dem “AVR”-Button.

Wermutstropfen bisher:

  1. Den Eclipse-Debugger kann man auch hier nicht benutzen. Aber schon die Shortcuts, Templates usw sind der Hit!
  2. Importe sind manuell hinzuzufügen. So braucht man für ein simples “Serial.begin(9600);” schon ein “extern HardwareSerial Serial;” usw. 🙁

Danke an Michael für den Tipp, garretto für das tolle Tutorial (nachdem ich es entdeckt habe, war dieser Eintrag quasi überflüssig), und Jantje für das Plugin!

Twitter für WordPress

Es gibt viele Plugins für WordPress, um seine Tweets anzuzeigen.

Das Problem von fast allen: Sie rufen serverseitig ab, und zwar dynamisch. Ein Problem ist das deshalb, weil Twitter die Anfragen auf 150/Stunde/IP beschränkt. Wenn man, wie ich, keinen dedizierten Server mit eigener IP hat, dann sind die 150 Requests schnell aufgebraucht. Sehr schnell. Ich habe gerade (unter der Woche, gegen 23 Uhr) etwa 7 Minuten gebraucht. Wenn das Plugin nun serverseitig die Nachrichten abruft, dann kommen also keine Ergebnisse – und darüber hinaus hängt die Seite schlimmstenfalls, weil das PHP-Skript auf Twitter wartet.

Eine schlechte Eigenschaft von vielen Plugins darüber hinaus: Sie zeigen keine Retweets an.

Mindestens das folgende Plugin umgeht die oben beschriebenen Probleme: Tweet Blender. Erstens zeigt es auch Retweets an. Dann legt es einen Cache an, und verwendet diesen, statt jedes mal Twitter anzupingen. Dieser Cache wird nach dem Laden der Seite per Javascript geholt; die Seite hängt also nicht.

Außerdem zeigt es den aktuellen Serverstatus in Bezug auf verbleibende Requests an (siehe Bild; das hat mich überhaupt erst auf das Thema gebracht); auf Wunsch auch als Nachricht für den Nutzer. Es unterstützt übrigens auch mehrere Accounts (was mir persönlich schnurz war).

Das Ergebnis seht ihr rechts; morgen (oder so) werde ich das mal ein wenig skinnen.