Archiv der Kategorie: Technik

Genieße die Kommandozeile

Jede Woche lade ich mir die gesprochenen Artikel von Zeit Audio herunter und lade sie auf mein Handy. Für die Zwischenschritte (entpacken, Jingles wegschneiden, ID3-Tags anpassen, zur Audiobibliothek hinzufügen) habe ich ein Skript geschrieben – wie ich finde, ein schönes Beispiel dafür, wie sich wiederkehrendes lästiges Geklicke mit Hilfe von Kommandozeilentools durch einen einzigen Befehl ersetzen lässt.

#!/bin/bash

# Remove directories for uncut and cut MP3s:
rm -rf $HOME/Downloads/za
rm -rf $HOME/Downloads/cutza

# Unzip MP3s from most recent archive:
unzip $(ls $HOME/Downloads/Audiofiles_DIE_ZEIT_*.zip | sort | tail -n 1) \
-d $HOME/Downloads/za

# Remove the stupid jingle from the beginning:
mp3splt -d $HOME/Downloads/cutza $HOME/Downloads/za/*.mp3 0.7 EOF

# Make "Artist" tag the same on all files, otherwise iOS 4 won't show them
# as one album:
id3v2 --artist "DIE ZEIT" $HOME/Downloads/cutza/*

# Add them to the Rhythmbox library:
rhythmbox-client $HOME/Downloads/cutza/*

Manuell ist nur noch das Herunterladen und das Übertragen von Rhythmbox aufs iPhone – auch das ließe sich mal automatisieren, bräuchte aber etwas mehr Zeit als die obigen Zeilen.

Nicht funktional, aber dekorativ

Ubuntu 10.04 beim Erwachen auf einem ThinkPad W510:

abstraktes Muster aus leuchtend farbigen Rechteckenabstraktes Muster aus leuchtend farbigen Rechteckenabstraktes Muster aus leuchtend farbigen Rechtecken

Der linke Teil sieht aus wie HELP!, der rechte auch ein wenig. Solange der Rest der Botschaft nicht lautet „Ich bin in einer Laptopfabrik gefangen!“ oder „Ich werde von Canonical Ltd. gefangengehalten, weil ich ihrem Weltherrschaftsplan auf die Schliche gekommen bin“, muss ich aber nichts unternehmen, denke ich.

diff für Juristen

$ diff -j ThüFischG-20060628.txt ThüFischG-20080630.txt | head -n 7
1. § 4 wird wie folgt geändert:
a) In Absatz 1 werden das Wort ", Wasserbuch," durch das Wort "oder" ersetzt und
die Worte "oder Fischereikataster" gestrichen.
b) Absatz 2 Satz 3 wird aufgehoben.
2. In § 5 Abs. 2 werden das Komma nach dem Wort "Grundbuch" und die Worte
"Wasserbuch, Fischereikataster" gestrichen.

Ob es eine solche Software bereits gibt?

(Quelle, Hintergrund)

Über JavaScript

Ein Nachteil von HTTP/HTML-basierten Webanwendungen ist, dass nach jeder Aktion des Benutzers eine komplette HTML-Seite neu geladen werden muss. Die Übertragung über das Netzwerk, das erneute Parsen und Rendern der Seite durch den Browser, all das braucht relativ viel Zeit. JavaScript schafft Abhilfe: Skripts können im Hintergrund mit dem Server kommunizieren und gleichzeitig die im Browser angezeigte Seite modifizieren. Das heißt dann Ajax. Alternativ kann man JavaScript so clever einsetzen wie die OpenNetworX-Plattform: Dann werden nach jeder Aktion zusätzlich zum Übertragen, Parsen und Rendern einer kompletten HTML-Seite noch zigtausend Codezeilen ausgeführt, die für ein paar Sekunden den Browser einfrieren.

(Naja. Nicht nach jeder Aktion. Aber z.B. wenn man einen Link in einem neuen Tab öffnet, was bei mir häufig vorkommt. Schade, damit ist die Plattform, eine sehr gute Idee eigentlich, für mich derzeit unbenutzbar. Bugreport ist eingereicht.)

Bei vielen Techniken ist es so, dass sie in den richtigen Händen das Leben besser machen und dem Benutzer echten Mehrwert bieten, in den falschen Händen jedoch ausschließlich Nachteile, Leid und Kummer erzeugen. Bei JavaScript ist dieser Kontrast besonders ausgeprägt. Das wurde auch schon früher so gesehen, als Ajax noch ein Reinigungsmittel war und niemand daran dachte, ganze Webanwendungen auf JavaScript zu basieren:

Doch leider gibt es andere gute Gründe, die nicht wenige Anwender dazu veranlassen, JavaScript in ihrem Browser abzuschalten. Dazu gehören vor allem die „Nervereien“ mancher Programmierhelden, die meinen, eine Web-Seite sei um so toller, je mehr sie den Anwender gängelt. Da wird dann beispielsweise mit JavaScript die Unterstützung der rechten Maustaste abgewürgt, der Anwender kann die aufgerufene Seite nicht mehr verlassen und allerlei mehr. Solche Hirngeburten kontrollgeiler Programmierer sind das eigentliche Übel und der Grund, warum JavaScript nicht bei allen Anwendern beliebt ist. Wer JavaScript einsetzt, sollte sich darüber im klaren sein und die Möglichkeiten der Sprache so einsetzen, dass der Anwender einen Mehrwert davon hat, und nicht so, dass ihm etwas genommen wird.

aus: Stefan Münz, SELFHTML

Diese Passage finde ich großartig – nicht nur, weil ihr so uneingeschränkt zuzustimmen ist, sondern auch, weil der Autor mühsam beherrscht zwischen seinem üblichen trockenen Lehrbuchstil und einer wütenden Tirade mäandert.

SPI

So so, SPI steht also für Service Provider Interface. Dass es allerdings auch für Schwarzpulverinitiative steht, mit der Mission „das Schießen mit Schwarzpulver in all seinen Facetten und vielfältigen Möglichkeiten in Deutschland wieder attraktiv zu gestalten“, andererseits auch für die Schwestern der Perpetuellen Indulgenz, hat mich beim Nachgucken kurz glauben lassen, auf einer Wikpädie-Parodie gelandet zu sein.

Eine kleine Sammlung wikipädischen Humors (für so was sind Permalinks echt gut):

Und es gibt natürlich die große, aber die, so könnte man scherzen, ist „irgendwie witzlos“.

iPhone – Mythos und Wirklichkeit

Vor fünf Monaten kaufte ich mir ein iPhone 3G und erwartete, man würde mich dafür dissen. Tat man aber nicht. Was mache ich jetzt mit der sorgsam vorbereiteten Verteidigungsschrift? Einfach ablegen:

Ein so hochgezüchtetes Handy ist nur zum Angeben. Stimmt nicht. Ich hatte den starken Wunsch, Telefon und MP3-Player immer dabei haben zu können, ohne mehr als ein Gerät zu schleppen. Wenn man dann auch noch Wert darauf legt, viel Musik in akzeptabler Qualität dabeizuhaben, hat man schon nicht mehr viel Auswahl auf dem Handymarkt. Internetfähgikeit und GPS waren mir nicht wichtig, aber auch nicht zuwider. Auf die Designer-Marke hätte ich lieber verzichtet und  z.B. das Android-Handy G1 genommen, aber für diesen Ausbund and Hässlichkeit war ich dann doch zu sehr Ästhet.

Niemand braucht ein Internet-Handy. Stimmt nicht. Ob es jetzt gut war, dass ich zum ersten Mal eine ganze Urlaubswoche lang jeden Tag meine E-Mails und Feeds gelesen und so manche Mail auch geschrieben habe, mag man sich streiten. Was ich indes nie mehr missen möchte, ist die Maps-Applikation. Meine Orientierungsfähigkeiten in fremdem Gelände sind nicht überdurchschnittlich und ein zoombarer Stadtplan, der in die Handfläche passt und – entscheidend! – einem zeigt, wo man sich befindet, ist ein wahrer Segen.

Das iPhone ist viel zu teuer. Stimmt nicht. Es kostet viel, ist aber jeden der ca. 750 € (Zuzahlung + zwei Jahre überdimensionierter Mobilfunkvertrag) wert. Wie bei Apple üblich, ist viel Geld und hektoliterweise Schweiß darein geflossen, dass die Bedienung einfach ist und das Ding verdammt noch mal einfach funktioniert. Und das ist unterwegs entscheidend. Zum Beispiel verbindet sich mein iPhone praktisch immer innerhalb von drei Sekunden mit jedem WLAN, das es schon kennt. Es funktioniert einfach. Kann das Ihr PC?

Auch das iPhone hat gravierende Mängel. Stimmt. Die Kamera des 3G fällt hinter die Qualitätsstandards des Restgeräts weit zurück, sie taugt überhaupt nichts (die des Nachfolgemodells 3G S soll besser sein). Will man also auf das Mitschleppen eines weiteren Geräts, einer eigenen Kamera, verzichten, muss man sich schon auf sehr mindere Schnappschüsse bei guter Beleuchtung beschränken. Der ganze Spuk mit der closed-source-Software ist natürlich auch ein gravierender Mangel – ich wusste schon beim Kauf, dass ich ominöse Tools und viel Nervenstärke würde einsetzen zu müssen, um das Gerät unter Linux mit Musik befüllen zu können. Hat aber geklappt. Völlig unverzeihlich ist, dass man ohne Jailbreak und hackichte Modifikationen auch keine Chance hat, in SMS-Nachrichten Wörter zu verwenden, die nicht im Wörterbuch der jeweils aktivierten Sprache stehen. Hat man solches schon vernommen?! Wer mich nur ein bisschen kennt, weiß, wie sehr das meinem Gebrauch von Sprache widerspricht.

Eclipse

Manchmal ist das API von Eclipse verblüffend einfach: Das IDocument-Interface hat eine get()-Methode, das den Inhalt eines Dokuments schlicht als String zurückgibt.

Ich hätte jetzt erwartet, dass da ein Objekt vom Typ IDocumentReader kommt. Um den zu benutzen, bräuchte man dann einen IDocumentReaderControllerAdapter, um den man den das zu dem jeweiligen IDocument gehörige IDocumentReaderControllerAdaptable-Objekt bittet, das man kriegt, wenn man das ResourcesPlugin um die DocumentUtilFactory bittet und sich von der einen geeigneten IDocumentReaderControllerAdaptableManager zusammenbauen lässt. Hierzu müsste man lediglich in einer Verzweigung testen, ob der IDocumentReader vom Anfang zusätzlich das Interface IFileDocumentReader implementiert oder nicht doch eher IBinaryResourceDocumentReader, im Weder-noch-Fall mit einer Exception aufgeben und ansonsten halt in den jeweiligen Typ casten, den man dann braucht, um den von der DocumentUtilFactory benötigten IDocumentWrapper zu konstruieren.