Twitter-basierter Jahresrückblick auf 2011


Das Jahr 2011 ist vorbei. Hier im Blog war eher weniger los (ganze 8 Posts…), bei Twitter aber umso mehr. 18228 Tweets habe ich 2011 insgesamt verfasst. Darunter waren etwa 13000 Mentions, also Antworten an andere Twitterer.

Ich habe mir einfach "mal eben" (es dauerte nur etwa 5 Stunden oder so…) alle 5851 Tweets durchgelesen, die keine Mentions waren, und die (für mich) bemerkenswerten hier zusammengeschrieben. Viel Spaß damit.

01.01.2011 00:41: Erster Tweet:

Ich wünsche euch allen ein glückliches und frohes neues Jahr 2011! http://twitpic.com/3lrmpq

03.01.2011 16:50: Spielesucht:

Na toll. Jetzt geht's los: Ich mache mir Sorgen, dass nicht genug Fackeln an der Bahnstrecke nach Iserlohn stehen. :-/ #minecraft

05.01.2011 09:49: Coolster Job:

Jobbeschreibung: "Filmvorführer bei einer Kunstausstellung im Dortmunder U". Das klingt doch echt cool, oder?

12.01.2011 21:37: Motiviertester Weihnachtsbaum:

Fotos von heute morgen, Teil 3/3: Toll, ein Weihnachtsbaum am Hbf. Die Spitze könnte jedoch motivierter sein… http://twitpic.com/3pg63y

13.01.2011 12:37: Zehntausendster Tweet:

Yay: Dies ist mein 10000. Tweet. Und ich meine 10000 im Dezimalsystem. Für die Informatiker auch bekannt als 0x2760.

27.01.2011 20:57: Coolster Moment für mich als Vorführer:

Ihr erinnert euch noch an den "ich will mal nen Film im Überblendbetrieb zeigen"? Heute. Gerade. Etwa vor 10 Minuten. :-)

29.01.2011 17:36: Großeltern-Spruch:

Zusammen mit den Großeltern Fotos vom #schifoarn betrachtet. Oma: "Bist du das da rechts? Das Mädchen?"

04.02.2011 17:06: Unkooperativster Projektor:

Auf dem folgenden Foto sind 70 Minuten Arbeit versteckt: http://flic.kr/p/9fBDry

18.02.2011 13:09: Fail des (mindestens) Monats:

Habe vorhin in der Mensa einem blinden Mädel den Blindenstock geklaut. Versehentlich. >_<

19.02.2011 13:26: Verwirrteste Verkäuferin:

"Wo haben Sie den Parmesankäse?" - "Kommen Sie mit… Hier steht… Äh… Hier stand der mal… Ich… Äh… Ich geh mal fragen." #Pwnd

04.03.2011 18:22: Ungeklärteste Frage:

Followerpower: Gesucht ist ein Film, in dem James Cagney Unmengen Zucker in seinen Kaffee schaufelt…

20.03.2011 20:16: Komischte SMS:

Kollege schrieb mir eine SMS: Ich wäre seine Traumfrau und er liebte mich für immer. Zum Glück kam direkt danach ein "Hupps, falsche Nummer"

11.04.2011 12:00: Falscheste Spam-Mail:

Spam-Mail: "Stop your manhood's hibernating". Das ist kein Hibernate, sondern Stand-By!

23.04.2011 16:14: Blödester Filmtitel:

Ah ja. In dem Film "Jackie Chan Kung Fu Master" spielt Jackie Chan etwa 5 Minuten lang mit. m(

04.06.2011 12:19: Blödestes Tier:

Irgendeine pock Hummel versucht pock gerade sehr pock permanent pock durchs Fenster pock hindurchzupockfliegen…

07.06.2011 10:55: Coolstes Kino:

Whoa. Ich will dieses Kino besuchen. Die Aktion ist ja mal krass. :D http://cf.drafthouse.com/she_texted_we_kicked_her_out2.html

10.06.2011 21:29: Bester Film:

Und ich sah gerade "Life in a Day". Sehr, sehr, sehr, sehr (stellt euch das bitte tweetfüllend vor) beeindruckend!

14.06.2011 11:30: Schlechtester Film:

Zu "Tree of Life": Konfus ohne Ende. Jemand ist gestorben, Familie ist traurig. Dann Weltall, Oberlisken, Dinosaurieren. Und Sean Penn.

19.06.2011 14:11: Frühestes Abendessen:

Großmutter kündigte das Abendessen (!) für in 20 Minuten an… -_-

24.06.2011 22:29: Mein blödester Fail:

Meeeeeh. Stehe in der Wallachei, vermutlich mit ohne Kraftstoff im Auto. -.-

05.07.2011 14:30: Modernster Internet-"Dienstleister":

ITMC schickt uns Ausdrucke von ihrer Webseite, auf der "wichtige" Sachen mit per Schreibmaschine danebengedruckten "!!!!" markiert sind. m(

17.07.2011 15:57: Coolster Empfang:

Aber immerhin wurde ich von @TheConstructor auf sehr proe Art und Weise empfangen. http://flic.kr/p/a4qwGi

26.07.2011 19:17: Komischtes Geschenk:

Öhmkay… Arbeitskollege kommt vorbei und schenkt mir einfach mal so einen Kanister voller Benzin. cO

28.07.2011 23:42: Blödeste Antwort:

Heute in der Stadt: Bettler und @el_emka: "Tschuldigung, haste mal nen Euro?" - "Nein, danke."

29.07.2011 17:53: Praktischtes Ordnungssystem:

Meine Kabelkiste + Klopapierrollen = #Ordnung. Yaaaaay. http://flic.kr/p/a86bG6

30.07.2011 22:24: Erfolg des Jahres:

Fabian und der Xenonkolben, Teil 3. -.- http://www.youtube.com/watch?v=YxGsQTWBK_E

31.07.2011 23:25: Zwanzigtausendster Tweet:

Dies ist mein Tweet Nummer 20.000. Inkl. diesem habe ich damit Texte im Umfang von 1.625.058 Zeichen geschrieben. Irgendwie wenig…

08.08.2011 21:28: Beste Aktion des Jahres:

Alle Fotos des heutigen #ju52-Fluges findet ihr hier: http://flic.kr/s/aHsjvN1gvj

11.08.2011 17:30: Kraseste Kinoguckaktion:

Das war die Filmmesse in diesem Jahr. 3 Tage, 8 Filme. "Drei Musketiere" war IMHO am Besten. Jetzt dann auf zur #Sneak nach Dortmund.

05.09.2011 23:47: Beste Kleidungs-Sofa-Kombination:

Irgendwie habe ich heute versehentlich (!!!) "Eine Insel namens Udo" ( => http://t.co/QhRTudO ) nachgemacht… http://t.co/CprEdKY

23.09.2011 09:58: Komischter Hund:

Der junge Nachbarshund irritierte mich: Ich öffnete meinen Kofferraum, holte was zum Reinstellen, komme zurück, Hund sitzt im Kofferraum. oO

05.10.2011 00:01: Versprecher:

Ach ja, mein Nervositätsbedingter Giganto-Fail von heut- äh gestern: "Wir sind die drei, die die O-Phase für euch ignoriert haben." m(

07.10.2011 22:58: Anstrengste Aktion: Organisation der O-Phase mit @rene_dev und @ostfriesenborg

Achievement unlocked: #tudocsop überstanden. Als Orga. Zwei Mal.

08.11.2011 12:42: Bestes Konzert:

Und nochmal Party mit LaBrassBanda gestern im FZW: http://t.co/UDSw5MdA

04.12.2011 22:13: Beste Werbebeilage:

Ich glaube, vorhin lief youtube nicht so richtig, also hier nochmal: Super-Coole Schallplattenspielerwerbung von Mini: http://t.co/W3yXREbx

05.12.2011 09:30: Einziger Schnee im Winter 2011/2012 im Jahr 2011:

Un-Be-Fucking-Lievable: #Dings! http://t.co/YeC9zukk

14.12.2011 13:32: Blödeste Google-Suchanfrage:

Die gefühlt blödeste Google-Suche, die ih je durchgeführt habe - die aber dennoch erfolgreich war: "grub grub grub grub".

14.12.2011 18:15: Bester Support:

Pro. "Welche Chipsatzlüftermodelle sind zu meinem Mainboard kompatibel?" Antwort ASUS: "Nennen Sie Adresse, wir schicken Ihnen einen."

15.12.2011 22:33: Promis des Jahres:

Jetzt kann ich beruhigt sterben. #totoundharry http://t.co/OfMNDnEe

24.12.2011 23:23: Schlechteste Nachricht (ging dann am Ende aber doch noch relativ glimpflich aus):

Was man an Heiligabend nicht von seinem Bruder am Telefon hören will: "Papi liegt auf der Intensivstation." -____________-

31.12.2011 14:49: Letzter Tweet:

Nächstes PSP dann zur Abwechslung mal bei Subway? Oder Pizza Hut?

Weiterlesen


H-Bahn-Fahren für Anfänger


Das neue Semester hat angefangen. Und dazu gehören natürlich viele, viele noch unerfahrene Erstis. Auch in der H-Bahn.

Als speziellen Service habe ich hier mal ein paar nützliche Tipps. Sozusagen Tipps vom alten Hasen.

  • Schnell ein- und aussteigen: Die H-Bahn fährt in einem festen Zeitplan, welcher gerade zu den Stoßzeiten ziemlich kurze Ent- und Beladungspausen beinhaltet. Macht es nicht noch schlimmer, indem ihr mega-lässig ein- bzw. aussteigt.
  • Erst alle Leute aussteigen lassen: Anscheinend bin ich einer von wenigen Leuten, der gelernt oder kapiert hat, dass es nur sinnvoll ist, erst alle Fahrgäste aussteigen zu lassen, bevor man selber einsteigt. So schwer kann das doch nicht sein, oder? Zudem: Bildet, wenn ihr draußen steht, eine ausreichend breite Gasse. Wenn ihr euch da so hinquetscht, dass da immer nur ein Student einzeln durchpasst, dauert der Fahrgastwechsel noch länger.
  • Lasst die Knöpfe in Ruhe: Ja, die H-Bahn hat "Tür öffnen"-Knöpfe. Aber die funktionieren generell nur, wenn sie leuchten. Und das ist im normalen Betrieb doch recht selten. Also lasst das wilde Herumgedrücke auf den Knöpfen. Es bringt euch eh nichts.
  • Taschen ab: Es ist unglaublich, wie viele Studenten man in eine H-Bahn hineinpacken kann, wenn alle mitspielen. Wichtigster Punkt: Nehmt eure Rucksäcke ab und stellt sie zwischen eure Beine auf den Boden. Ein Rucksack auf dem Rücken verbraucht in einer vollen H-Bahn fast genausoviel Platz wie ein Student…
  • Man muss auch mal verlieren können: Wenn die H-Bahn schon gerammelt voll ist und du nicht mehr reinpasst: Sieh ein, dass zu verloren hast, und geh von den Türen weg. Da blöd rumzustehen und die Türen aufzuhalten, ohne damit irgendwas zu erreichen, ist nicht sehr produktiv.
  • Festhalten: Die H-Bahn kann, wenn sie will, verdammt schnell anhalten. Und wenn die H-Bahn auch noch so voll ist: Nach so einer Bremsung ist noch Platz für mindestens drei weitere Studis. Und wenn sich dann kaum jemand festgehalten hat, freut sich ganz besonders die arme Sau, die im Wagen ganz vorne stand und von gefühlt 5 Tonnen studentischer Masse gegen die Wand gequetscht wurde.
  • Türen aufhalten: Ja, natürlich sehe ich ein, dass es nett und sozial ist, jemandem, der zu spät kommt, die Türen der H-Bahn aufzuhalten. Allerdings sollte man es hier nicht übertreiben. Ich habe schonmal mehrere Minuten lang in einer H-Bahn herumstehen dürfen, weil jemand einfach nicht aufhörte, immer noch für jemanden die Türen aufzuhalten. Dadurch provoziert man nämlich einen Sonderfall der H-Bahn-Steuerung: Da zwei Linien sich die Strecke zwischen Campus Nord und Süd teilen müssen, bedeutet eine aufgehaltene H-Bahn, dass auch die H-Bahn auf der anderen Linie warten muss. Eine gewisse Zeit lang geht das gut. Irgendwann jedoch entscheidet die Steuerungssoftware, dass auf die blockierte H-Bahn jetzt nicht mehr gewartet wird, und lässt diese einen Takt lang aussetzen. Im Klartext: Die volle H-Bahn, deren Türen konsequent aufgehalten wurden, macht erstmal Pause. Man erkennt diesen Zustand daran, dass die H-Bahn dann auch mit geschlossenen Türen nicht losfährt, draußen das bekannte "Neuer Zug wird auf Anzeigetafel angezeigt"-DingDangDong ertönt und (Achtung!) die "Tür öffnen"-Knöpfe aufleuchten. Während der nun folgenden 5 Minuten hängt die H-Bahn mit geschlossenen Türen an der Station herum - und ein Druck auf einen der Knöpfe außen oder innen öffnet die dazugehörige Tür. Natürlich ist dieser Zustand eher unerwünscht: In der H-Bahn stehen haufenweise genervte Studis - und am anderen Campus stehen ebenfalls genervte Studis, die auch weitere fünf Minuten auf ihre H-Bahn warten müssen. Wollt ihr dafür verantwortlich sein? Nein? Dann seht zu, dass sich die Tür irgendwann schließen und die H-Bahn losfahren kann.
  • Manual Override: Diese Lektion lernte ich gleich an meinem ersten Tag an der Uni: Ist die Türsteuerung kaputt und die Tür geht immer auf und wieder zu, helft einfach mal beherzt nach und schiebt die Türen mit zu. Dann rasten die in der Regel ein und es kann losgehen.
  • Steht nicht im Weg rum: Ist ja toll, dass ihr mit eurem gigantomanischen Rollkoffer H-Bahn fahrt. Allerdings macht ihr etwas falsch, wenn ihr als erste die H-Bahn entert und euren Koffer erstmal mittem im Türenbereich stehen lasst.
  • Haltet die Türen auf: Wenn ihr einsteigt, während die H-Bahn schon piept, und hinter euch stehen noch mehr Studenten: Haltet die Türen fest. Ich habe schon so oft erlebt, dass bei gerammelt voller H-Bahn-Station der erste Student mal eben durch die schließenden Türen durchflutscht, ohne sie groß zu berühren - und wenn dann die Türen zu sind, dann bleiben sie auch zu.

Wenn alle etwas mitdenken, wird die Benutzung der H-Bahn gleich viel erfreulicher und man fühlt sich nicht so von der Ignoranz anderer genervt. Danke für's Lesen und Beherzigen.

UPDATE: Ich habe mir vorhin mal noch eben eine H-Bahn-Fahrt zur Rush-Hour angetan und habe dabei gleich noch ein paar Punkte für diese Auflistung gefunden… ;-)

Weiterlesen


Was ist das denn für Support???


Der Server, auf dem u.a. auch dieses Blog gehostet wird, steht bei Hetzner. Ich habe mir da zusammen mit ein paar Kommilitonen einen eigenen Root-Server angemietet, auf dem wir tun und machen können, was wir wollen.

Dass Hetzner da dann nicht unbedingt hochqualitative Server-Hardware verbaut, ist klar - und ja auch nicht soo wichtig. Wir haben da ja keine Anwendungen laufen, die möglichst nah an die 100% Verfügbarkeit rankommen müssen. Zudem sind da zwei Festplatten drin, sodass man die einfach per RAID1 spiegeln kann und dann auch nicht sofort Datenverlust hat, wenn mal eine Platte ausfällt. Und es gibt noch einen externen Backup-Server.

Jetzt war es dann wieder soweit: Eine der Festplatten hat sich verabschiedet und das RAID hat pflichtgemäß per Mail um Hilfe gerufen. Ich habe gestern Abend über das Webinterface von Hetzner einen Festplattentausch anberaumt und als Wunschtermin heute um 13:00 Uhr angegeben. Ich bekam eine Antwortmail, die folgendes enthielt:

[…] wie gewünscht werden wir am 22.06.2011 um 13Uhr die Festplatte austauschen. […] Nach dem Austausch werden Sie von uns Informiert.

Damit war für mich dann klar: Server um 12:55 herunterfahren und warten, bis die Fertigstellungsmail kommt.

Heute kam dann um 12:34 eine Mail mit folgendem Inhalt:

bitte teilen Sie uns mit, wann wir die defekte Festplatte tauschen könne. Für den Tausch müsste der Server für ca. 15min offline genommen werden.

Ich war zugegebenermaßen leicht überrascht, weil der Termin in meinen Augen ja schon vereinbart war (und auch von Hetzner bestätigt wurde). Meine Antwort um 12:41 Uhr:

Ich hatte jetzt 13 Uhr angepeilt und wollte den Server um 12:55 herunterfahren. Geht das bei Ihnen in Ordnung?

Es verging immer mehr Zeit, bis es dann 12:55 Uhr war und ich noch keine Antwort hatte. Mir boten sich jetzt zwei Möglichkeiten:

  • Auf eine Mail warten. Nachteil: Es könnte sein, dass dann ein Hetzner-Mitarbeiter um 13:00 zum Server geht und ihn einfach mal hart "herunterfährt" (a.k.a. Stecker ziehen), um die Festplatte zu wechseln.
  • Den Server herunterfahren und darauf hoffen, dass die Platte schnell gewechselt wird.

Um keinen Schaden am Dateisystem zu riskieren, habe ich mich dann für ein Herunterfahren des Servers entschieden - und wartete dann gespannt auf entweder eine Antwort des nach dem Hardwareeingriff wiedererweckten Servers auf meine Pings oder aber eine Mail. Die dann um 13:25 Uhr kam:

das war leider zu kurzfristig. Wie wäre es mit 14 Uhr?

Was. Zum. Geier? Das kann doch nicht deren Ernst sein. Bis zu dieser Mail war der Server schon 30 Minuten lang nicht erreichbar. Aaaarg. Meine Antwort:

Ich dachte, ich hätte gestern Abend schon einen Termin für 13 Uhr festgemacht. -.-

Der Server ist bereits aus. Sie können also gerne direkt mit dem Wechsel beginnen - oder aber Sie schalten den Server wieder ein, damit er wenigstens noch ne halbe Stunde erreichbar ist. Dann würde ich ihn um 1355 wieder herunterfahren.

Diesen Beitrag schreibe ich lokal. Es ist 13:52 Uhr, auf obige Mail habe ich noch keine Antwort bekommen, der Server ist immernoch nicht wieder erreichbar. Ich bin, gelinde gesagt, nicht wirklich begeistert von diesem Rechenzentrumssupport.

Okay, in dem Moment, als ich diesen Post speicherte, kam dann die Mail, dass der Tausch abgeschlossen und der Server wieder gebootet sei. Allerdings konnte ich ihn nicht anpingen - und auch wenn ich das Rescue-System von Hetzner booten lassen wollte, konnte ich die IP nicht erreichen. Das ist eine Konstellation, in der ich absolut nichts selber machen kann, sondern voll und ganz auf den Rechenzentrums-Support angewiesen war. Blöderweise waren deren Reaktionszeiten auch weiterhin recht niedrig: Es vergingen gerne mal 2 Stunden, bis ich eine Antwort auf meine Mails bekam. Und ein Anruf im Rechenzentrum war auch nicht wirklich hilfreich, da dort dann nur eine Durchsage a la "So viel zu tun, bitte schicken Sie eine Mail" kam.

Insgesamt dauerte es dann noch bis etwa 20 Uhr, bis der Server wieder ordentlich erreichbar war. Probleme waren zwischendurch, dass laut Support im BIOS eine Einstellung falsch gesetzt war, sodass der Server beim Booten keine IP beziehen konnte und dann auch noch ein defekter CPU-Lüfter.

Inzwischen läuft der Server seit über 12 Stunden wieder und ich bin happy. Dennoch verbleibt ob des RZ-Supports von Hetzner ein sehr schaler Geschmack. Ich denke, dass trotz der Probleme die Downtime bei schnellem Support deutlich (!) geringer gewesen wäre. Wobei ich mir natürlich bewusst bin, dass da evtl. gerade ein großer Ansturm auf den Support stattfand und einfach nicht genug Zeit war.

Dann bleibt aber immernoch die "wann sollen wir denn jetzt die Platte"-Mail vom Anfang der ganzen Aktion. Das geht in meinen Augen mal so gar nicht!

Weiterlesen


Life in a day


Ich war heute im Kino. Okay, das ist jetzt derzeit bei mir nix besonderes. Immerhin arbeite ich da ja auch. Also ergänze ich das mal: Ich war heute im Kino und habe mir einen Film angesehen. Film meiner Wahl war "Life in a day" (Trailer).

Falls ihr noch nichts von dem Film gehört habt, hier eine kurze Zusammenfassung: Youtube rief alle User dazu auf, am 24.7.2010 einen Tag in ihrem Leben zu filmen. Dabei kamen 4500 Stunden Film von 80000 Einsendern aus 140 Ländern zusammen. Aus diesen Unmengen an Filmmaterial ist dann ein Film entstanden, der in knapp 95 Minuten einen Ausschnitt aus einem Tag auf unserem Planeten zeigt. Das ist "Life in a day".

Ich hatte mich sehr auf diesen Film gefreut. Gestern war Bundesstart in Deutschland und passenderweise läuft der Film auch in "meinem" sweetSixteen in Dortmund. Also habe ich den film heute dann nicht nur vorgeführt, sondern mich auch gleich mal reingesetzt.

Und muss sagen: Wahnsinn.

Der Film zeigt haufenweise Leute bei mehr oder weniger normalen Tätigkeiten. Ein 15-jähriger Teenager, der sich zusammen mit seinem Vater das erste Mal rasiert. Ein Mann macht seiner Freundin einen Heiratsantrag. Ein Mann filmt den Kaiserschnitt seiner Frau und wird dabei ohnmächtig (danach übernimmt eine Krankenschwester die Kamera und filmt den bewusstlosen Vater). Eine Giraffe wird geboren. Ein Mann bedankt sich nach einer Herz-OP bei den Krankenhausmitarbeitern. Eine Frau berichtet, dass ihr Tag absolut nichts Filmenswertes ergab. Ein Jugendlicher teilt seiner Oma mit, dass er schwul ist und diskutiert anschließend mit ihr über die korrekte Verwendung von "schwul" und "homosexuell".

Dazu kommen dann noch ein paar Szenen, die einen eher ans Grübeln bringen. Eine Frau fragt sich, ob sie wohl genug Nahrung für ihren Sohn auftreiben kann. Ein Mann berichtet, dass er seinen geistig zurückgebliebenen Sohn immer anbindet, damit der nicht wegläuft. Ein Junge zeigt seine Arbeit als Schuhputzer, um für seine Familie etwas Geld zusteuern zu können. Und dann war an dem Tag ja auch die Loveparade in Duisburg…

Mein Fazit: "Life in a day" ist ein unglaublich packender Film, einfach, weil er so echt ist. Da sind keine Schauspieler, sondern ganz normale Menschen an einem ganz normalen Tag. Und es ist echt wahnsinn, was alles an einem Tag passiert…

Schaut euch den Film an, solange ihr dies noch im Kino tun könnt. Auf nem kleinen Bildschirm ist das einfach nicht das Gleiche. In Dortmund läuft der Film noch bis übernächsten Mittwoch täglich im sweetSixteen. In anderen Städten… bestimmt auch. Nutzt Google und so. Wahrscheinlich läuft er eher in einem kleinen Kino statt in den großen Multiplexen. Gebt denen auch mal eine Chance!

Weiterlesen


Umzug von Wordpress zu Jekyll


Nachdem ich jetzt schon das eine oder andere Mal gefragt wurde, wie ich denn die Inhalte meiner alten Blogs zu Jekyll migriert habe, gibt es hier dann also ein kleines Howto. In diesem Fall dann erstmal für den Wordpress-Teil der Migration.

Für die eigentliche Datenkonvertierung habe ich bei github ein gist mit einem passenden Wordpress-Importer gefunden und gleich mal ein kleines bisschen angepasst. Die von mir verwendete Version des Skripts gibt's bei github.

Man kann sie wie folgt aufrufen:

ruby -r 'wordpress' -e 'Jekyll::WordPress.process(
  "<DB_NAME>", "<DB_USER>", "<DB_PASS>");'

Statt <DB_NAME> setzt ihr natürlich den Namen der MySQL-DB ein und als <DB_USER> und <DB_PASS> passende Zugangsdaten. Das Skript geht stillschweigend davon aus, dass der MySQL-Server auf localhost läuft. Ansonsten sollte es für euch nicht schwer sein, das Skript anzupassen.

Das Skript erstellt dann automatisch einen Ordner _posts, in dem für jeden Blogeintrag des Wordpress-Blogs eine Post-Datei für Jekyll liegt.

Im Prinzip kann man die Dateien dann einfach in den _posts-Ordner von Jekyll werfen und ist schon fertig damit - bei mir war das allerdings nicht ganz so einfach. In den Wordpress-Posts waren die Links zu Bildern mit absoluten Pfaden angegeben. Im Standard-Wordpress-Verzeichnis-Layout. Also z.B. "http://blog.fabianonline.de/wp-content/uploads/test.jpg". Das war für mich aus zwei Gründen nicht ganz so toll:

  • Dieses "wp-content" schaut nicht wirklich toll aus. Ich will es lieber loswerden, statt weiter mit herumschleppen.
  • Absolute Pfade müssen doch auch nicht sein. Lieber relativ.

Das Problem, in vielen Dateien nach bestimmten Strings zu suchen und selbige durch was anderes zu ersetzen, kann man mit Ruby recht einfach lösen. Ich verwendete einfach folgenden Befehl:

ruby -pi.bak -e "gsub(/http:\/\/blog.fabianonline.de\/wp-content\/uploads\//,
  '/uploads/images/')" _posts/*.markdown

Dieser Befehl geht alle passenden Dateien (_posts/\*.markdown) durch, sucht und ersetzt dort "http://blog.fabianonline.de/wp-content/uploads/" durch "/uploads/images/" und erzeugt, wenn eine Datei geändert wurde, eine passende Backup-Datei mit .bak als Endung. Das kann man ganz wunderbar nutzen, um stichprobenartig Dateien a la "Vorher / Nachher" zu vergleichen und zu schauen, ob auch alles geklappt hat. Ich musste bei mir das gleiche nochmal für /wp-content/main machen, weil ich das PhotoQ-Plugin für Wordpress nutzte, welches dort die Bilder speicherte. Danach dann halt mal eben rm \*.bak und schon ist der ordner wieder wunderschön aufgeräumt.

Nachdem nun die Links in den markdown-Files angepasst waren, reichte ein einfaches cp wordpress_blog/wp-content/uploads/* jekyll_blog/uploads/images, um die ganzen Dateien in den Root des Jekyll-Ordners zu kopieren. Nach einem Durchlauf von Jekyll sollten dann jetzt die "neuen" "alten" Posts im Ergebnis auftauchen und auch die Bilder-Links funktionieren.

Eine letzte Sache blieb dann noch: Ich wollte möglichst viele Links des alten Blogs auch im neuen Blog verfügbar haben. Ich habe mir noch ein kleines Skript geschrieben, welches die sitemap.xml (für die hatte ich ein extra-Plugin installiert) vom alten Blog abrief (der Einfachkeit halber via HTTP) und prüfte, welche der Links im Ergebnis von Jekyll nicht mehr funktionieren würden. Das sah bei mir allerdings sehr gut aus, bis auf ein oder zwei Ausnahmen blieben alle Links funktionsfähig. Was natürlich vor Allem daran lag, dass die Permalink-Struktur im Wordpress-Blog der "pretty"-Permalink-Einstellung von Jekyll ziemlich sehr ähnlich war.

Allerletzter Schritt: Weiterleitungen einrichten. Folgende Zeilen kamen bei mir in die .htaccess:

RewriteEngine On

RewriteRule ^wp-content/uploads/(.)$ /uploads/images/$1 [R=permanent] RewriteRule ^wp-content/main/(.)$ /uploads/images/$1 [R=permanent]

RewriteRule ^feed/(.*)$ /atom.xml [R=permanent]

Zwei Regeln, um Anfragen an die alten Bild-URLs zu den neuen URLs zu leiten, und eine, um sämtliche Anfragen zu den RSS-Feeds auf die neue atom.xml umzuleiten.

Und fertig. So läuft das bei mir. Und als nächstes kommt dann der Umzug meiner Posts von Serendipity zu Jekyll dran. Schonmal als "Vorwarnung": Es beinhaltet über 1200 Zeilen in der .htacces…

Weiterlesen


Ade, Wordpress. Hallo, Jekyll.


Ich habe es endlich getan. In diesem Blog war ja schon länger nicht mehr wirklich viel los; allerdings hatte ich doch schon noch vor, hier mal wieder etwas mehr Aktivität zu zeigen.

Eine Sache gab es dabei jedoch, die auf mich irgendwie "abstoßend" wirkte: Wordpress. Ich meine, Wordpress ist eine coole Blog-Software. Allerdings benötigt sie natürlich recht viel Leistung (PHP-Skripte, MySQL-Server) und stellt natürlich auch ein gewisses Risiko für den Server da. Denkt man mal nicht daran, ein Update einzuspielen, hat man u.U. auf einmal irgendwelche Hacker auf dem Server…

Also musste eine neue Software her. Und die heißt "Jekyll". Jekyll erstellt aus Posts, die ich als einzelne Dateien angelegt habe, statische HTML-Dateien. Die dann zum Einen von jedem noch-so-alten Webserver ausgeliefert werden können und zum Anderen defintiv keine Sicherheitsrisiken für den Server darstellen.

Okay, dynamische Sachen wie zum Beispiel Kommentare fallen damit natürlich raus, aber einerseits könnte ich die über einen externen Dienst (Stichwort "Disqus") nachrüsten - und andererseits, seien wir doch mal ehrlich, sind Kommentare in Blogs abseits der wirklich großen Blogs eh tot. Zudem hatte ich in letzter Zeit eh eine gewisse Paranoia bei neuen Kommentaren entwickelt, weil ich überall Leute witterte, die nur scharf darauf waren, einen Link zu ihrer Seite irgendo unterzubringen…

Um das Ganze richtig cool zu machen, liegen die gesamten Quell-Dateien für dieses Blog bei github, sind also völlig frei einsehbar und können euch vielleicht als Vorlage oder "Nachschlagewerk" dienen, wenn ihr selber mal mit Jekyll spielen wollt.

Übrigens: Sämtliche Posts sowohl aus meinem alten Wordpress-Blog als auch aus meinem "alten alten" Serendipity-Blog konnte ich recht problemlos zu Jekyll-Posts umwandeln, wodurch endlich alle meine geistigen Ergüsse in einem Blog versammelt sind (früher gab es blog.fabianonline.de und fabianonlinede/blog - zwei verschiedene Blog mit verschiedenen Inhalten). Dazu kam dann noch eine .htaccess, die möglich viele der alten URLs auf die neuen URLs umbiegt, und fertig. Zum Import-Prozess und der .htaccess werde ich dann aber in einem seperaten Post mal noch etwas ausführlicher etwas schreiben.

Weiterlesen


Größere Thumbnails in den flickr Stats


Wer von euch flickr nutzt und da auch gleich die paar Dollar für einen Premium-Account ausgegeben hat, wird sich vielleicht auch schon über die Statistiken, die man dann abrufen darf, gefreut haben. Mir war dabei jedoch immer eine Sache ein Dorn im Auge: Schaut euch doch mal die Thumbnails vor den Einträgen an. Wer will da denn irgendwas erkennen können?

Aber für soetwas gibt es doch Greasemonkey für Firefox. Ich habe mir da mal ein kleines Skript für geschrieben, welches den bezeichnenden Namen "Bigger Images in flickr Stats" trägt. Das Ergebnis dieses kleinen Skriptchens: Die Liste schaut bei mir jetzt so aus:

Wer Interesse an dem Skript hat, kann es sich hier herunterladen und installieren.

Weiterlesen


Photos in DigiKam organisieren


Dieser Post ist jetzt mal mehr für mich gedacht, so als Gedankenstütze, aber vielleicht ist er für euch ja auch recht nützlich oder informativ…

Wie organisiere ich meine ganzen Fotos sinnvoll in DigiKam? Als Hintergrund: Ich habe etwa 24000 Fotos auf meiner Festplatte. Die sind allerdings zum Einen ziemlich unsortiert (es gibt Ordner nach Events, das wars aber auch schon) und überhaupt nicht selektiert: Jedes Foto, welches ich jemals geschossen habe, ist in diesen Ordnern enthalten. Jedes.

Mein zukünftiges Ziel: Fotos selektieren (alle Fotos, die nichts geworden sind, löschen), bewerten, datumsmäßig sortieren, mit ordentlichen Tags (IPTC) versehen, inkl. vorhandenen Personen (digiKam kann leider noch keine Gesichtserkennung, also von Hand…), Geotags einpflegen (auch von Hand, so gut es im Nachhinein halt noch geht), und dann bei flickr sammeln.

Das wird natürlich ein paar Minuten dauern… aber immer mal wieder ein paar Fotos sichten sollte schon drin sein. Und damit ich nicht vergesse, was ich am sinnvollsten in welcher Reihenfolge mache, schreibe ich mir das hier auf. ;-)

  1. Sterne vergeben. 5 für Super-Fotos, 1 für schlechte (aber dennoch brauchbare) Fotos. Keinen Stern für Fotos, die gelöscht werden können.
  2. In der Liste alle Fotos mit ohne Sternen löschen.
  3. Tags vergeben: Ort (grob), Ereignisse (wenn angebracht), Personen (wenn bekannt und angebracht), Fototyp
  4. Geokodierung: Bild, Geolokalisierung, Koordinaten bearbeiten.
  5. Bilder zu flickr hochladen. "Photosatz" erzeugen, Anzeigerechte für die einzelnen Bilder überprüfen.

Weiterlesen


"Schnell mal eben" auf die Twitter-API zugreifen


Seitdem Twitter von Basic Auth auf OAuth umgestellt hat, ist der Zugriff auf die Twitter-API nicht mehr ganz so einfach möglich. Allzu kompliziert ist es aber dann auch nicht… Für dieses Mini-Tutorial gehe ich mal davon aus, dass ihr einen kleinen Bot schreiben wollt, der z.B. regelmäßig Tweets absendet. Sprache der Wahl ist hier PHP, das sollte auf den meisten Servern und so eh schon verfügbar sein.

  1. Besucht http://dev.twitter.com/apps/new und loggt euch dort mit dem Account ein, unter dem dann auch auf die API zugegriffen werden soll.
  2. Im folgenden Formular gebt ihr die gewünschten Daten ein:
    • Einen Namen für die App. Kann eigentlich alles sein. Wenn der Bot tweetet, steht bei den Tweets "via $appname". Darf u.a. nicht "twitter" enthalten.
    • Eine kleine Beschreibung der App.
    • Einen Link zu der App. Kann ansonsten auch zu eurer Homepage oder eurem Twitterprofil führen.
    • Als Organisation tragt euren Twitter-Login ein.
    • Application-Type ist "Browser".
    • Eine "Callback-URL" braucht ihr hier eigentlich nicht, allerdings will Twitter eine, also tragt hier einfach die Adresse eures Blogs ein oder so.
    • "Default Access Type" sollte "Read & Write" sein, außer, euer Bot soll ausschließlich Tweets lesen und selber nix versenden.
    • Dann noch den Captcha-Code eingeben und fertig.
  3. Ihr kommt dann auf die Übersichtsseite zu eurer neuen App. Von hier braucht ihr die Werte "Consumer key" und "Consumer secret". Kopiert euch die Werte irgendwo hin, und haltet sie nach Möglichkeit geheim.
  4. Klickt am rechten Rand auf "My Access Token".
  5. Kopiert euch von hier den "Access Token" und "Access Token Secret". Auch diese Werte solltet ihr geheimhalten.
  6. Jetzt geht's ans Code Schreiben. In diesem Tutorial schreiben wir eine kleine App, die einen "Hallo Welt"-Tweet absendet.Erstellt eine weitere PHP-Datei im gleichen Ordner.
  7. Ihr braucht zwei PHP-Libraries: OAuth.php und twitteroauth.php. Ladet beide Dateien herunter und speichert sie in einem Ordner.
  8. Dazu kommt dann noch ein bisschen Code von euch:
    <?php
    require_once('twitteroauth.php');
    define('OAUTH_CONSUMER_KEY', 'abc123');
    define('OAUTH_CONSUMER_SECRET', 'def456');
    define('OAUTH_ACCESS_TOKEN', 'ghi789');
    define('OAUTH_ACCESS_TOKEN_SECRET', 'jkl012');
    $conn = new TwitterOAuth(OAUTH_CONSUMER_KEY, OAUTH_CONSUMER_SECRET, OAUTH_ACCESS_TOKEN, OAUTH_ACCESS_TOKEN_SECRET);
    $conn->post('statuses/update', array('status'=>'Hallo, Welt!'));
    Bei den vier define-Anweisungen ersetzt ihr die vier Demo-Werte durch die Werte, die ihr von Twitter bekommen habt.
  9. Was der Code macht:
    • In Zeile 2 wird die Library, die ihr runtergeladen habt, eingebunden.
    • In Zeile 7 wird ein OAuth-Objekt mit euren Keys initialisiert.
    • In Zeile 8 wird dann ein POST-Request an den Twitter-API-Endpunkt "statuses/update" gesendet, mit dem Parameter "status", der den Wert "Hallo, Welt!" hat.
  10. Wenn ihr den Code ausführt, sollte automatisch solch ein Tweet abgesetzt werden. Yaaay. ;-)
  11. Wenn ihr noch andere Sachen machen wollt: Auf http://dev.twitter.com/doc findet ihr alle Methoden, die die Twitter-API anbietet.
  12. Ein Beispiel: Wollt ihr z.B. eure Timeline abrufen, nutzt ihr (die ersten 7 Zeilen der App sollten gleich bleiben):
    $data = $conn->get('statuses/home_timeline', array('count'=>'100'));
    print_r($data);
    Der Code macht einen GET-Request zu statuses/home_timeline mit dem Parameter "count" mit dem Wert "100". Die Daten von Twitter werden automatisch geparst und euch als Array zurückgeliefert, welches dann via print_r() ausgegeben wird.

Viel Spaß mit der Twitter-API. ;-)

Weiterlesen


AirPrint mit normalem CUPS-Server nutzen


In der heute veröffentlichten Version 4.2 von iOS ist ja auch die Möglichkeit enthalten, via AirPrint von iPhone (zumindest iPhone 4, ältere weiß ich jetzt nicht) und iPad aus auf an Mac-Rechnern angeschlossenen Druckern zu drucken. Natürlich blöd, wenn man keinen extra-Mac-Rechner für diesen Zweck herumstehen hat, sondern "nur" eine Linux-Kiste mit nem CUPS-Server drauf. Mit einem bisschen Herumgebastele kann man das aber doch hinbekommen… Und ich fasse hier mal kurz zusammen, wass ich machen musste, damit es bei mir funktioniert. ;-)

Schon vorher vorhanden waren ein Server mit Ubuntu 10.04 mit funktionierendem CUPS und Avahi. Und auch python war schon installiert. Bitte nehmt diese Anleitung nur als grobe Hilfestellung. Es kann durchaus vorkommen, dass euch noch Pakete fehlen oder in dieser Anleitung überflüssige Schritte enthalten sind. Bitte weist mich per Kommentar auf solche Fehler hin, dann kann ich sie ausmerzen.

In den Einstellungen des CUPS-Servers (Webinterface, Stichwort: "Port 631") muss der Punkt "Freigeben von Druckern welche mit diesem System verbunden sind" aktiviert sein. Zudem muss der Drucker, den ihr für AirPrint verwenden wollt, freigegeben sein.

tjfontaine hat in seinem Blog ein kleines Tool vorgestellt, um automatisch aus den Daten vom CUPS-Server ein Service-File für Avahi zu machen. Dieses benutzen wir:

wget --no-check-certificate https://github.com/tjfontaine/airprint-generate/raw/master/airprint-generate.py sudo apt-get install python-cups python ./airprint-generate.py

Wenn alles geklappt hat, habt ihr im aktuellen Verzeichnis für jeden freigegebenen Drucker eine Datei namens "AirPrint-<druckername>.service". Bei mir heißt diese Datei z.B. AirPrint-Laserjet.service. Diese kopiert ihr zum Speicherort für Avahi-Service-Configs:

sudo cp AirPrint-Laserjet.service /etc/avahi/services/

Zudem musste ich bei mir in /etc/cups/cupsd.conf noch eine Zeile hinzufügen:

ServerAlias *

Dann sollten wir die Dienste nochmal vorsichtshalber neu starten:

sudo /etc/init.d/avahi-daemon restart sudo /etc/init.d/cups restart

Und "schon" sollte der Drucker auf dem iDevice auftauchen - dies kann man u.a. in Safari testen: Das Symbol mit dem Rechteck und den Pfeil auswählen und dann "Drucken". Unter "Drucker" sollte man dann den neuen Drucker finden können.

Das Drucken selber dauert übrigens erstaunlich lange - also auch wenn da für einige viele Sekunden steht "Verbinde mit Drucker" oder auch einfach gar nichts passiert - irgendwann fing mein Drucker auf einmal an, zu drucken.

Viel Glück.

Wenn ihr Fragen oder Probleme habt, könnt ihr sie gerne hier als Kommentar posten - vielleicht kann ich euch ja weiterhelfen…

Weiterlesen