Mehr als zwei Jahre ist es nun her, dass ich mein erstes offizielles WordPress Plugin Faviroll im WordPress Plugin Directory veröffentlicht habe. Lange Zeit stand es unverändert in der primitiven Version zur Verfügung. Ein Anwender kontaktierte mich neulich und fragte, ob ich nicht mal eine Überarbeitung im Backend machen könnte und verwies mich auf das andere Plugin Noio Iconized Bookmarks. Als ich zurückfragte, wieso er dann nicht das andere Plugin verwenden möchte, kam die Antwort, weil ihm die Cache Engine von Faviroll um Längen besser gefiele. Das fand ich gut und gab mir wiederum die Motivation mich mal wieder dem Thema zu widmen.  In der Tat war das Backend nicht wirklich toll, aber ich wollte auch nicht 1:1 bei Noio abkupfern denn dieses Panel gefiel mir auch nicht in allen Details. Aber die Grundidee war gut.

  • Geblieben ist

Die PNG Cache Engine. Jedes Icon wird lokal als PNG im cache Verzeichnis gespeichert. Das Plugin bedient sich ausschließlich aus dieser Sammlung. Für die Icons finden keinerlei externe Zugriffe mehr statt. Hierdurch verhindert wird, dass der ein evtl. gerade belasteter externer Server die eigne Seite in der Performance herunterzieht. Die Unterstützung des Plugins  wp-render-blogroll-links, falls man die Blogroll auch mal in einem Artikel einbauen möchte, wird’s da auch bunt werden.

Der Nachteil, dass manche ICO Images sich nur in schlechter Qualität ins PNG konvertieren lassen. Diesen blöden Effekt konnte ich (noch) nicht beseitigen.  Aber ab sofort hat man mit den “custom icons” zumindest die Möglichkeit dem Bookmark ein Icon mit einer besseren Qualität zuzuweisen.

  • Neue Features

Sofortige Übernahme aller Aktionen, der SUBMIT Button ist komplett entfallen.

Alle Favicons können nun auf bequeme Weise beliebig den Bookmarks zugewiesen werden, einfach per Mausklick.

Jedem Bookmark wurde eine weitere Spalte für ein “custom icon” spendiert. Sollte die Standard Icons nicht ausreichen oder eine schlechte Qualität besitzen, kann man hier eine beliebge Bilder-URL angeben, das Bild wird dann automatisch mit in den cache als 16×16 Pixel Icon hinzugepackt und kann beliebig verbaut werden. Sollte es sich bei der URL nicht um eine Bilderquelle handeln, wird automatisch das Favicon des angegebenen Servers in den Cache gepackt.

Zurücksetzen der Original-Icons. Hat man sich zu sehr bei der Neuzuordnung der Favions verzettelt, kann man mit dem Button “restore bookmark icons to their origins ” den Urzustand der Bookmarks wiederherstellen.

Zusätzlich werden die Favions auch in der Standard Links-Verwaltung dargestellt.

So weit erst mal von hier, ich wünsche viel Spaß beim Icons klicken.

Falls jemand weitere Ideen für das Thema hat, immer her damit.

  • Pick it from here

    ( Don’t forget to vote the plugin there )

 

 


Endlich eine schöne Lösung in zumindest in PHP, um einen komplexen String in seine Bestandteile zu zerlegen. Jeder der schon mal eine “google-like” Suchmaschine gebaut hat kennt das Problem, den eingegebene Suchstring in einen SQL-Querystring umzusetzen. Ein einfaches explode(' ',$suchStr) ist da leider nicht leistungsfähig genug, da u.a. komplexe bzw. verschachtelte Suchworte ( Blabla “Bla Bla” FooBar ‘Foo Bar’ ) also mit Anführungszeichen innerhalb des Suchstrings falsch zerlegt werden. Eine Google-Recherche nach einer pragmatischen Lösung brachte die abenteuerlichsten Routinen anderer Entwickler. Damit wollte ich mich noch nicht zufrieden geben aber auch nicht selbst beginnen, über evtl. reguläre Ausdrücke einen eigenen Stringparser zu bauen. Also habe ich erstmal etwas anderes gemacht. Eine erneute Recherche zu einen späteren Zeitpunkt führte mich zu: PHP explode the string, but treat words in quotes as a single word. Dort fand ich putzig, das oben ein interessantes RegExp-Pattern diskutiert wurde, am Schluß jedoch der schnörkellose Satz auftaucht: “This would have been much easier…”. Gemeint war die PHP Funktion, str_getcsv(), welche seit PHP 5.3 in zu den Standard-Funktionen gehört. Ich übernehme der Einfachheit halber einfach mal das “Lorem ipsum” Beispiel vom Stackoverflow, um das Ergebnis von str_getcsv zu demonstrieren.

Für alle die, die noch nicht PHP 5.3 einsetzen können, sollten sich die str_getcsv-Manualseite bei PHP.net durchsehen, dort sind abwärtskompatible Übergangslösungen gelistet.

$string = 'Lorem ipsum "dolor sit amet" consectetur "adipiscing elit" dolor';
var_dump(str_getcsv($string, ' '));

Ergebnis:

array(6) {
     [0]=>   string(5) "Lorem"
     [1]=>   string(5) "ipsum"
     [2]=>   string(14) "dolor sit amet"
     [3]=>   string(11) "consectetur"
     [4]=>   string(15) "adipiscing elit"
     [5]=>   string(5) "dolor"
   }

  • Problem 1:
    Beim Verbinden zum Server taucht lediglich ein kleines schwarzes Fenster auf, mehr passiert nicht.
    _
    Lösung zu 1:
    Der NetAuthAgent-Prozess hat sich am Client aufgehängt und muss gestoppt werden.
    Das geht entweder über den Aktivitätsmonitor oder übers Terminal mit:
    sudo killall NetAuthAgent
    Anschliessend sollte die Verbindung wieder wie gewohnt funktionieren.
    _
    siehe auch: http://forums.macrumors.com/showthread.php?t=441030 bzw. die deutsche Google-Übersetzung, hier sollte man besonders die “Anklagebank” beachten ;-)

 

  • Problem 2:
    ARD ist auf dem Server nicht gestartet, bzw. startet nicht mehr.
    _Lösung zu 2: (Bedingung, min. ein Zugang via ssh)

    # mit ssh auf Server einloggen
    ssh <remote-user>@<remote-server>
    
    # komplett auf "root" switchen
    sudo su -
    
    # ARD Service stoppen
    /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart \
    -deactivate \
    -configure \
    -access \
    -off
    
    # Letzte (wahrscheinlich defekte) Einstellungen wegschieben
    mv /Library/Preferences/com.apple.RemoteManagement.plist /tmp
    mv /Library/Preferences/com.apple.RemoteDesktop.plist /tmp
    
    # ARD Service jungfräulich starten, erstmal dass jeder Zugang hat.
    /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart  \
    -activate \
    -configure \
    -access \
    -on \
    -restart \
    -agent \
    -privs \
    -all

Aufgrund des vorherigen Artikel bekam ich einen Tipp, den ich hiermit gerne weitergebe. Apple/IPod User sollten es gewohnt sein, dass alles “Spezial” ist, sodass alle erdenklichen Adapter nicht miteinander kombinierbar sind. Doch beim Entenkopf gibt es eine interessante Ausnahme, ein handelsübliches Kabel eines Radios / Elektrorasierers passt direkt in den Netzteil-Stecker. Dieses ist nicht nur interessant, wenn der Entenkopf defekt ist sondern auch, wenn das Kabel zu kurz ist.


Mein Entenkopf (Duckhead) ist mir tatsächlich aus sehr geringer Höhe heruntergefallen. Ein Pin des 220V Steckers war ca. 5mm nach innen verbogen, gerade so viel, dass er nicht mehr in die Steckdose passte. Ganz vorsichtig wollte ich ihn zurückbiegen und **KNACK** ab war er. Beim genauen Hinschauen war auch der Grund schnell klar. Unter den weißen Kunststoff verbirgt sich massives, jedoch sehr prödes Messing. Dieses ist von Haus aus zwar bestimmt gut leitend, aber extrem biegeempfindlich. (wie ich schmerzlich erfahren musste). Vor allem auf Reisen kann es da schon mal eng werden, wenn einem der “Juice” ausgeht. Daher entweder den Duckhead schützen wie den eigenen Augapfel, oder einen Ersatz-Entenkopf einstecken. Glücklicherweise gibts die Dinger als Einzelteil, jetzt weiß ich vor allem auch WARUM!


Terminal Befehl gleich mit Copy/Paste übernehmen.

/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister \
-kill \
-r \
-domain local \
-domain system \
-domain user

Als Anwort bekommt man die wenig ausdrucksstarke Meldung:
ThrottleProcessIO: throttling disk i/o
Wieso für das Entfernen ungültiger Einträge der Disk I/O gedrosselt wird, wissen anscheinend nur die “Apfel-Leute”, aber mir soll’s recht sein.