Ein WordPress Blog still legen und archivieren

Der Bytelude ist nun bereits mein dritter Blog. Zuerst war da mein selbst geschriebenes CMS mit integriertem Blog, und anschließend kam eine WordPress Variante. Irgendwann war die Situation etwas fest gefahren und so beschloss ich, nochmal einen dritten Anlauf zu wagen. Dabei herausgekommen ist bytelude.de. Und da ich es selbst nicht leiden kann, dass Google Suchergebnisse ins Leere führen, sind die anderen beiden natürlich weiterhin aktiv. Bei der selbstgeschriebenen Variante ist das nicht weiter tragisch, da ich das CMS trotzdem aktiv pflege und es extrem wenig Ressourcen benötigt. Bei WordPress sieht das schon anders aus. Zum einen muss man es immer auf dem aktuellsten Stand halten und zum anderen frisst es bei jedem Aufruf ziemlich viele Ressourcen. Nach ein paar Google Suchanfragen bin ich dann auf die Idee gekommen, dass man WordPress ja auch einfach in eine statische Seite konvertieren kann.

Gesagt getan, und ich bin auf folgende zwei Tutorials gestoßen:

Convert WP to static html

How to retire a wordpress blog

Die erste Anleitung hat bei mir leider nicht richtig funktioniert, enthält aber den wichtigen Teil der Vorbereitung. Kurz gesagt: man sollte die Seite auf Permalinks umstellen. Das sinnvollste Format ist “/jahr/monat/post-name/”. Die Permalinks sind notwendig, da sonst immer nur Dateien wie “index.php?parameter=value…” abgespeichert werden. Der Aufruf im Browser funktioniert dann natürlich nicht korrekt und man bekommt eine Menge Fehler.

Und hier der Code in Kurzform:
Permalinkstruktur folgendermaßen einstellen:

"/%year%/%monthnum%/%day%/%postname%/"

Anschließend müsst ihr, falls noch nicht vorhanden, die entsprechende .htaccess Datei mit folgendem Inhalt anlegen:

RewriteEngine On
RewriteBase /pfad/zum/wordpress/blog/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /pfad/zum/wordpress/blog/index.php [L]

Und schon kommen wir zum 2. Tutorial. Dort wird dann der entscheidende wget Befehl erklärt. Vorher wird noch darauf hingewiesen, dass man die Trackback und xmlrpc.php links aus dem gewählten Theme entfernen sollte. Andere Blogs versuchen sonst Trackbacks zu senden, da diese ja im HTML Code hinterlegt sind.

Nachdem das erledigt ist, hier nun der finale wget Befehl:

wget -r -E -T 2 -np -R xmlrpc.php,trackback -k http://[BLOG URL]

Führt diesen Code in einem extra Ordner aus. Es wird automatisch ein Ordner mit eurer Blog-URL angelegt, darin ist dann die komplette Seite enthalten.

Wget fängt nun auf eurer Hauptseite an, diese in Form einer index.html abzuspeichern. Evtl. verlinkte CSS Dateien und Javascript Files werden in der gleichen Ordnerstruktur wie auf eurem Server heruntergeladen und abgespeichert. Dieser Vorgang wird nun für alle auf der Seite gefundenen Links wiederholt. Durch die Permalink Struktur werden nun die einzelnen Blog-Beiträge in der Form /Jahr/Monat/Titel/index.html abgespeichert.

Wenn der Vorgang abgeschlossen ist, könnt ihr euren WordPress Ordner löschen und an dessen Stelle den heruntergeladenen Ordner (natürlich ohne den Ordner mit eurem Domainnamen) kopieren. Nun sollte eure Seite weiterhin wie gewohnt geladen werden und alle Links funktionieren auch – außer den dynamischen Funktionen wie Kommentare oder dem Admin-Panel. Ihr werdet auch bemerken, dass die Seite nun deutlich schneller lädt und euer Server deutlich weniger belastet wird. Und man muss sich nicht mehr um Updates kümmern 😉

Neues Spielzeug: Mini Bluetooth Tastatur für das iPad

20110907-124733.jpg

Einleitung
Nachdem ich in der letzten Woche herausgefunden hatte, dass eine billige 10€ USB Tastatur über das Camera-Connection-Kit einfach an das iPad angeschlossen werden kann, war ich sofort begeistert. Für das normale Surfen braucht man natürlich keine Tastatur, aber Emails mit mehr als 3 Absätzen, längere Blog Kommentare oder einfaches chatten können auf Dauer auf einer Touch Tastatur nervig sein. Der Umweg über das Camera Connection Kit und eine USB Tastatur ist für’s erste ganz ok, allerdings nervt die Kabellage dann doch etwas – und genau hier hilft eine Bluetooth Tastatur weiter. Neben den offiziellen Apple Tastaturen werden vom iPad auch alle anderen Bluetooth Tastaturen unterstützt.

Nach kurzer Recherche stieß ich bei Amazon auf die GeneralKeys Bluetooth Mini Tastatur, welche mit 30€ noch im preislichen Rahmen liegt und äußerst geringe Maße aufweisen kann. Gerade kam nun das Paket an und es empfing mich eine ultraleichte, sehr kompakte Tastatur.

Ausstattung
Das Teil besteht aus einer Plastik/Gummi Mischung, welche sich ganz gut anfühlt. Über 2 Status LEDs sieht man schnell, ob die Tastatur noch lädt (geschieht über Mini-USB) und/oder sie gerade für die Bluetooth Suche verfügbar ist. Der fest verbaute Akku dient gleichzeitig der Schräglage der Tastatur, was der Ergonomie ein bisschen helfen soll.

Um die Tastatur für das iPad und andere Geräte auffindbar zu machen, muss man einen spitzen Gegenstand in die entsprechende seitliche Öffnung der Tastatur stecken. Ab diesem Moment gibt sie die Verbindung zum derzeitigen Gerät auf und kann neu verbunden werden. Das klappt mit dem iPad und dem Macbook sehr leicht und wird durch die Eingabe eines Zahlencodes über die Tastatur bestätigt. An der Unterseite der Tastatur befindet sich der Schalter für on/off.

Bedienung und Handhabung
Die Tasten sind durch die geringen Maße sehr klein gehalten und reichen für mich gerade noch so – mit richtig großen Fingern sollte man lieber die Finger von dem Teil lassen. Dafür überrascht die Qualität für diesen Preis in der Benutzung ungemein. Der Druckpunkt der Tasten ist echt gut und ich konnte gleich von Anfang an wunderbar 10-Finger tippen.

Einzig die Löschen-Taste und die rechte Shift-Taste sind etwas ungünstig positioniert und klein dimensioniert. Das ist nicht weiter schlimm, man muss sich aber etwas umgewöhnen.

Sehr nett finde ich, dass die Funktionstasten wie “Homebutton”, Lautstärkeregelung und Mediaplayersteuerung (letzer/nächster Track, Play/Pause) auch vom iPad verstanden werden und man so noch ein bisschen mehr Bequemlichkeit bekommt.

Einsatzgebiete
Zur Akkulaufzeit kann ich noch nicht viel sagen. Laut den Amazon Bewertungen soll sie wohl mehrere Tage durchhalten, was für meine Zwecke völlig ausreichend ist.

Neben der Verbindungsmöglichkeit zu den Mac Produkten (Mac, iPhone, iPod touch, iPad1+2,…) kann man die Tastatur eigentlich mit so ziemlich jedem Bluetooth Gerät verbinden – von der Playstation 3 über das Windows Mobile Phone bis hin zu Windows PCs. Diese Vielseitigkeit finde ich besonders praktisch und so kann es sicher nicht schaden, so eine universelle Tastatur zur Verfügung zu haben.

Fazit
Kaufempfehlung für die Leute, die so eine Tastatur suchen/brauchen! Und wem die Tasten zu klein sind, der kann ja noch immer von den 14 Tagen Rückgaberecht Gebrauch machen.

Links
GeneralKeys Bluetooth Mini Tastatur

[Video Tutorial] manuelle Blende im Videomodus der Canon EOS 500d einstellen

Hier kommt nun mein zweites Videotutorial mit dem oben genannten Thema. Ich möchte euch zeigen, wie man mit einfachen Schritten die Automatik der Kamera überlisten kann, um im Videomodus zumindest die Blende manuell einstellen zu können. Da die EOS 500d ein Einsteigermodell ist, hat Canon hier absichtlich die Möglichkeit entfernt, Werte wie Belichtung, ISO oder eben auch die Blende manuell einstellen zu können. Für Hobbyfilmer ist auch dieser Automatikmodus völlig ausreichend, eine professionelle Aufnahme kann man so aber nicht durchführen. Ich hoffe, dass euch das Tutorial weiter hilft – bei mir hat es das getan 😉

Weiterhin freue ich mich natürlich über jede Art von Feedback und vor allem auch über Vorschläge für weitere Video Tutorials.

Portal: no Escape (Kurzfilm)

Portal ist eines der besten Spiele, die ich je zocken durfte. Diese Mischung aus Spielwitz, intelligentem Spieldesign und einer sehr gut gemachten Story haben mich von Anfang an gefesselt. Dan Trachtenberg hat das Feeling zwar in etwas düsterer Form, aber visuell auf jeden Fall aufwändiger, in dem Kurzfilm “Portal: no Escape” ziemlich gut umgesetzt. Sehr sehenswert, auch wenn man das Game nicht kennt oder mag.

via Bitbanausen.de

Qualitätsjournalismus und differenzierte Darstellung der Gamescom in den Medien

Ein grandioses Beispiel, wie qualitativ hochwertiger Journalismus auszusehen hat – der Beitrag hat einfach alles: qualifizierte Interviewpartner, es werden keine Klischees bedient, es wird das komplette Feld, die diese europäische Leitmesse bietet, abgedeckt. Besser geht es nicht:

Sollte Apple ein Mobilfunk-Anbieter werden?

Über den äußerst interessanten Artikel Steve, Please Buy Us A Carrier! bin ich ein bisschen ins Grübeln gekommen. Und nach einiger Zeit kam ich drauf, dass Jean-Louis Recht hat.

Vorwort

Wie ich darauf komme? Schauen wir uns doch mal die derzeitige Situation hier in Deutschland an: wir haben T-Mobile, Vodafone und O2 als die großen drei – auf E-Plus will ich hier gar nicht zu sprechen kommen – und wir haben die Aldis, Lidls, blau.de’s usw. – wobei diese reine Dienstleister sind, die die Netze der 4 Hauptanbieter verwenden. Wir haben Leute wie mich, die im Monat 50€ oder mehr für ihren Handyvertrag zahlen, wir haben die “ich will alles haben, aber nur 10€ im Monat zahlen”-Leute und wir haben Prepaid. Wir haben Zeiten, in denen noch Unmengen an Geld mit Technologien wie SMS verdient werden: würde man einen Megabyte an Daten per SMS versenden, so würde das ca. 1245€ kosten. Berechnung:

1MB * 1024 = 1024KB
1024 KB * 1024 = 1048576 Byte
1048576 Byte / 160 = 6553,6 SMS (eine SMS hat 160 mögliche Zeichen, wobei ein Zeichen 1 Byte groß ist)
6553,6 SMS * 0,19 € = 1245,18 €

ich hoffe, dass ich mich hier nicht blamiere und mich verrechnet habe – wenn dem so ist bin ich natürlich für Hinweise in den Kommentaren dankbar 😉

Egal wie hoch die Summe nun genau ist, so zeigt die Berechnung doch eines: wir bezahlen völlig unverhältnismäßig viel für eine Dienstleistung, die ursprünglich einmal kostenlos war und für den Dienstleister keinen großen Mehraufwand bedeutet.

Aber ich will mich an dem Thema SMS jetzt gar nicht aufhängen, denn es geht weiter: wir bekommen von unseren Providern “Flatrates” verkauft, mit denen man “unbegrenzt telefonieren und SMS schreiben” oder “unbegrenzt mit 7,2 MBit/s surfen” kann. Was wir aber bekommen, sind sicher extrem umfangreiche Minutenpakete bzw. Inklusiv-SMS, aber auch Drosselung der Internetleitung, sobald 200MB, 500MB oder 1GB an Daten verbraucht sind. In Zeiten von Youtube, Skype und allen anderen multimedialen Inhalten, aber auch einfach nur modernen Internetseiten kommt man im Monat schnell an dieses Limit heran.

Wir erleben Provider, die es Technologieunternehmen äußerst schwer machen, neue und sinnvolle Technologien einzuführen. Wir müssen mit unverschämt hohen und unzeitgemäßen Roaming-Gebühren auskommen, die selbst schon in den unmittelbaren Nachbarländern wie Österreich greifen.

Man könnte diese Liste noch sehr viel weiter treiben – aber es wird doch klar, dass vieles ziemlich ungünstig für den Kunden ist.

Und hier bekommt die Idee, dass Apple auch diesen Service übernehmen könnte, ins Spiel. Mir ist völlig bewusst (und es wird auch mehrfach in Jean-Louis Artikel erwähnt), dass dies wohl nie eintreten wird. Alleine schon aus Gründen von Wettbewerbsrechten usw. ist es unmöglich, dass Apple einen der großen Anbieter übernimmt bzw. selbst einen aufbaut. Aber lasst uns den Gedanken doch mal weiter spinnen. Natürlich bin ich als Fanboy ziemlich voreingenommen, aber letztlich auch überzeugt.

Grund 1: die Preispolitik
Bei Apple ist man ein großer Freund von festen Preisen – würde es nach dem Konzern gehen, hätten wir wohl längst die Kulturflatrate und könnten für einen Festpreis auf alle Multimediainhalte zugreifen.

Übertragen auf ihre Tätigkeit als Mobilfunkprovider würde dies wohl bedeuten, dass wir eine relativ einfache Preisstruktur vorfinden würden. Jean-Louis meint, dass wir wohl mehrere einfach gestaffelte Komplettpakete für fixe Preise erhalten würden – kommt man an die Grenze seines Pakets, so könnte man sich per Anruf/App/wasAuchImmer in das nächste Paket hochstufen und würde dies für den laufenden Monat zahlen – im nächsten Monat hätte man dann wieder sein ursprüngliches Paket. Das größte Paket wäre dann eine echte Flatrate, die aber natürlich auch ihren Preis hat.

Ich würde an dieser Stelle sogar noch einen Schritt weiter gehen und könnte mir vorstellen, dass es gar keine Preispolitik, sondern einen einzigen festen Preis gibt und eine echte Flatrate gibt. Zahl ihn, oder lass es. Nur weil man eine Flatrate hat, telefoniert man nicht automatisch mehr. In der Masse und auf einen längeren Zeitraum gesehen, würden die Kosten für Apple also nicht viel höher werden, als wenn sie, wie die deutschen Provider derzeit, abrechnen.

Um das eigene Angebot zu pushen, würde man wohl auf die gleiche Methode wie bei der Markteinführung des iPhones setzen, und das Gerät exklusiv anbieten. Wenn man gleichzeitig attraktive Preise bieten kann, würde es an mangelnder Kundschaft kaum scheitern.

Grund 2: freie Bahn für neues
Einer der wichtigsten, für mich sogar der wichtigste Punkt: keine Diskussionen mehr über die Möglichkeit (natürlich im Rahmen seines verfügbaren Datenvolumens), das Handy als Accesspoint für den eigenen Rechner zur Verfügung zu stellen. Keine Diskussionen mehr, dass man Anwendungen wie Facetime bitte nur über Wlan laufen lassen kann. Keine Diskussionen mehr, ob man P2P Verkehr auch über die mobile Leitung verwenden kann usw.

All diese Punkte werden derzeit aktiv durch die Mobilfunkprovider blockiert – daher darf man aus dem Appstore unterwegs nur Apps laden, die nicht größer als 20Mb sind oder kann sich unterwegs eigentlich nur Youtube-Videos in verminderter Qualität anschauen.

Alle hier genannten Probleme sind nicht etwa technisch bedingt – das sollte man immer im Hinterkopf behalten. Würden die Provider diese Dienste zulassen, müssten sie mehr Geld in ihre Netze investieren – und das würde ihren Gewinn schmälern.

Um für Kunden sexy zu sein, würde Apple hier höchstwahrscheinlich wesentlich freizügiger sein, als andere Anbieter.

Grund 3: Kundenservice
Hierfür muss ich eine aktuelle Geschichte erzählen: Seit Mitte letzten Jahres bin ich stolzer iPhone 4 Besitzer. Wie bei JEDEM technischen Gerät kann es auch bei Apple mal zu Fehlern kommen, und so hatte ich das Problem, dass mein Homebutton (der einzige große Button an einem iPhone) sporadisch seinen Dienst verweigerte. Trotz fühlbarem Druckpunkt und hörbarem Klickgeräusch kam der Tastendruck nicht im Betriebssystem an.

Meine erste Handlung war also, mich auf den Supportseiten von Apple umzusehen. Da zu meinem Problem keine richtige Lösung auffindbar war, wurde mir angeboten, dass mich die Hotline jetzt anruft und mir weiter hilft. Gesagt getan und kurz darauf klingelte das Handy. Der nette Herr konnte mir natürlich nicht direkt weiterhelfen, veranlasste aber einen Termin im Applestore, den ich ein paar Tage später dann wahrnahm. Auch diesem jungen Herrn schilderte ich mein Problem und – wen wundert es – ich konnte das Problem natürlich nicht vorführen, da es an diesem Tag nicht auftrat. Was war seine Reaktion: “ok, wir tauschen das jetzt einfach aus, in einigen Fällen kann dieser Fehler auftreten”. 10 Minuten später hatte ich ein nagelneues iPhone 4 in der Hand. DAS ist Kundenservice – keine ewigen Diskussionen, keine 100 Formulare ausfüllen,…einfach machen.

Ich würde mir diesen Service natürlich in allen Lebensbereichen wünschen, aber beim Mobilfunkprovider wäre es schonmal ein guter Anfang.

Neben dem Kundenservice geht es natürlich auch einfach um Verständlichkeit – man muss sich nur mal die Internetseite eines großen Anbieters anschauen und diese dann mit der Apple-Website bzw. dem Apple Store vergleichen. Idiotensichere und simple Führung durch den kompletten Prozess ist leider bei vielen ein Fremdwort, und so muss man sich durch seitenweise Kleingedrucktes und hunderte Abhängigkeiten zwischen Handy und Vertrag kämpfen. Es ist einfach beschissen.

Grund 4: weil sie es können
Eine Sache sollte man überhaupt nicht außer Acht lassen: sie können es. Apple hat extrem viel Geld auf der hohen Kante – kurzzeitig waren sie sogar das weltweit wertvollste Unternehmen. Anders als unsere Provider könnte Apple als Netzbetreiber aber auch wunderbar mit einem neutralen Betriebsgewinn auskommen – sprich, wenn das Unternehmen kein Minus macht, dann hätten sie schon gewonnen. Alleine die Einnahmen durch den Appstore und die Hardwareverkäufe spülen riesige Summen in die Kasse. Ein weiterer Grund, warum ich denke, dass Apple wesentlich bessere Preise bieten könnte.

Fazit
Man könnte hier noch weitere Gründe auflisten, und ich habe bewusst auf die negativen Aspekte von Apple verzichtet. Hier sollte es gar nicht um die Vorteile/Nachteile und Fanboygehabe bei Dingen von Apple gehen, sondern einfach ein paar Gedanken, wie man sich den perfekten Provider vorstellen würde. Apple macht viele Dinge sehr sehr richtig, und viele Dinge auch sehr sehr falsch. Viele Firmen, aber eben auch Provider, würden sich und ihren Kunden einen riesen Gefallen tun, wenn sie diese guten Dinge beherzigen und die schlechten sein lassen.

Wenn wir die Preisproblematik endlich mal in den Griff bekommen könnten, dann würden auch viel mehr Leute auf den Zug der Smartphones und des mobilen Internets aufspringen. Ich bin der festen Überzeugung, dass in diesem Fall die höheren Kosten, die dem Netzbetreiber entstehen, durch die riesige Masse an Kunden wieder wett gemacht wird.

Aber nun seid ihr gefragt: was sagt ihr dazu? Wie stellt ihr euch den perfekten Provider vor? Was würdet ihr euch von ihm wünschen? Ich bitte an dieser Stelle von Apple-Bashing abzusehen, denn um dieses Thema geht es hier nicht.

[Quicktip] Callback-Funktionen mit Javascript

Neben der Möglichkeit, unter Javascript anonyme Funktionen direkt als Parameter zu übergeben, kommt man vielleicht auch mal an die Stelle, dass man einer Methode den Namen einer anderen Funktion übergeben möchte, die diese dann nach Fertigstellung ihrer Aufgabe ausführen soll. Da man nicht einfach wie z.B. bei php den Funktionsnamen dynamisch per Variable angeben kann, muss man einen kleinen Trick anwenden. Und der geht so:

if(typeof window[funcName] == 'function') window[funcName]();

In der Variable “funcName” steht der Name der Funktion drin, die ihr aufrufen wollt. Der if-Block davor dient nur der Sicherheit – die Funktion wird nur aufgerufen, wenn es sie auch gibt. In der Klammer bei ” window[funcName]()” könnt ihr natürlich wie gewohnt Parameter übergeben.

[Update]
Und hier noch eine weitere Möglichkeit, die mir persönlich besser gefällt und die auch zuverlässiger funktioniert:

function funktionEins(data, callback) {
    //...
    //do something with data...
    //...
    //run our callback
    if(callback != undefined && typeof callback == 'function') callback();
}

Optional kann man natürlich auch Daten/Variablen an die Callbackmethode übergeben:

callback(data);

Wir haben nun also eine Ausgangsfunktion. Rufen wir diese nun auf und übergeben eine existierende Funktion oder eine anonyme Funktion, so kann diese ausgeführt werden:

function funktionZwei() {
    //do something
}
funktionEins("test", funktionZwei);

oder eben

funktionEins("test2", function(data) {
    alert(data);
});

mit einer anonymen Funktion, die in diesem Beispiel eben auch einen Parameter anbietet.

via selfhtml.org

[Titanium Developer] JSON auf iPhone und Android parsen

Dieser Beitrag wird eine Reihe von (hoffentlich) vielen Titanium Developer Beiträgen einleiten, und das aus einem einfachen Grund: so toll das System auch ist, es braucht viele Kniffe, um die eigene App zum Laufen zu bekommen.

Für alle, die nicht wissen, was Titanium Developer ist: Einfach gesagt handelt es sich dabei um ein Framework+Runtime, mit welchem man mittels Javascript Handy-Apps programmieren kann, welche dann auf iPhone/iPod Touch/iPad und Android laufen. Dabei geht nicht allzuviel Performance verloren UND man erhält zum Schluss eine native App für das jeweilige Zielsystem. Weiter Infos unter appcelerator.com

Aber kommen wir zurück zum Thema. Normalerweise parsed man Json Daten unter Titanium mittels

var jsonVar = JSON.parse(daten);

und erhält dann das Datenobjekt zurück. Leider funktioniert dies nur unter den iOS Geräten, nicht aber unter Android. Also wandelt man seinen Befehl folgendermaßen um:

var jsonVar = eval('(' + daten + ')');

Natürlich ist eval immer mit Vorsicht zu genießen, da hier sämtliche Befehle ohne nachzufragen ausgeführt werden. Sichert also bitte vorher in irgendeiner Form ab, dass die erhaltenen Daten keinen Schadcode enthalten. Da ihr aber in den meisten Fällen sowieso mit einer von euch bereitgestellten API auf eurem Server kommunizieren werdet, sollte dies nicht ein allzu großes Problem sein.