Fake Steve is back
Markus, Juni 21st, 2009Wieder da: The Secret Diary of Steve Jobs - gut, dass ich den RSS-Feed noch behalten habe…
Wieder da: The Secret Diary of Steve Jobs - gut, dass ich den RSS-Feed noch behalten habe…
Ungefähr ein Drittel aller geschätzten 9 Millionen Softwareentwickler auf der Welt nutzen schon StackOverflow.com. Der Rest sollte es sich auch mal angucken. Es ist eine “collaboratively edited question and answer site for programmers” und funktioniert wirklich ziemlich gut. Mitgründer Joel Spolsky berichtet in einem Google Tech Talk (”Learning from StackOverflow.com“) über die Vorzüge seiner Site. Joel Spolsky hat auf seiner Site auch sonst ganz interessante Sachen aus seinem breiten Erfahrungsschatz zu berichten, finde ich - er war früher Programm-Manager bei Microsoft, verantwortlich für Excel und hat dort z.B. VBA “verbrochen”.
Auch für neue Technologien wie z.B. die iPhone-Plattform gibt es schon tausende Fragen und Antworten Stackoverflow.com.
Wenn man in der Verlegenheit ist, zwei Verzeichnisse vergleichen zu müssen, z.B. weil ein Verzeichnis ein altes Backup einer Website und ein weiteres ein aktueller Download derselben Website in gehacktem Zustand (keine Sorge, ist alles wieder sauber, und es bestand zu keiner Zeit Gefahr für meine Leser!), helfen einem OS X Bordmittel:
diff /pfad/zum/einen/verzeichnis /pfad/zum/anderen/verzeichnis
liefert eine textuelle Ausgabe aller Unterschiede und
opendiff /pfad/zum/einen/verzeichnis /pfad/zum/anderen/verzeichnis
macht das selbe hübsch grafisch.
Quelle und mehr Beschreibung bei Mac OS X Hints.
Bei “diff” gibt’s noch eine Menge netter Optionen, z.B. “-r” für rekursives Vergleichen ganzer Verzeichnisbäume oder “-q” für die Reduzierung der Ausgabe auf eine Zeile pro gefundener unterschiedlicher Datei. “man diff” hilft, wie immer.
Ich habe kürzlich die iTunes Musik und Filme vom internen Laufwerk meines iMac auf ein externes Laufwerk umgezogen, um Platz zu schaffen. Vielleicht hilft diese Beschreibung dem einen oder anderen weiter, der vor dem selben Problem steht, das unweigerlich auf jeden Mac-User zukommt, weil die interne Platte irgendwann voll wird. Der Trick ist, kurz gesagt, einfach alles umzukopieren und dann iTunes die neuen Dateipfade unterzujubeln.
Meine Musik-Dateien sind alle unterhalb von “/Users/markus/Music” gespeichert, aber nur zum Teil im dem von iTunes verwalteten Ordner “/Users/markus/Music/iTunes”. Diese Beschreibung gilt für iTunes 8.
1. Auf dem externen Laufwerk (”Mono” genannt) habe ich ein Verzeichnis “/Volumes/Mono/Users/markus/Music” und “Movies” angelegt. Auf diese Weise ändern sich die bisherigen Pfade nur minimal und die externe Platte kann auf die gleiche Weise auch noch anderen Usern auf meinem Rechner dienen.
2. iTunes beendet. Alles aus “/Users/markus/Music” nach “/Volumes/Mono/Users/markus/Musik” kopiert. Gesamtzahl Dateien und Bytes via Info-Dialog verglichen, war alles byte-genau OK. Gleiches auch für das Verzeichnis “Movies”.
3. “/Volumes/Mono/Users/markus/Music/iTunes/iTunes Music Library.xml” im vi geöffnet und global alle “/Users/markus” durch “/Volumes/Mono/Users/markus” ersetzt. Gespeichert. Diese Datei ist eine Sicherheitskopie der iTunes Library im XML Format, die iTunes beim Beenden selber anlegt.
4. “/Volumes/Mono/Users/markus/Music/iTunes/iTunes Library” im vi geöffnet und alles darin gelöscht. War sowieso alles Buchstabensalat (da Binärformat). Datei gespeichert, nun 0 Byte groß. Die Datei ist aus iTunes-Sicht nun kaputt, was dazu führt, dass beim nächsten Start iTunes die XML-Datei neu einliest.
5. Die binäre formatierte Datei “iTunes Library Genius.itdb” im selben Verzeichnis habe ich umbenannt, weil ich nicht wollte, dass da was durcheinander kommt. Die Genius-Info kann ja neu erstellt werden.
6. iTunes mit gedrückter Options-Taste (”alt”) gestart. iTunes fragt nach der zu verwenden Library. “Wähle…”-Button gedrückt und “/Volumes/Mono/Users/markus/Music/iTunes/iTunes Library” ausgewählt. iTunes importiert die XML-Datei neu und baut die itunes Library-Datei neu auf. Das dauert eine ganze Weile.
7. Die Podcasts sind weg (dafür gibt es nun eine Playlist “podcasts”). Können aber durch “Ablage->Zur Mediathek hinzufügen…” von “/Volumes/Mono/Users/markus/Music/iTunes/iTunes Music/Podcasts” wieder hervorgezaubert werden.
8. Ein paar Kleinigkeiten gehen verloren. Die “Medienart” “Hörbuch”, die ich manuell vergeben hatte, ist futsch. Wird anscheinend nicht in der XML hinterlegt. Bug! Das alte “Hinzugefügt”-Datum ist auch futsch, da neu vergeben. Genius-Information ist auch weg, erwartungsgemäß. Wer darauf Wert legt, muss sich eine andere Methode googlen.
9. Bleibt nur noch, Music und Movies vom internen Laufwerk zu löschen. Dies kann ich nur dann empfehlen, wenn man a) ein Backup gemacht hat, das man sowieso immer haben sollte, oder b) sich 100% sicher ist, das alle Daten, die man braucht wirklich auf der externen Platte angekommen sind. Ich übernehme jedenfalls keine Verantwortung, falls was schief läuft, selbst wenn meine Beschreibung falsch sein sollte.
Als Quellen habe ich selber “HOWTO: Move your iTunes music while preserving library data (when you don’t let iTunes manage your music library)” und “Podcasts playlist in iTunes is empty” benutzt.
Ted Nelson, der Computerveteran, der 1965 den Hypertext erfand (ups, das war vor meiner Geburt), hat ein neues Buch geschrieben und im Selbstverlag bei Lulu.com veröffentlich: Geeks Bearing Gifts v1.1. Darin erklärt er die Computergeschichte aus seiner Sicht. Das könnte interessant sein. Für knapp 15 Euro zu haben und inklusive eines tollen Coverfotos von einem anderen Computerveteranen, dessen Eingebungen und heute ebenfalls noch täglich beglücken, an einem sehr passenden Ort. Eine Googlesuche nach ALBUQUERQUE N MEX, APD 105 519, 12 13 77 klärt den Unwissenden auf, wer das ist und was, nämlich ein “Mugshot”. Gefunden über einen Spiegel Online-Artikel.
Die Düsseldorfer Stadtbücherei und sicher auch andere Büchereien bieten für ihre Mitglieder DRM-geschützte digitale Medien zum Ausleihen an - die Düsseldorfer nennen das onlineBibliothek und bieten über 10000 Medien an. Das funktioniert zum Teil auch sehr gut auf dem Mac unter OS X, zumindest für die Bücher und Zeitungen, respektive “eBooks” und “ePaper”. Diese sind durch Adobes DRM geschützt. Zuvor muss man allerdings zwei Programme installieren: Adobe Reader 9 für die PDF-Dateien (z.B. für den “Spiegel” und diverse Bücher) und Adobe Digital Editions 1.6 für Bücher, die im “ebx.etd”-Format (eine Steuerdatei) angeboten werden. Digital Editions wird übrigens hier installiert: ~/Library/Preferences/Macromedia/Flash Player/www.macromedia.com/bin/digitaleditions1x5/digitaleditions1x5.app. Das Programm bildet eine Art Bücherregal mit gekauften und geliehenen Büchern an.
Leider liegen die Audio und Video Angebote in Formaten des Microsoft Media Players vor, WMA und WMV, die mit DRM auf dem Mac meiner Recherche nach nicht abgespielt werden können. Möglicherweise wächst mit WINE eine Möglichkeit dazu heran, wie diese Meldung hoffen lässt. Sonst bleibt wahrscheinlich nur Windows in einer VM als Abspielmöglichkeit. Oder kennt jemand eine Möglichkeit ohne Windows-Lizenz?
Für den Seelenfrieden gibt es doch nichts besseres als ein Backup. Für meine lokalen Daten erledigt das unter OS X 10.4 Leopard Time Machine von Apple ohne viel Aufhebens. Übrig bleiben aber die ganzen Daten, die ich im Web pflege, wie z.B. Delicious-Bookmarks und Bloglines-Subscriptions. Manuell kann man diese Daten auf die lokale Festplatte exportieren, und genau das wollte ich heute automatisieren. Das geht nach einigen kleinen Hürden mit wget problemlos.
1. Beispiel Bloglines
Die Seite, die alle Subscriptions als OPML liefert, lautet http://www.bloglines.com/export. Einzige Hürde: man muss eingeloggt sein. Im Browser klappt der Export nach dem Login dann dank Cookies. Und diese kann man auch wget übergeben, und zwar mit dem Parameter "--load-cookies cookies.txt". Cookies.txt ist eine Datei mit Cookies im Netscape-Format. Mein Lieblingsbrowser Firefox speichert die Cookies allerdings seit Version 3 in einer Sqlite-Datenbank. Zum Glück steht hier, wie man die Daten leicht daraus extrahieren kann - und zwar mit folgendem Script (von mir leicht vereinfacht):
#!/usr/bin/python
import sqlite3 as db
import sys
cookiedb = ‘/Users/<username>/Library/Application Support/Firefox/Profiles/<profilename>/cookies.sqlite’
connection = db.connect(cookiedb)
cursor = connection.cursor()
contents = “host, path, isSecure, expiry, name, value”
cursor.execute(”SELECT ” +contents+ ” FROM moz_cookies”)
file = open(”./cookies.txt”, ‘w’)
index = 0
for row in cursor.fetchall():
file.write(”%s\tTRUE\t%s\t%s\t%d\t%s\t%s\n” % (row[0], row[1],
str(bool(row[2])).upper(), row[3], str(row[4]), str(row[5])))
index += 1
file.close()
connection.close()
Der Aufruf zum Sichern sieht dann so aus:
wget –load-cookies cookies.txt “http://www.bloglines.com/export” -O bloglines.opml
2. Beispiel delicious
Hier lautet die URL zum Export https://secure.delicious.com/settings/profile/export. Wieder braucht man die cookies.txt. Aber es gibt noch ein weiteres Problem: Die export-URL verlangt einige Parameter als POST-Request. Zum Glück kann wget auch diesen Trick mittles “–post-data”. Die Parameter sehen so aus: “.crumb=<ID>&include_tags=yes&include_notes=yes&submit=submit”. Die “<ID>” muss man aus dem Quelltext der Webseite “https://secure.delicious.com/settings/bookmarks/export” auslesen (nach .crumb suchen), denn ich denke, die ist variabel (und ich hoffe aber, sie bleibt für mich stabil…). Ausserdem gibt es noch den wget-Parameter “–no-check-certificate”, der Probleme mit dem SSL-Zertifikat ignoriert. Insgesamt sieht der Aufruf dann so aus:
wget –no-check-certificate –load-cookies cookies.txt “https://secure.delicious.com/settings/profile/export” –post-data “.crumb=<ID>&include_tags=yes&include_notes=yes&submit=submit” -O delicious.html
Jetzt nur noch das Ganze in ein Script packen, um es via cron-job oder sowas regelmäßig und ohne weiteres Zutun anzustoßen.
Das coole am Mac ist ja das ausgewachsene Unix Betriebssystem unter dem ganzen Zuckerguss der Oberfläche. Viele wundervolle Tools sind schon vorinstalliert. Eines davon ist Subversion, welches bei Leopard in der Version 1.4.4 beiliegt. Da ja auch der Webserver apache schon vorinstalliert ist (2.2.8), ist es ein leichtes, ein Subversion Repository via http anzubieten, selbst mit https kein Problem. Hier steht wie: Installing a Secure Subversion Server on Leopard.
Bei der Gelegenheit weise ich mal auf das freie Buch (wie “Freibier”) Version Control with Subversion hin, das es bei O’Reilly auch zu kaufen gibt. Bei O’Reilly gibt es übrigens dieses und eine ganze Reihe weiterer freier Bücher: die O’Reilly OpenBooks. Bisher über 30 PDF-E-Books. Empfehlenswert z.B.: Praktischer Einstieg in MySQL mit PHP von Sascha Kersken.