CopyBlogger Theme – The localizable and the German Version

CopyBlogger_de Theme

The CopyBlogger theme is a WordPress theme by Chris Pearson (web developer from the US).
As I want to use the CopyBlogger theme as the new theme of my blog, I had to translate it to German. The code of the CopyBlogger Theme, as it is downloadable at Chris Pearson’s website, is English and not prepared for translations, which means, that each translator of the theme would have to dive through the code, translate every English word and then test, if he or she found each one. And then he or she had to do it again, just to be sure. To avoid this, WordPress has two special php functions for plugin or theme localization:
__($message) _e($message)
The parameter of these functions becomes translated, if a translation for the message is available. So you don’t need any language files, if you want the theme in English.

I did walk through the code of the CopyBlogger theme and substituted each occurrence of an English phrase.
Phrases which would be directly shown became substituted by < ?php _e('Phrase','copyblogger') ?> and phrases in functions by __('Phrase','copyblogger'). WordPress needs to know, in which localization context the translation is to be found. That’s the reason for the 'copyblogger' in the $message and a change I had to make to functions.php: load_theme_textdomain('copyblogger');
Further additions were < ?php _e('<*!-- - xyz translation by <*a href="your url">your name< */a> --*>','copyblogger'); ?> in the footer.php for the translator credit and a little change in index.php to make to phrase “Comments Off” translatable.

All thats left to do for a translator is, open a program like poEdit, generate a catalog of phrases (or load the de_DE.po) and translate the phrases.
There are three little flaws in the catalog, which have to be translated by hand:

  • in searchform.php all three occurrences of “To search, type and hit enter“ have to be translated to the same words. I couldn’t add this to the catalog, as functionality would be lost by doing so.
  • in 404.php Chris wrote a longer, colloquial text. Any translator has to decide if and how he wants to translate and style this text
  • in nav_menu.php you’ll find the navigation menu links. As they are different at every blog, I see no use in translating them.

I will host the CopyBlogger_localizable theme for the moment, as I could not find the Email address from Chris Pearson to make the theme available for him.

I want to thank Chris Pearson for his cool theme and Tim Zylinski for his Localizing WordPress Themes tutorial. Without the tutorial I would have had no idea how to do this.

CopyBlogger Theme – The localizable Version

Deutsche CopyBlogger Sprachdateien (German language files)

German CopyBlogger Theme (includes the German language files)

Blogs, Sicherheitslücken und Verantwortung

Wie ich gerade bei BlogSecurity lesen musste, wurde gestern Nachmittag das Blog SvenKubiak.de “defaced”, d.h. gehackt und die Startseite durch eine andere ersetzt. Die Ursache fand sich in einer veralteten Version des MyGallery-Plugins.

Software ist fehlerhaft. Punkt. Immer und zu jeder Zeit, den Software wird von Menschen erdacht und erschaffen und so fehlerhaft wie der Mensch so fehlerhaft ist auch Software, im Schnitt bedeutet das 2 Fehler je 1000 Zeilen Programmiercode.
Nun gibt es vielerlei verschiedene Fehler in Software. Manche Fehler treten nie auf, denn die Stelle an der der Fehler gemacht wurde, wird nicht erreicht (zB weil die Stelle nur im Fehlerfall erreicht wird), manche Fehler haben nur kosmetische Auswirkungen (Fehler in der Benutzeroberfläche oder allgemein in der Ausgabe), manche Fehler führen zum Absturz der Software. Manche Fehler aber sorgen für von außen angreifbare Sicherheitslücken, so wie in diesem Falle.

Programmierfehler sind immer ärgerlich, sowohl für den Software-Entwickler als auch für den Nutzer der Software, denn für beide bedeuten Programmierfehler Arbeit. Der Software-Entwickler steht nun vor der Aufgabe, den Programmierfehler zu beheben und dabei möglichst keine neuen Sicherheitslücken aufzureißen. Der Software-Nutzer hingegen steht nun in der Pflicht, dafür sorge zu tragen, dass er möglichst immer die aktuellste Version der Software vorliegen hat.

Software-Anwender haben üblicherweise das alleinige Interesse die Software anzuwenden. Sie wollen sich nicht um Programmierfehler und Software-Wartung kümmern, denn schließlich haben sie ja für die Software bezahlt und sich die Mühe gemacht, das Software-Produkt zu installieren und sich einzuarbeiten. Hier liegt ein gewaltiger Denkfehler.
Jedem Autofahrer ist bewusst, dass er sich um die Pflege und Wartung seines Autos kümmern muss. Das Auto muss gewaschen werden, der Öl-Druck überprüft und defekte Teile ausgewechselt werden. Tut er das nicht, kann das zu teuren Reparaturen und zum stehen bleiben des Fahrzeugs führen.
Bei Software ist dies kaum anders. Zwar gibt es keine Verschleißteile, die regelmäßig gewechselt werden müssen, allerdings ist regelmäßiges putzen (Festplatte aufräumen, nach Viren scannen, Backups anfertigen) und regelmäßige Wartung (va das überprüfen ob neue Versionen vorliegen) nötig, da es sonst zu Rucklern, Abstürzen oder Datenverlust kommen kann.
Dies nenne ich die Verantwortung gegenüber dem Eigentum.

Programmierfehler auf öffentlich zugänglichen Geräten, wozu auf ein Blog gehört, können aber zu deutlich schlimmeren Folgen, als nur zu Rechnerabstürzen führen. Wenn zB die Steuerung einer Ampel versagt und alle Ampeln gleichzeitig auf Grün springen, ist sogar Leib und Leben in Gefahr. Ganz so dicke kann es für Blogger dann doch nicht kommen. Im Idealfall wird eine Sicherheitslücke entdeckt und der Fehler behoben, noch bevor die Sicherheitslücke ausgenutzt wurde, im schlimmsten Fall kann aber der Webserver auf dem das Blog liegt gekapert werden und über ihn strafrechtlich relevante Daten verbreitet, die zu gehörigen Problemen für den Blogger führen können.

Was ist nun zu tun?

  1. Überlegen einer Backuplösung für das Blog, damit die Daten im Blog nicht verloren gehen können. Ich verwende das WordPress Database Backup Plugin um die Datenbank mit den Artikeln und Kommentaren regelmäßig (einmal am Tag) zu sichern. Desweiteren habe ich alle Dateien, die auf dem Webserver liegen, bei mir lokal gespeichert.
  2. Aktivieren des WordPress Update Monitor Plugins, dass anzeigt, wenn eine neue WordPress-Version erschienen ist, darum ein Update erforderlich ist und dieses Update zeitnah durchführen.
  3. Überprüfung des Blogs durch den WP-Scanner von BlogSecurity. Dieser testet sowohl die Plugins, als auch das verwendete WordPress Theme auf Sicherheitslücken. Die entsprechenden Updates sollten installiert werden.
  4. Überprüfen jedes einzelnen installierten Plugins, ob es eine neue Version gibt und gegebenenfalls das Installieren dieser neuen Version.
  5. Ausarbeitung eines Wartungsplans für das Blog. In meinem Fall bedeutet das, dass ich täglich die WordPress-Datenbank und bei jeder Veränderung der Dateien diese auf meinem Rechner sichere. Desweiteren lege ich vor jedem WordPress-Update eine zusätzliche Komplettsicherung aller Dateien und der Datenbank an. Bei jedem WordPress-Update überprüfe ich JEDES Plugin, ob eine neue Version vorliegt.
  6. Überprüfen des Webservers, denn natürlich kann und wird auch dieser Sicherheitslücken haben. Wenn man nicht gerade selbst Administrators seines eigenen Servers ist, bleibt einem hier nur das Anmahnen von Updates beim Hoster (va Datenbank, PHP-Version, Webserver und Betriebssystem seien hier genannt).

Hat man diese sechs Schritte durchgeführt und hält sich an seinen Wartungsplan, so kann eigentlich nichts mehr schief gehen. Außer natürlich, die verwendeten Passwörter sind nicht optimal

Nokia N800 – User-Agent des Browsers ändern

Das N800 standardmäßig einen Opera-Browser. Um zu einer möglichst hohen Zahl von Webseiten kompatibel zu sein gibt sich der Browser gegenüber dem Webserver als Internet Explorer 6 aus.
Normalerweise ist dies kein Problem, die Administrationsoberfläche von WordPress nervt hier aber beständig mit der Aufforderung, doch zu Mozilla zu wechseln. Auf dem N800 ist dies aber nicht so ohne weiteres möglich, also ändern wir einfach, als welcher Browser sich der Opera ausgibt.

Dazu müssen wir die Konfigurationsdatei des Browsers verändern. Keine Angst, wir wollen nur eine Ziffer von 3 auf 2 ändern, damit sich Opera als Mozilla ausgibt.

  1. Wir schließen den Browser und lassen ihn bis nach dem letzten Schritt geschlossen!!
  2. Wir öffnen das XTerm. Dies ist nicht standardmäßig installiert. Um es zu installieren einfach Maemo ansurfen und auf install klicken
  3. Nun müssen wir die opera.ini öffnen. Dies kann man entweder per vi erledigen, falls man sich damit auskennt, oder per “Notizen”.
    Im “Notizen” Fall:
    Im XTerm
    cp ./.opera/opera.ini ./MyDocs/.documents/operaini.txt
    eintippen und die operaini.txt im Dateimanager unter Dokumente mit “Notizen” öffnen
    Im vi Fall:
    Im XTerm
    vi ./.opera/opera.ini
    eintippen. Per “i” kommt man in den insert-mode, per “Schließen Button (Hardware, links vom Display der gebogene Pfeil)” + “:” kommt man in den command-mode
  4. In der geöffneten Konfigurationsdatei scrollen wir nach unten (im vi per Steuerkreuz links vom Display), bis wir den Eintrag
    [User Agent] Spoof UserAgent ID=3 Spoof Version Code=0
    erreicht haben. Den “Spoof UserAgent ID=3″ ändern wir auf “Spoof UserAgent ID=2″ und speichern die Datei ab (im vi per Schließenknopf+:wq+Enter).
    Im “Notizen” Fall muss man nun noch die Datei zurück kopieren, also
    cp -f ./MyDocs/.documents/operaini.txt ./.opera/opera.ini
    im XTerm eingeben.

Fertig ist die Umstellung. Überprüfen ob alles geklappt hat kann man, indem man zB www.showmyip.com ansurft und dort etwas runter scrollt. Dort sollte nun nirgends mehr ein Eintrag namens “Internet Explorer” zu finden sein.

Facebook – Vom Social Network zum Single-Sign-On-System?

Facebook, US-Amerikanisches Vorbild von StudiVZ, war ursprünglich ein Social Network. Aktuelle, zukünftige und ehemalige Studenten meldeten sich bei Facebook an um Freundeslisten anzulegen und so mit diesen in Kontakt zu bleiben. In ihrem Profil konnten sie über sich erzählen, Bilder hochladen und ähnlichen Krams.
Meiner Meinung nach ziemlich unsexy, erinnert mich an einen Mix aus Geocities, Telefonbuch und Blog, alles jeweils in der Version für DAUs. Wobei ich nicht sagen will, dass die Facebook-Nutzer DAUs sind, aber das System ist so simpel gestrickt, dass auch DAUs zu annehmbaren Ergebnissen kommen.

Facebook hat aber riesigen Erfolg, einen so großen, dass es sogar erfolgreiche Clones gibt, zB das unsägliche StudiVZ.
Vor vier Wochen hat Facebook F8 vorgestellt, eine Schnittstelle über die externe Software in Facebook integriert werden kann. So kann ein Unternehmen zB einen Last.fm ähnlichen Musik-Vorschlage-Dienst entwickeln und in Facebook integrieren. Die dabei generierten Werbeeinnahmen werden von Facebook an das Unternehmen weitergereicht. Nutzt nun ein Facebook-User einen solchen Dienst, dann werden alle Leute aus seiner Freundesliste darüber informiert. Somit wird eine Art virales Marketing erreicht.

Der Witz bei der Geschichte ist nun folgender: Facebook verwaltet die Nutzerdaten von 30 Millionen Nutzern und ermöglicht es externen Unternehmen mit F8 direkt an diese Nutzer heranzutreten. Da die Nutzer bei Facebook registriert sind, können sie diese Services ohne weitere Anmeldung nutzen, da Facebook die nötigen Daten an das externe Unternehmen weiterleitet, bzw den User gegenüber den Unternehmen authentifiziert.

Da klingelt doch was, das hört sich nach der schon alt bekannten, aber nie wirklich erfolgreichen Idee des Single-Sign-On-Systems(SSO-Systeme) an: Der Nutzer registriert sich einmalig bei dem zentralen Dienst und dieser reicht ggf die Nutzerdaten an andere Webseiten weiter, so dass der Nutzer sich dort nicht mehr zusätzlich anmelden muss. Schon seit sieben Jahren spielt Microsoft vergeblich mit der Idee rum(Passport bzw Windows LiveID), AOL, SUN und andere versuchten sich mit der “Liberty Alliance” und auch im OpenSource Lager gibt es mit OpenID einen ähnlich erfolglosen Vertreter dieser Idee.

Warum sind alles diese Konzepte bisher mehr oder weniger groß gescheitert?
Weil sie jeweils keine kritische Nutzeranzahl (weder auf Unternehmens-, noch auf Konsumentenseite) zustande brachten. Desweiteren waren alle SSO-Systeme von mehr oder weniger vertrauensunwürdigen Institutionen gestartet worden.
Bei Facebook ist das nun anders. Die bei Facebook angemeldeten Nutzer nutzten Facebook schon vor dem SSO-System und nutzen dies nun nebenbei mit. 30 Millionen Nutzer sind außerdem eine sehr große Nutzerzahl und alleine schon durch ihre Anmeldung bei Facebook zeigen sie eine gewissen Affinität, sich über Datenschutz keine Gedanken zu machen. Das virale Marketingkonzept via Freundesliste kommt noch verstärkend hinzu.
Angeblich wurden 65 Millionen Webanwendungen in Facebook-Nutzerprofilen eingebunden, fast 2,5 je angemeldetem Nutzer und das in nur vier Wochen. Eine enorme Zahl, va wenn man sich ansieht, dass Anwendungen wie “TopFriends” 7 Millionen bekamen, 7 Millionen mehr, als sie vor vier Wochen besaßen! iLike, der bereits erwähnte Musik-Vorschlage-Service hatte vor F8 300.000 Nutzer über die eigene Webseite und gewann über 4 Millionen neue Nutzer in den vier Wochen F8 hinzu. Kein Wunder, dass Robert bei solchen Zahlen ein feuchtes Höschen bekommt (Wow, 11 Artikel über Facebooks F8 in 33 Tagen…).

Für externe Unternehmen ist Facebook erstmal natürlich unheimlich interessant, denn wo sonst besteht die Möglichkeit so problemlos auf eine solche Nutzerbasis zugreifen zu können? Ich sehe hier aber drei größere Unwägbarkeiten:

  • Momentan ist F8 noch frisch und das Angebot an Applicationen noch halbwegs überschaubar. Wie aber sieht das in ein paar Wochen aus, wenn mehr und mehr Firmen in F8 drängen? Wann ist der Overkill erreicht, bei dem die Nutzer vor lauter “X benutzt jetzt Applikation A” ihre eigentlichen Nachrichten nicht mehr finden?
  • Wie lange wird es dauern, bis Facebook eine Gebühr für die Benutzung von F8 verlangen wird? Ich glaube den Worten des Facebook Gründers Mark Zuckerberg über die Kostenfreiheit von F8 nicht, spätestens wenn Facebook gekauft wird, ist es damit vorbei.
  • Was hindert Facebook daran, erfolgreiche Dienste einfach zu kopieren? Facebook verfügt über die Userdaten, weiß also welcher User welchen Dienst nutzt. Ist der externe Dienst erstmal aus F8 gekickt, so hat er nichts mehr, denn er weiß nicht einmal, wie seine Nutzer hießen…

Die Zukunft wird zeigen, wo der Weg hinführt, ich aber würde es mir sehr, sehr lange überlegen einen Dienst, der über ein paar Tage Entwicklungszeit hinausgeht, über F8 anzubieten.

Techniken, Metaphern und Politiker

Menschen kommunizieren gerne, es gibt sogar Menschen, deren Beruf ist es zu kommunizieren. Auch wenn es ursprünglich einmal anders ist, sind Politiker inzwischen zu Kommunikatoren geworden, die den lieben langen Tag durch die Medien den Bürgern erklären, was die Politiker tun, warum sie es tun und warum die Bürger ihnen vertrauen sollen, damit sie die Politiker weiterhin tun lassen, was die Politiker tun. Also erklären sie, mit wem sie sich getroffen haben, warum diese oder jene Idee als gut anzusehen sei und warum der politische Gegner keine guten Ideen hat.

Leider Gottes hat sich aber die Welt in den letzten Jahren drastisch verändert.

  • Vor 30 Jahren hatten nur sehr wenige Menschen Zugriff auf Computer
  • Vor 20 Jahren hatten nur sehr wenige Menschen Zugriff auf Computer mit Kommunikationsfähigkeiten
  • Vor 10 Jahren hatten nur wenige Menschen Zugriff auf das Internet
  • Vor 0 Jahren sagte noch mancher Politiker, er sei froh, dass seine Mitarbeiter für sie das Internet “bediene” oder er öffne jeden Dateianhang eines E-Mails

Technik ist grundsätzlich die Anwendung von besonderen Methoden, Prinzipien bzw. Naturgesetzen, einzeln oder in Kombination, um bestimmte Wirkungen zu erzielen.

(Quelle: Wikipedia)

Technik ist also die Anwendung von Methoden und Prinzipien, wenn man der Wikipedia glauben schenken darf. Methoden und Prinzipien haben aber eine sehr unangenehme Eigenschaft, denn wer sie nicht versteht, begreift auch nicht, wie deren Anwendung funktioniert und kann diese darum auch nicht erklären. Oft werden Metaphern verwendet, um Techniken unbedarften zu beschreiben, wobei man sehr genau darauf achten muss, die richtigen Metaphern zu finden.

Jan Schejbal hat sich hingesetzt und ein paar wichtige Techniken durch Metaphern beschrieben, damit in einfacher Sprache auch dem unbedarftesten Politiker deutlich gemacht werden kann, worum es sich bei der Technik handelt: Ein Computer ist nicht öffentlich

Sechs Blogs, ein WordPress-Update und unzählige Plugins

In was bin ich da bloß rein geraten? Am Anfang war es nur mein Blog, dann kam das Praxis-Blog dazu, dann Blogsprit(als Plugin- und Theme-Test-Blog), Schülerschreck und schließlich hochzeit.schülerschreck und abnehmen.schülerschreck. Fünf verschiedene Themes, Sechs mal unterschiedliche Plugins und alle haben das neueste WordPress-Update nötig.
Sowas ist natürlich nur Nachts möglich, um möglichst keinen Leser vor unvollendete Tatsachen zu stellen.
Also zuerst mal von Blogs allen ein Backup der Dateien ziehen. Dauert knapp über eine Stunde. Derweil kann man bequem versuchen, möglichst viele Blogs auf eine gemeinsame Plugin-Basis zu stellen. Bei fünfen hat das geklappt, aber was soll ich machen, wenn das sechste elf Plugins hat, die ich nicht einmal vom Namen her kenne? Von jedem Blog aufschreiben, welche Plugins aktiviert sind. Ich will ja ned aus versehen zB Math Comment Spam Protection aktivieren und dann kann keiner mehr kommentieren, weil die entsprechenden Felder nicht ins Theme eingebaut sind…
Dann von allen ein Datenbankbackup machen. Dank dem Backup Plugin geht das ja recht fix.
Das erste Blog updaten. Gucken ob noch alles geht. Bis auf die Administrationsoberfläche von WP-Print scheint alles zu klappen.
Die anderen Blogs dann ganz flott. Plugins deaktivieren, WordPress hochschieben, Plugins hochschieben, Plugins aktivieren, Permalinkstruktur aktualisieren (ned vergessen, sonst geht zB WP-Print ned!) und kurz gucken, ob sich ein Fehler zeigt.

Für sechs Blogs mit den bekannt langsamen 1Blu FTPs dauert das ganze 2 1/2 Stunden.

Falls was hakt, schreibt bitte einfach einen Kommentar. Ich bin dann mal im Bett.

Suchmaschinen, Landingsites und Google Reader

Auf der Suche nach Informationen wirft man gerne mal eine Suchmaschine an und befragt sie, ob sie nicht ein paar Webseiten wüsste, die die gewünschten Informationen beinhalten. Oft stößt man dabei auf Blogs und dort nur auf die Startseite oder eine Unterseite, die nichts mit dem gewünschten Thema zu tun hat. Dies kann zB daran liegen, dass die Suchmaschine in dem Moment, in dem sie die Seite untersucht, aus mehreren Artikeln und/oder Kommentaren und/oder Einträgen in den Seitenleisten die Suchwörter extrahiert, diese aber in keinem Causalen Zusammenhang stehen.
Dem kann man Abhilfe schaffen, indem man Suchmaschinenbenutzern etwas andere Inhalte anzeigt, als dem normalen Leser. Dafür gibt zwei praktische WordPress-Plugins:

Zum einen Search-Hilite (Umlaut-Problematik beachten), das die Suchbegriffe auf der Ergebnisseite farblich hervorhebt, damit schneller ersichtlich wird, ob und wo die Suchbegriffe zu finden sind und ob sie in einem Zusammenhang stehen.

Zum anderen Landingsites, das dem Nutzer neben der eigentlichen Seite eine Reihe von Artikeln mit den gesuchten Begriffen anzeigt. So erhöht sich die Chance, dass der Leser auch wirklich einen Artikel findet, der zu seinem Suchbegriff passt. Landingsites wertet dabei den Referrer-Text aus und kann so erkennen, von welcher Suchmaschine der Nutzer kommt, macht aber einen kleinen Fehler, indem es den Google Reader ebenfalls als Suchmaschine bewertet. Da sich im Seitenaufruf von Google Reader-Nutzer keinen Suchbegriff befindet, zeigt Landingsites hier eine Fehlermeldung an. Dies lässt sich vermeiden, indem man eine Zeile Code in das Plugin einbaut:

  1. Öffne die Plugin-Datei, wahlweise lokal mit einem Editor oder einfach aus WordPress heraus mit dem Plugin-Editor.
  2. Suche nach folgender Zeile:
    <strong>if (!isset($_SERVER['HTTP_REFERER']) || ($_SERVER['HTTP_REFERER'] == '')) return false;</strong>
  3. Füge hinter dieser Zeile folgende Zeile Code ein:
    <strong>if(strpos($_SERVER['HTTP_REFERER'],"/reader/view")) return false;</strong>

Die eingefügte Code-Zeile testet nun bei jedem Aufruf des Plugins, ob sich im Referrer-Text des Nutzers “/reader/view” befindet und falls ja sorgt sie dafür, dass die Landingsite nicht angezeigt wird.
Den Hinweis auf diese Möglichkeit habe ich aus einem Kommentar des ursprünglichen Plugins und zwar von Haje Jan Kamps vom 09.01.07 .

via onSEO