Monthly Archives: March 2011

Mehr Liebe für Exaile

Das ständige Aufrufen meines Last.fm-Profils im Browser um ein Stück meinen Lieblingen hinzuzufügen nervte mich schon lange und eine Integration dieser Funktion in Exaile lag auf der Hand. Geplant hatte ich dies schon seit langer Zeit und vergangenes Wochenende befasste ich mich nun damit. Heraus kam das Plugin Last.fm Lieblinge:

Exaile-Wiedergabeliste mit Plugin-Integration als Spalte und im Kontextmenü

Integration in Exailes Wiedergabelisten

Durch die hervorragende Dokumentation der Last.fm-API waren mir bereits die API-Aufrufe track.love und track.unlove bekannt. Allerdings grübelte ich lange darüber nach, wie ich den derzeitigen Lieblings-Status eines Stücks abfragen könnte. Aus früheren Experimenten meinte ich mich zu erinnern, dass track.getInfo unter anderem einen Eintrag dafür lieferte. Dem ist allerdings nicht so und nach einem kurzen Besuch in #audioscrobbler wurde mir nahe gelegt, den Aufruf user.getLovedTracks zu nutzen. Eingangs scheute ich noch die Iteration über alle Stücke in dieser Liste, da die lokalen Tag-Informationen ja durchaus von denen auf Last.fm aufgrund automatischer Korrekturen abweichen können. Schnell wurde jedoch klar, dass dies der einzig gangbare Weg ist, da es 1. sowieso keine andere Möglichkeit gibt, den Status abzufragen und 2. ein einmaliges Abrufen aller Lieblings-Stücke deutlich weniger Datenverkehr verursacht als eine ständige Abfrage pro Stück.

Nachdem dies geklärt war ging es an den zweiten wichtigen Aspekt: Schreibzugriffe auf Profile. Die Aufrufe track.love und track.unlove erfordern wie zu erwarten ist Schreibzugriff auf das Profil des jeweiligen Nutzers. Ein Einbetten meines persönlichen API-Schlüssels und Geheimnisses stand außer Frage; hierdurch hätte  jeder Schreibrechte auf die Profile aller Nutzer, die diesen Zugriff auf ihr Profil erlaubt hätten. Mehr als ein Kopieren des API-Schlüssels und Geheimnisses aus dem Quellcode des Plugins wäre hierfür nicht notwendig gewesen.

Aus diesem Grund entschied ich mich für das einzig Logische: jeder Nutzer müsste dem Plugin zur Nutzung seinen ganz persönlichen  API-Schlüssel und das zugehörige Geheimnis mitteilen. Damit obliegt dem Nutzer weiterhin die Entscheidung, ob Exaile auf sein Profil zugreifen darf und die erforderlichen Authentifizierungsdaten bleiben privat. Grafisch sieht das ganze daher nun so aus:

Dialog mit Einstellungen des Plugins Last.fm Lieblinge

Einstellungsdialog

Ein Klick auf die Schaltfläche „Zugriffsgenehmigung anfragen“ öffnet die Seite zum Verbinden von Apps auf Last.fm im Browser.

Bei der Umsetzung habe ich besonders Wert auf Multithreading gelegt, denn nichts nervt mehr als eine Anwendung, die nicht mehr reagiert, weil sie irgendetwas Aufwändiges im Hintergrund macht. Die Integration in Exailes grafische Oberfläche gestaltete sich dank des bereits vorhandenen Providers-Frameworks simpel. Der zum Umschalten des Lieblings-Status verwendete CellRendererToggleImage ist gekapselt und andernorts uneingeschränkt nutzbar. Die Kommunikation mit Last.fm (und in Zukunft auch Libre.fm, sollte dieser Dienst die AudioScrobbler 2.0 API implementieren) findet durch die wunderbare pylast-Bibliothek statt. Praktisch alle API-Aufrufe werden von dieser gekapselt und komfortabel zur Verfügung gestellt. Lediglich den track.unlove-Aufruf musste ich manuell hinzufügen.

Nunmehr genügt ein einzelner Klick auf das Herz-Symbol in der durch das Plugin hinzugefügten Spalte für Wiedergabelisten oder wahlweise der passende Eintrag im Kontextmenü von Stücken um diese als Lieblinge zu markieren oder diese Markierung zu entfernen. Für Letzteres hatte ich bisher allerdings noch keinen Bedarf.

Die Integration der Lieblingsstücke als benutzerdefinierte oder dynamische Wiedergabeliste ist schon vorgesehen. Langfristig ist übrigens auch geplant, dieses und alle anderen AudioScrobbler-bezogenen Plugins zu vereinen. Bis dahin gibt es noch viele interessante Funktionen, die es zu integrieren heißt.

9,0

Wenn Autos, Flugzeuge und Frachtcontainer wie Spielzeug durch die Gegend gespült werden, lassen sich die Urgewalten erahnen, unter denen Japan momentan zu leiden hat. Mit eine unfassbaren Wucht erschütterte am Freitag (Ortszeit) erst ein Beben mit einer Stärke von 9,0 auf der Richterskala das Land und verursachte in Folge riesige Tsunamis. Diese schoben dicke, dunkle Wassermassen ins Landesinnere und rissen buchstäblich alles mit sich. Wer sich nicht rechtzeitig retten konnte hatte keine Chance.

Zuallererst informiert wurden meine Freundin und ich durch das Radio. Per E-Mail wurde meine Freundin dann von ihrer Familie kontaktiert, woraufhin wir einen Videoanruf per Skype tätigten. Die Verbindung war sehr gut und wir konnten uns schnell vergewissern, dass ihrer Familie nichts geschehen war. Allgemein erweisen sich momentan Netzwerke im Internet wie Facebook und Twitter als Informations- und Kommunikationsmedium Nummer 1, nachdem die Telefonnetze zusammengebrochen sind. Die Familie meiner Freundin ist jedenfalls wohlauf und mit dem Schrecken davon gekommen. Regale ließen sich schnell wieder einräumen, der Mangel an Gas und warmen Wasser machte sich da schon eher negativ bemerkbar. Angesichts der Leiden in anderen Regionen Japans sind diese Probleme jedoch marginal.

Bei meinem damaligen Aufenthalt in Japan wurde ich zwei Mal Zeuge der in Japan nicht unüblichen Beben. Jedoch nur eines davon bemerkte ich auch, wobei es sich zudem auf ein minimales Zittern beschränkte. Mit dem aktuellen Geschehen in Japan ist dies jedoch nicht zu vergleichen. Dennoch kann ich nachvollziehen, mit welcher Hilflosigkeit die Bevölkerung einer solchen Katastrophe gegenüber stehen muss. Jeglicher Vorbereitung durch bauliche und erzieherische Maßnahmen steht am Ende doch immer die Ungewissheit gegenüber, wann und in welchem Ausmaß das nächste Beben auftreten wird.

Vorher gesehen werden konnte das Beben vom Freitag offenbar nicht, da ansonsten frühzeitig Evakuierungen und das Herunterfahren der Atomkraftwerke eingeleitet hätte werden können. Dass das Kraftwerk in Fukushima kurz vor seiner planmäßigen Schließung nach 40 Jahren Betriebszeit (30 Jahre halten Experten für vertretbar) einem solchen Unglück zum Opfer fällt ist ein trauriger Zufall. Dass das Kraftwerk nur für ein Beben der Stärke 7,9 entworfen wurde jedoch nicht. Angesichts dieser Ereignisse sollte sowohl Japan als auch Deutschland erneut den Ausstieg aus dem Atomprogramm überdenken. Eine solche nicht abschätzbare Gefahr sollte meiner Meinung nach besser gestern als heute aus der Welt geschafft werden.

Ob es in Fukushima noch zu einer Kernschmelze kommt bzw. schon gekommen ist, kann momentan noch nicht eindeutig gesagt werden. Langfristige Schäden durch entwichene Radioaktivität sind jedoch bereits jetzt absehbar. Dass die japanische Regierung nicht von dem Vorfall in Tschernobyl gelernt haben und statt dessen erpicht sind, Informationen zu diesem Vorfall und dem aktuellen Stand der Dinge nur spärlich durchsickern zu lassen, macht mich fassungslos. Dies ist nicht der richtige Zeitpunkt um den Stolz und die Unangreifbarkeit der japanischen Nation in der Welt deutlich zu machen. Jede Hilfe zählt, kann aber nur sinnvoll geleistet werden wenn ersichtlich ist, wo und in welchem Umfang sie nötig ist.

Meine Gedanken sind bei den Opfern in Japan und ich zolle Helfern aus aller Welt tiefsten Respekt.

Geliebte Einzeiler

Da mich das lautstarke Knarzen meiner Logitech MX518 beim Scrollen schon lange störte und auch die Oberfläche dieser nicht mehr wirklich angenehm war, gönnte ich mir nach langer Zeit einmal etwas Neues. Nach kurzer Suche fiel meine Wahl auf die Logitech M500:

Damit kann ich nun endlich laut- und scheinbar endlos scrollen. Die Kippfunktion des Mausrads ist allerdings nicht ganz glücklich geraten; bei einem Mittelklick löst man viel zu leicht die Vor/Zurück-Funktionalität aus. Das fehlen der Tasten zum Umstellen der Auflösung im Vergleich zur MX518 kann ich verschmerzen, da ich diese sowieso nie wirklich genutzt habe. Nichtsdestotrotz wünschte ich mir bei meiner neuen Maus eine höhere Auflösung; die augenscheinlich standardmäßigen 400 CPI sind mir zu wenig.

Von früheren Versuchen war mir noch das Werkzeug Lomoco bekannt, welches ebenso die Möglichkeit bietet, die Auflösung sowie einige anderen Parameter von Logitech-Mäusen anzupassen. Der Versuch sollte allerdings erst einmal fehlschlagen:

$ lomoco --1200
002.018: 046d:c069 Unsupported Logitech device: Unknown

Da hieß es nicht verzagen sondern Quellen laden. Die schließlich notwendige Anpassung erwies sich als einer der heißgeliebten Einzeiler:

--- src/lomoco.c    2011-03-05 22:06:12.000000000 +0100
+++ src/lomoco.c    2011-03-05 22:07:23.000000000 +0100
@@ -47,6 +47,7 @@
 {0xc025, "MX500 Optical Mouse",                        "M-BP81A",     0, 1, 1, 1, 0},
 {0xc031, "iFeel Mouse (silver)",                       "M-UT58A",     0, 1, 0, 0, 0},
 {0xc041, "G5 Laser Gaming Mouse",                      "M-UAC113",    0, 1, 0, 1, 0},
+    {0xc069, "M500 Laser Mouse",                           "M-500",       0, 1, 1, 0, 0},
 {0xc501, "Mouse Receiver",                             "C-BA4-MSE",   1, 0, 0, 0, 0},
 {0xc502, "Dual Receiver",                              "C-UA3-DUAL",  1, 0, 0, 0, 1},
 {0xc503, "Receiver for MX900 Receiver",                "C-UJ16A",     1, 0, 0, 1, 0},

Der Quellcode selbst dokumentierte in einfacher Form, wie man an die nötigen Angaben gelangen kann. (In diesem Fall der Inhalt von /proc/bus/input/devices)

Und damit kann ich nun meine neue Maus per Lomoco konfigurieren. Um das ganze festzuhalten erstellte ich auch gleich einen Report für das Lomoco-Debian-Paket.