Kalender, Kontakte und Erinnerungen zwischen Mac und iOS synchronisieren. Ohne iCloud und Google. Mit Baïkal.

Worum geht’s?

Für Kalenderdaten, Aufgaben („Erinnerungen im Apple-Jargon“) und Kontakte ziehe ich ein eigenes Synchronisationsbackend der iCloud oder Google vor. Bisher habe ich hierzu ownCloud auf meinem uberspace verwendet, was soweit eigentlich auch ausreichend gut funktioniert hatte (iOS 7 und Mac OS 10.9). Als ich aber anfing, meine AufgabenErinnerungen damit zu synchronisieren (hauptsächlich wegen der schicken Integration in Fantastical), hat ownCloud für mich nicht immer zuverlässig genug funktioniert. Ärgerlichstes (nicht immer reproduzierbares) Problem: Ich lege eine Aufgabe an und während ich noch dabei bin ein Fälligkeitsdatum hinzuzufügen, wird die Aufgabe bereits in die ownCloud gesynct und überschreibt mir anschließend die lokale Aufgabe mit Fälligkeitsdatum durch die ownCloud-Aufgabe ohne Fälligkeitsdatum. Gnah.

Ich habe mich nicht lumpen lassen und ein instagramifiziertes Logo von Baïkal eingebunden.

Ich hatte mich daher nach einer Alternative umgesehen und bin auf das quelloffene Baïkal gestoßen, welches ich seit kurzem ohne Ausfälle einsetze. Damit sind allerdings zwei Nachteile verbunden, deren man sich bewusst sein sollte: Es gibt keine Webansicht der Kalender- und Kontaktdaten, d.h. ohne Client sieht man nichts genaues seiner Daten. (Version 2 soll das ändern, aber das dürfte eine ganze Weile dauern.) Außerdem können neue Kalender nicht über den Client, sondern nur im Backend angelegt werden.

Obwohl die Konfiguration ziemlich schnell geht, bin ich doch einige male ins Stolpern geraten, insbesondere, da ich meine Synchronisation ausschließlich per SSL durchführen möchte und dieser Fall in den mir untergekommenen Anleitungen nicht ausreichend dokumentiert ist. Daher beschreibe ich meinen Lernprozess hier, auch wenn ich mir bewusst bin, dass ich nicht gerade vorbildlich alle Eventualitäten abgedeckt habe. Insofern Fragen oder Unklarheiten bitte in die Kommentare.

Installation und Konfiguration des Webservers

Bei der Installation auf meinen uberspace habe ich mich in weiten Teilen an Marcos Anleitung gehalten. Als Ergänzung sei gesagt, dass durch die Installation aus dem git-Repository direkt die neueste Version des zugrundeliegenden SabreDAV (derzeit 1.8.7) gezogen wird.

Da ich mein Baïkal per Subdomain anspreche, musste ich – wie dort ausgeführt – in den System settings der Baïkal-Administration die Pfade der CalDAV base URI in "/cal.php/" bzw. der CardDAV base URI in "/card.php/" korrigieren:

baikal-pfade

Darüber hinaus habe ich noch der Datei baikal/html/.htaccess die folgenden Einträge zu den bestehenden Einträgen hinzugefügt, damit kein Client ungewollt auf die Idee kommt, unverschlüsselt Daten zu synchronisieren und die Konfiguration zumindest unter iOS ohne die Angabe des genauen URL-Pfades möglich ist (Quelle):

<IfModule mod_rewrite.c>
    # http-Request immer nach https weiterleiten
    RewriteCond %{HTTPS} !=on
    RewriteCond %{ENV:HTTPS} !=on
    RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]   

    # Dadurch genügt bei der iOS-Konfiguration schon der Servername
    RedirectMatch 301 ^/.well-known/caldav /cal.php
    RedirectMatch 301 ^/.well-known/carddav /card.php
</IfModule>

Konfiguration der Kalender.app (OSX 10.9)

Vorbereitungen

Da man über die Kalender-App keine neuen Kalender anlegen kann (lasst es besser gleich bleiben, da ansonsten die Kalender.app bis zum St. Nimmerleinstag den Kalender erfolglos zu erstellen versucht…), müssen diese vor der Datenmigration im Web-Backend der Baikal-Installation einzeln erstellt werden.

Einrichtung des Baïkal-Kontos

Als nächstes wird über die Systemeinstellungen, das – bis jetzt nur mit Kalenderkategorien und ohne Kalenderdaten befüllte – Baïkal-Konto hinzugefügt:

Internetaccounts Anderen Account hinzufügen CalDAV-Account hinzufügen. Folgende Werte sind einzutragen:

Accounttyp: Fortgeschritten

Benutzername: $username

Kennwort: $password

Serveradresse: dav.domain.tld (Wichtig: kein “https://” davor!)

Serverpfad: /cal.php/principals/$username

Port: 443 (Auch wichtig, sonst versucht es der Kalender über den (zumindest bei meinem uberspace) geschlossenem Port 8443.)

SSL verwenden: Ja

Kerberos v5: Nein

Danach noch die Erinnerungen einschalten.

Datenmigration

Um die Daten der bestehenden Kalender in den Kalender des Macs zu migrieren, diese einzeln auswählen und über Ablage Exportieren Exportieren als ics-Datei speichern. Diese Datei nun gleich wieder über Ablage Importieren Importieren importieren und als Ziel den gleichnamigen Kalender der Baikal-Instanz angeben. Sollten in den einzelnen Kalendern zugleich AufgabenErinnerungen enthalten sein, bietet Kalender.app anschließend an, diese ebenfalls zu importieren.

Konfiguration des Adressbuchs (OSX 10.9)

Vorbemerkung

Zunächst muss man zur Kenntnis nehmen, dass evtl. angelegte Kontaktgruppen in der Kontakte.app nichts mit den mehreren Adressbüchern zu tun, die man im Backend von Baïkal anlegen kann (Quelle). Für diesen Schritt müssen also keine weiteren Adressbücher im Baïkal-Backend angelegt werden. Das würde sowieso nichts bringen, da die Kontakte.app nur auf genau ein Adressbuch zugreift und zwar das alphabetisch erste Adressbuch. m(

Einrichtung der Kontakte.app

Ebenfalls über Internetaccounts Anderen Account hinzufügen CalDAV-Account hinzufügen:

Benutzername: $username

Kennwort: $password

Serveradresse: https://dav.domain.tld/card.php/principals/$username

Datenmigration

Bei Kontakten ist der Umzug bestehender Kontakte deutlich einfacher als bei den Kalendern. Hierzu können bestehende Gruppen einfach per Drag-and-Drop in das neue Konto kopiert werden. Sollten die Gruppen nicht angezeigt werden, können diese via Darstellung Gruppen einblenden hervorgeholt werden. Kontakte, die keiner Gruppe zugewiesen sind, können durch eine Intelligente Gruppe mit dem Filter Visitenkarte ist nicht Mitglied von beliebige Gruppe ausfindig gemacht und von dort ebenfalls in das neue Konto gezogen werden.

Einrichtung des Adressbuchs unter iOS 7

In der Einstellungen.app unter Mail, Kontakte, Kalender: Account hinzufügen Andere CardDAV-Account hinzufügen

Server: dav.domain.tld

Benutzername: $username

Kennwort: $password

Einrichtung des Kalenders unter iOS 7

In der Einstellungen.app unter Mail, Kontakte, Kalender: Account hinzufügen Andere CalDAV-Account hinzufügen

Server: dav.domain.tld

Benutzername: $username

Kennwort: $password

Nach dem Einrichten beider Accounts am besten prüfen, ob die obige htaccess-Regel greift und der Account in den erweiterten Einstellungen SSL verwenden aktiviert hat. Zwar kann man der Serveradresse auch ein beherztes https:// voranstellen, doch haben mir manche Geräte damit eine Verbindung verweigert.

Schluss

Puh, das sollte es dann eigentlich gewesen sein. \o/ In einem zweiten Beitrag werde ich mich demnächst dem Problem widmen, wie man bestimmte Kalender gemeinsam nutzen kann. Das geht nämlich auch mit Baïkal, allerdings nur mit etwas Datenbankmagie (bei der ich gleich mal einen Fehler gemacht hatte).

E-Mails per S/MIME signieren und verschlüsseln (Mac/iOS)

S/MIME Screenshot mit Verifizierungshäkchen

Auf dem Mac und dem iPhone kann man von Haus aus per S/MIME signierte oder verschlüsselte E-Mails empfangen bzw. versenden. Zum Versenden benötigt man ein eigenes Zertifikat, mit dem der Aussteller die Echtheit einer E-Mail-Adresse bestätigt. Der Besitzer des privaten Schlüssels für diese E-Mail-Adresse kann sich damit über das Zertifikat als Absender exakt dieser Mailadresse authentifizieren.

Ich beschreibe im Folgenden, wie man an ein Zertifikat kommt und dieses auf dem Mac sowie dem iPhone installiert.

Zertifikat erstellen

Es gibt mehrere Zertifikatsklassen, meinen Zwecken genügt ein kostenloses Class-1-Zertifikat. Die höherklassigen Zertifikate bescheinigen u.a. auch die Echtheit des Namens oder der Firma. Ich habe mir mein kostenloses Zertifikat in wenigen Minuten von StartSSL ausstellen lassen.

Hierzu StartSSL ansurfen und per „Express Lane“ einen Account erstellen. Dadurch wird ein Zertifikat installiert, durch das ihr euch auch später wieder der Webseite gegenüber authentifizieren und Zertifikate für weitere E-Mail-Adressen anlegen könnt. Gleichzeitig gilt das Zertifikat für die bei der Registrierung angegebene Mailadresse. (Danke markus3g für den Hinweis)

Sollen weitere Mailadressen ein Zertifikat erhalten, einfach über den „Validations Wizard“ die gewünschten Mailadressen validieren und über den „Certificates Wizard“ das S/MIME-Zertifikat für diese Mailadresse erstellen. Das Zertifikat samt privatem Schlüssel wird dadurch auf eurem Mac installiert.

Ab jetzt könnt ihr mit Mail.app auf dem Mac bereits Mails verschlüsseln oder signieren, für die ihr Zertifikate erstellt habt.

Zertifikat auf das iPhone schieben

Nun die Schlüsselbundverwaltung öffnen, in die Kategorie „Meine Zertifikate“ wechseln (Danke markus3g für den Hinweis) und die jeweiligen Zertifikate heraussuchen (Namensschema: name@domain.tld (zufaelligezeichenkette)). Diese Zertifikate per Rechtsklick als .p12-Datei exportieren. (Sollte der Menüeintrag trotz korrekter Auswahl fehlen, soll ein mehrmaliger Neustart der Schlüsselbundverwaltung helfen.) Das Format ist wichtig, da die anderen den notwendigen privaten Schlüssel nicht enthalten. Daraufhin müsst ihr für das Zertifikat ein sicheres Passwort eingeben. Falls euch das die Wahl erleichtert: es muss nur einmalig während der Installation auf dem iPhone eingegeben werden. Die exportierten .p12-Dateien müsst ihr dann irgendwie auf das iPhone bekommen (sich per E-Mail schicken, in die Dropbox legen, you name it, Airdrop für iOS (kleiner Scherz, seufz), …)

Auf dem iPhone

Für StartSSL muss ein Intermediatezertifikat auf dem iPhone installiert werden. Hierzu https://www.startssl.com/certs/sub.class1.client.ca.pem) im Browser auf dem iPhone öffnen und installieren. Dann eure .p12-Dateien öffnen und installieren, sowie im Anschluss in den erweiterten Einstellungen eures Mailaccounts den Schalter für S/MIME umlegen und dort die gewünschten Optionen (Signieren, Verschlüsseln) aktivieren. iOS 6 ist hier übrigens etwas buggy: Will man nachträglich Änderungen vornehmen, muss man sich erst wieder aus den Einstellungen zurück zur Startseite hangeln und dann wieder in die Maileinstellungen navigieren.

Nachtrag: Lesenswerter Hinweis von dentaku bzgl. des Vorwurfs, Zertifikate von StartSSL wären unsicher.

Dem Firefox ein neues Mac-Gewand

Firefox vs. FxChrome

Nachdem ich viele, viele Jahre abwechselnd mit Safari und mit Chrome unterwegs war, wollte ich es wieder einmal mit dem Firefox versuchen. Allerdings sagt mir das Aussehen des Firefox’ auf dem Mac so überhaupt nicht zu. @yatil hatte hierzu gestern unaufgefordert die Idee, dass man ja das FXChrome-Theme verwenden könne. Dazu habe ich mir noch (neben den üblichen Verdächtigen) die Omnibar-Erweiterung ins Boot geholt, den Reload-Button aus der Adressleiste an die „richtige“ Stelle gezogen und ein paar kleinere Änderungen in

~/Library/Application Support/Firefox/Profiles/foobar.default/chrome/userChrome.css

eingetragen:

@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); /* only needed once */

/* Favicons in Lesezeichenleiste verbergen */
.tabbrowser-tab .tab-icon-image, .tabbrowser-tab .tab-throbber {
    display:none !important;
}

#personal-bookmarks .toolbarbutton-icon {
    display:none !important;
}

/* Schriftgröße in Adressleiste wieder verringern (wg. Omnibar) */
#urlbar, #searchbar .searchbar-textbox {
    font-size: 12px !important; 
}

Und schon sieht der Firefox sehr viel aufgeräumter aus!

Nachtrag: Als Startseite habe ich about:newtab eingestellt, damit auch in einem neuen Fenster die Omnibar den Tastaturfokus hat.

Nachtrag 2: Das nervige (da bei mir nie beabsichtigte aber häufiger ausgelöste) Zoomen bei gedrückter ⌘-Taste und Zweifinger-Gesten kann man hier abstellen: Disable command ⌘ + scroll zooming in firefox 20 on mac?

Nachtrag 3: Um zu verhindern, dass das Schließen-Symbol bei vielen Tabs ausgeblendet wird, in about:config den Wert von browser.tabs.tabClipWidth von 140 (lies: Mindestbreite, die ein Tab haben muss, damit das Kreuzchen angezeigt wird) auf 1 (oder einen anderen kleineren Wert) setzen.

GPGMail mit Mail.app und Mountain Lion (10.8) verwenden

Die aktuell freigegebene Version der GPGTools (zum Verschlüsseln und Signieren von E-Mails) funktioniert unter Mountain Lion nicht. Man kann spenden und/oder sich eine Alpha-Version des Mail-Bundles aus dem Quelltext bauen (git und Xcode vorausgesetzt). Ich konnte zwar noch keine Probleme feststellen, aber wahrscheinlich ist diese Version aus gutem Grund noch nicht veröffentlicht → proceed at your own risk.

Und so geht’s

Am besten vorher Mail.app schließen. Dann die aktuelle Nightly-Version der GPGTools installieren (die stabile Version 2012.03.18 hat bei mir nicht funktioniert, es kam der Fehler [GPGMail] Task helper Exception: GPG not found!):

https://nightly.gpgtools.org/GPGTools_Installer-99n.dmg

Die aktuelle Version funktioniert mittlerweile auch: https://s3.amazonaws.com/gpgtools/GPGTools-20130330.dmg

Um das Mail-Bundle zu bauen im Terminal folgende Befehle eintippen/einfügen:

# Das Repository klonen, ins Verzeichnis wechseln und bauen
git clone --recursive https://github.com/GPGTools/GPGMail -b experimental    
cd GPGMail
CONFIG=Debug make

# Das gebaute Mailbundle an die richtige Stelle kopieren    
cp -r ./build/Debug/GPGMail.mailbundle ~/Library/Mail/Bundles

# Sicherstellen, dass Bundles aktiviert sind (war bei mir schon der Fall) 
defaults write com.apple.mail EnableBundles -bool YES 
defaults write com.apple.mail BundleCompatibilityVersion -int 3

Fertig. Ich wünsche guten Appetit!

Dinge, die mich persönlich in meinem iOS-Alltag stören (und die hoffentlich bald behoben werden)

Einzelne Apps aus iCloud-Backup wiederherstellen

Es ist derzeit nicht möglich, die Daten einer einzelnen App aus dem iCloud-Backup wiederherzustellen. Wenn sich also eine App nicht selbst um Datensicherung bemüht, muss ich mein ganzes System wiederherstellen (durfte ich bereits). Bei der Installation einer App könnte bei vorhandenem Backup gefragt werden, ob nicht vielleicht die Daten dazu wiederhergestellt werden sollen.

Nicht-Beim-Lesen-Stören-Modus

Eines der iOS 6-Features, das ich nicht mehr missen möchte: der Nicht-Stören-Modus. Allerdings muss man sich weiterhin stören lassen, wenn man das betroffene Gerät parallel benutzt. Wenn ich auf dem iPad einen Text ungestört lesen möchte, fliegen die Notifications trotzdem rein.

Sharing-API

Wenn man Inhalte ausschließlich mit Twitter, Facebook und Instapaper teilen will, kommt man mit den Sharing-Möglichkeiten von iOS bzw. vieler Apps klar. Ab dem Moment, wo man Inhalte mit nicht ganz so verbreiteten Diensten teilen will (bei mir: quote.fm, huffduffer.com, …), nimmt es krude Züge an: in die Zwischenablage kopieren und dann die App aufrufen; in Safari öffnen und Bookmarklet öffnen oder an eine spezielle Mailadresse schicken. Alles unnötiger Quatsch; ich will eine Sharing-API in der sich auch kleine Dienste einklinken können.

Autokorrektur from hell

Die deutsche Autokorrektur ist seit Jahren ein immer wiederkehrendes Ärgernis. Auch wenn sie in der Regel hilfreich ist, dürfte jeder seine ganz persönlichen Schwachsinnsvorschläge kennen, die auch nicht durch mehrmaliges Wegtippen unterbleiben (vgl. Autokorrekturfromhell).

Benutzeraccounts oder doch wenigstens einen Gästemodus

Vielleicht ist Apples Vision, dass jeder sein eigenes iPad hat und nie jemand anderes ein fremdes iPad in die Hände bekommt. Das widerspräche dann deutlich meiner Praxis, in der mehrere Leute dasselbe iPad benutzen und Gäste (auch kleine Gäste) das iPad benutzen können sollen, ohne dass man sich um seine Mails, Kalender oder Hiscores Sorgen machen will.

Das Zeitungskiosk und der obligatorische „Apps, die keiner braucht und sich trotzdem nicht löschen lassen“-Ordner

Im Rahmen der App-Hygiene möchte ich nie genutzte Apps zumindest ausblenden können. Geht ja in den Einschränkungs-Einstellungen u.a. für Safari, warum nicht auch für Stocks und Konsorten?

Anderer Kleinkram

  • Ich möchte die derzeit Gmail-Accounts vorbehaltene Archivieren-Funktion der Mail.app auch mit anderen (“normalen”) E-Mail-Accounts nutzen, d.h. E-Mails per Swipe archivieren anstatt löschen zu können. Auf dem Mac geht das doch auch wunderbar.
  • Bei der Installation von kostenlosen Apps keine Kennworteingabe* mehr einfordern. (* Ich habe ein wirklich unangenehm langes Kennwort.)
  • 3rd-Party-Apps das Bewerten von Musik gestatten.
  • Notification-Center funktional einem Control-Center zuwenden, damit man endlich einmal die Helligkeit regeln kann, ohne die App verlassen zu müssen.
  • Kein OS-Feature, aber trotzdem: die Remote.app simuliert immer noch die physische Fernsteuerung. SRLY, Apple?

Spielplan des SV Darmstadt 98 abonnieren

Update: Der Kalender wird auch in der 2. Liga weiter gepflegt und enthält somit auch die Spieltermine für die neue Saison 2014/15.

Präambel

Mit dem iCalendar-Format gibt es ein nützliches standardisiertes Datenformat, mit dem man Kalendereinträge zwischen Kalendern hin- und herbewegen kann und noch viel besser: Ganze Kalender abonnieren, die sich automatisch auf dem neuesten Stand halten und dadurch Änderungen oder neue Termine automatisch einpflegen. Und trotzdem gibt es immer wieder Dienste, Vereine oder sonst etwas, bei denen ich ein Kalender-Abonnement vermisse, sodass ich (und zahllose andere mit elektronischen Kalendern arbeitende Menschen) die gewünschten Termine mühsam eintrage. Man stelle sich die Menge aller Fußballfans eines Bundesligisten vor, die die Spiele ihrer Mannschaft einzeln in ihren Kalender eintippen. Vollkommen unnötig. Mein persönlicher Traum ist: Jemand macht das gleiche, was die Hörsuppe für Podcasts für Fußball-Termine macht. Einfach gewünschte Fußballvereine auswählen und ein Kalender-Abonnement mit den Spielen der gewählten Vereine erhalten. Und zwar mindestens bis runter in die 3. Liga.

Link zum Kalenderabo

Da das bisher noch ein Traum bleibt 1, biete ich den von mir gepflegten Kalender mit den Spielen der 1. Mannschaft des SV Darmstadt 98 als Kalender-Abonnement an. Dieses kann über den folgenden Link in eurem elektronischen Kalender abonniert werden: Link zum Kalenderabo (iCalendar)

Auf Geräten mit dem Apfel genügt es, den folgenden iCalendar-Link aufzurufen:

Link zum Kalenderabo

Wie das mit anderen Kalender (Outlook, Sunbird, Google Calendar usw.) funktioniert, weiß ich nicht genau. Das müsstet ihr euch mit der Suchmaschine eurer Wahl zusammensuchen.

1 Zitat kicker.de:

Kurzfristig ist solch eine Änderung nicht vorgesehen. Wir haben Ihren Wunsch aber auf die Liste der Feature-Wünsche aufgenommen.

Lokalen Webserver des Macs nutzen (+MySQL)

Wenn man auf einem Mac einen lokalen Webserver benötigt, kann man u.a. auf MAMP (irgendwie tot), XAMPP (irgendwie vernachlässigt) oder AMPPS (irgendwie suspekt) zurückgreifen.

Man kann aber auch einfach den eingebauten Webserver des Macs verwenden. Auf senaeh.de ist gut beschrieben, wie man diesen einrichtet. Ich will nur ein paar Ergänzungen dazu machen:

In der httpd.conf ist die folgende Zeile standardmäßig auskommentiert. Da dieses Modul benötigt wird, muss das Rautenzeichen # davor entfernt werden:

LoadModule php5_module libexec/apache2/libphp5.so

MySQL

Als großer Freund von homebrew habe ich MySQL nicht wie vorgeschlagen als Binary, sondern eben über brew installiert:

brew install mysql
unset TMPDIR
mysql_install_db --verbose --user=raphael --basedir="$(brew --prefix mysql)" --datadir=/Users/raphael/Webseiten/mysql-data --tmpdir=/tmp`

Da ich die Datenbanken in einem vom Standard abweichenden Verzeichnis speichern lasse, muss ich MySQL diesen Umstand in der Datei /usr/local/etc/my.cnf mitteilen (musste ich auch erstmal drauf kommen):

[mysqld]
datadir=/Users/raphael/Webseiten/mysql-data

Das root-Passwort sollte man dann auch noch setzen:

mysqladmin -u root password 'new-password'

Und schon kann MySQL benutzt werden. Will man MySQL nicht als Daemon laufen lassen, so startet bzw. beendet man MySQL manuell per:

mysql.server start
mysql.server stop

Fehler #2002

Wenn ihr einen Fehler #2002 beim Anmelden über phpMyAdmin erhaltet, der Login über das Terminal aber problemlos funktioniert, ist es möglich, dass das temporäre Verzeichnis von MySQL nicht korrekt gesetzt ist. In diesem Fall hilft ein Symlink:

sudo mkdir /var/mysql
sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock

Mehrere E-Mail-Accounts zusammenlegen (aka E-Mail-Duplikate finden und löschen)

Disclaimer: Der hier beschriebene Vorgang mag nicht besonders effizient sein, funktioniert aber gut genug. Effiziente Lösungen bitte in die Kommentare.

Es kommt einmal der Tag, an dem man mehrere Mail-Accounts zusammenlegen möchte. Dann will man all seine alten E-Mails in einem einzigen Account sammeln und aus den anderen Accounts löschen. Wenn man in der Vergangenheit nicht ganz so diszipliniert mit seinen E-Mails umgegangen ist und zu allem Überfluss schonmal Mails zwischen den betroffenen Accounts hin- und herkopiert hat, sammeln sich durch dieses Vorgehen in den einzelnen Accounts Duplikate von E-Mails an. Von vielen E-Mails.

Doch wie kann man mehrere Accounts zusammenlegen und am Ende jede E-Mail nur einfach in seinem neuen Account haben?

So geht’s

Da ich meine Mail-Accounts ausschließlich per IMAP abrufe, habe ich zunächst alle E-Mails per Drag-and-Drop in den Ziel-Account verschoben. Das kann je nach E-Mail-Anzahl und -größe eine ganze Weile dauern, aber man muss ja auch nicht die ganze Zeit auf den Fortschrittsbalken starren.

Um abschließend E-Mail-Duplikate aus dem Ziel-Account zu entfernen, habe ich vorübergehend Thunderbird verwendet. Hierfür gibt es eine äußerst brauchbare Erweiterung, die anhand mehrerer wählbarer Kriterien Duplikate (auch ordnerübergreifend) erkennt und diese direkt löschen oder verschieben kann.

Et voilà!

Tschüss Google Reader, hallo Fever

Screenshot von Reeder 3

Auch wenn RSS-Feeds regelmäßig ein baldiges Ende prophezeit bekommen, nehmen diese in meinem Nachrichten-Alltag weiterhin einen zentralen Stellenwert ein. Ich konsumiere meine RSS-Feeds dabei überwiegend mit der iPhone-App Reeder, selten auf dem iPad, selten am Desktop-Rechner und nie im Webinterface des Google Readers. Der Google Reader dient gezwungenermaßen der Verwaltung und Synchronisierung der RSS-Abonnements, da dieser seit langem zum De-facto-Standard für RSS-Feeds avanciert ist. Es gibt eigentlich keine App, die nicht mit dem Google Reader synchronisieren kann oder diesen sogar voraussetzt.

Fever betritt die Bühne

An dieser Monopolstellung hat sich heute etwas geändert. Denn die iPhone-App Reeder wurde auf die Version 3.0 aktualisiert und unterstützt seitdem ein alternatives Backend namens Fever. Zwar gibt es Fever schon etwas länger, aber mit der Integration in Reeder bietet sich für mich endlich eine Alternative meine Feeds zu lesen, ohne Google über mein Leseverhalten in Kenntnis setzen zu müssen.

Allerdings ist Fever nicht ganz anspruchslos. Zunächst einmal ist Fever ein kommerzielles Produkt, d.h. man muss es für ~25€ (per Paypal) kaufen, es gibt zudem keine Testversion und keine Möglichkeit zur Erstattung des Kaufbetrags. Man kauft also die Katze im Sack und kann weder Sack noch Katze zurückgeben. Ob einem Fever letztendlich die Abnabelung vom Google Reader wert ist, muss jeder selbst entscheiden. Bei kostenlosen Diensten und umso mehr bei Google gilt bekanntermaßen der eiserne Grundsatz: „Wenn das Produkt nichts kostet, bist du selbst das Produkt.“ Für mich ist das, meine stetige Lust auf Neues und die insgesamt geringere Abhängigkeit von den Google’schen Diensten ausreichend für eine Kaufentscheidung gewesen.

Fever selbst muss auf einem selbst gehosteten System installiert werden, es gibt keinen Dienstleister, der die Installation und das Hosting für Fever übernimmt. Ob Fever auf dem eigenen Hoster lauffähig ist, prüft vor dem Kauf ein Installationsskript, das im Anschluss auch die zum Betrieb notwendigen Dateien nachlädt.

Inbetriebnahme auf meinem uberspace

Vorweg: Da bei uberspace FastCGI eingesetzt wird, gibt es eine Einschränkung bei der Verwendung des Web-Interfaces. Mir war das egal, da ich ja meine Feeds hauptsächlich auf dem iPhone lese.

Ich habe also zunächst das Installationsskript laut Anleitung auf meinen uberspace gepackt:

cd ~/html wget http://feedafever.com/gateway/public/fever.zip unzip fever.zip chmod -R 755 ./fever

Wenn man eine Domain auf den uberspace aufgeschaltet hat, will man evtl. gleich eine Subdomain anlegen:

cd /var/www/virtual/username/
ln -s html/fever fever.domain.tld

Der Rest der Installation gestaltet sich eigentlich sehr geradlinig und unmissverständlich (wenn nicht gerade die DNS-Auflösung gestört ist und man sich wundert, warum der Aufruf bestimmter Installationsschritte fehlschlägt). Man legt eine Datenbank für Fever an und übergibt dem Installationsskript unter http://path.to/fever/boot.php die gewünschten Parameter. Üblicherweise wird man seine Abonnements aus dem Google-Reader als OPML-Datei exportieren und diese Datei wiederum in Fever importieren. Abschließend wird man noch einen Cronjob anlegen wollen, der regelmäßig nach aktualisierten RSS-Feeds schaut (in meinem Fall alle 30 Minuten), sodass die Ladezeiten beim Aufruf der Webseite und von Reeder (der auch die Aktualisierung anstoßen kann) verkürzt werden:

crontab -e 23,53 \* * *| * curl -L -s http://path.to/fever/?refresh >/dev/null 2>&1

Fazit

Verstohlen schiele ich schon zur von mir geschätzten ownCloud, bei der gestern ein integrierter RSS-Reader angekündigt wurde. Ob und wann dieser allerdings in anderen RSS-Clients Unterstützung findet, steht noch in den Sternen. Bis dahin sollte ich allerdings mit Fever klarkommen, auch wenn mir bis zum jetzigen Zeitpunkt schon folgende Schwächen aufgefallen sind:

  • Kein nativer iPad- oder Mac-Client (natürlich kann die Webseite verwendet werden und es Reeder dürfte auch auf diesen Plattformen Fever-Unterstützung nachgereicht bekommen).
  • Reeder (iPhone) bietet bisher nur rudimentäre Unterstützung (bspw. fehlt das Abbestellen von Feeds)
  • Fever kommt in meinem Fall leider mit deutschen Umlauten nicht klar (Entwickler ist angemailt, ich hoffe auf einen schnellen Fix) Das Problem liegt an PHP 5.4 und wurde gerade eben in der aktuellen Beta behoben.

Adobe Lightroom + LR/Enfuse zum Laufen bringen

Ich verwende das LR/Enfuse-Plugin (einen Lightroom-Wrapper für Enfuse), um Belichtungsreihen direkt in Adobe Lightroom zu einem kontrastreichen Bild zusammenzufügen. Bei der Installation unter Mac OS kann man in eine interessante Falle tappen, wodurch ein Teil des Programms nicht mehr funktioniert. Zunächst war mir (und auch dem Entwickler des Plugins) nicht klar, worin das Problem lag, doch durch eine Recherche habe ich es nun soweit verstanden: Lädt man nämlich das Plugin wie beschrieben mit Safari herunter, setzt Safari ein sog. Quarantäne-Flag in der heruntergeladenen Datei. Bei Dateien, die mit der Quarantäne-Markierung versehen sind, wird beim Dateiaufruf ein Hinweis angezeigt, der den meisten bekannt sein sollte:

Quarantine-Screenshot

Diese Quarantäne-Markierung bleibt auch erhalten, wenn man das zunächst gezippte LR/Enfuse-Plugin entpackt und in das Lightroom-Plugin-Verzeichnis verschoben hat und gilt auch für die Kommandozeilen-Tools, die LR/Enfuse später zur Laufzeit nachlädt. Hat man in LR/Enfuse die Option “Copy all metadata from the primary image to the final image” aktiviert, schlägt daraufhin der Programmaufruf fehl:
Plugins/LREnfuse.lrplugin/exiftoolapp/exiftool: /usr/bin/perl: bad interpreter: Operation not permitted

Mit folgendem Befehl kann man über das Terminal feststellen, ob eine Datei das Quarantäne-Flag gesetzt hat:

xattr -l $pfadzudenplugins/LREnfuse.lrplugin/exiftoolapp/exiftool

Bekommt man keine Ausgabe für diesen Befehl, hat die angegebene Datei auch kein Quarantäne-Flag. Erhält man – wie in dem hier beschriebenen Fall – eine Ausgabe in der Art com.apple.quarantine: 0006;5f96a3cd;Safari;D3660F93-8D86-4A75-44B7-2FA710CD49A2|com.apple.Safari, so ist das Quarantäne-Flag gesetzt und verhindert den Aufruf. Die Behebung des Problems ist sehr einfach. Mit dem folgenden Befehl wird das Flag für den angegebenen Pfad und alle darin enthaltenen Dateien entfernt:

xattr -r -d com.apple.quarantine $pfadzudenplugins/LREnfuse.lrplugin

Danach funktioniert das LR/Enfuse-Plugin wie gewünscht.