Montag, 22. Oktober 2012

Canonical das Root-Recht entziehen - Kommentar zum Editorial LinuxUser 11.2012

"Auf meinen Rechnern jedenfalls entziehe ich Canonical das Root-Recht, ein für allemal". So lautet der letzte Satz des Editorials von Jörg Luther, seines Zeichens Chefredakteur des LinuxUser Magazins. Das komplette Editorial kann man online im Internet nachlesen: Link. In diesem besagten Editorial schießt Herr Luther ziemlich scharf gegen Ubuntu bzw. im Detail gegen die Unity Shopping Lens und den Umgang mit Kritik seitens Canonical zur selbigen.

Ich weiß nicht, wie andere das Empfinden, aber nach meinem Empfinden neigt Herr Luther in seinen Editorialen zu übertrieben negativen und stark polarisierenden Sichtweisen. Die Editorale seines Kollegen Jan Kleinert, Chefredakteur des Linux Magazins, gefallen mir stilistisch da deutlich besser - aber das ist ein anderes Thema. Also, Herr Luther schießt scharf gegen Canonical und Mark Shuttelworth. Das ist durchaus legitim - und in Editorialen auch nicht unüblich - schließlich stellt es seine persönliche Meinung dar.

Meckern kann jeder, Konsequenzen daraus ziehen und Dinge besser machen nicht. Eine Konsequenz von Herrn Luther leitet sich aus dem letzten Satz des Editorials ab, welcher auch oben zitiert ist: Ubuntu-freie Rechner. Kontrollieren kann das der Leser so oder so nicht, aber ich glaube ihm das Mal. Nun, reicht das? Liest man das Editorial würde ich sagen: nein, reicht nicht. Schließlich wirft er Canonical mangelnden Schutz der Privatsphäre der Nutzer vor und bezeichnet das "wie" des Umgang mit Kritikern zum diesem Thema als "bodenlose Frechheit". Da wäre es doch z.B. nur konsequent, die Leser von LinuxUser zu schützen und bei zukünftigen Ausgabe keine Ubuntu-Version auf CD oder DVD beizulegen. Wer will wissentlich Software verbreiten, die die Privätsphäre untergräbt? Ich werde das dann mal beobachten. Oder vielleicht überwiegt dann doch der Kommerz-Gedanken - LinuxUser bezahlt sich ja auch nicht von selbst - und es liegt Ubuntu bei. Trotz Kritik "zieht" Ubuntu immer noch und ist ziemlich populär.

Ein bisschen blöd ist natürlich für Herrn Luther vielleicht auch, dass es im gleichen Verlag ein Magazin Names "Ubuntu User" gibt, welches allein wegen der Existenz Ubuntus Geld verdient. Na ja, vielleicht entzieht Herr Luther den Redakteuren ja das Zugangsrecht zu seinem Büro? Nein, wohl kaum. Die können ja nichts dafür, was Canonical veranstaltet. Und jeder darf ja nach wie vor "seine" Linux-Distribution wählen. Und wer Ubuntu nicht will - so wie Herr Luther - der hat bekanntlich reichlich Alternativen. Auch ohne, dass jemand Disto-Bashing betreibt.

Sonntag, 21. Oktober 2012

Upgrade auf Ubuntu 12.10

Heute morgen habe ich den 1. Rechner von Ubuntu 12.04 auf 12.10 upgegradet. Der gewählte Weg war die Softwareaktualisierung. Also erst Mal die "Neue Version" Benachrichtigung auf "alle" (statt nur LTS) umgestellt und los geht's. Gut, bei nur DSL1000 dauert der Download halt ein wenig...

Da ich nur sehr wenig zusätzliche Software außer der der Standardinstallation drauf habe - und wenn dann aus den offiziellen Quellen - lief das Upgrade auf Quantal ohne Probleme durch.

Dann kam ein immer noch spannender Moment: der 1. Start. Im GRUB2 Menü steht nur noch "Ubuntu", ohne Angabe der Kernel-Version. Nicht schlimm, mal sehen was da steht, wenn mehr als ein Kernel installiert ist. Beim Login-Bildschirm gibt's einen neuen Punkt, über den man sich auf entfernten Rechner via RDP anmelden kann. Werde ich bei Gelegenheit mal mit dem 2. Rechner testen. Wer jetzt mehr wissen möchte gibt am besten in der Suchmaschine seiner Wahl als Suchbegriff "ubuntu 12.10 remote login" ein.

Optik hat sich leicht geändert, aber das ist mir ziemlich gleich. Was direkt ins Auge fällt: zwei neue Icons im Starter. Eins für Amazon, eins für das Ubuntu One Music Store. Beides sind WebApps. Beide grundsätzlich nicht verkehrt, aber nix, was ich im Starter brauche. Also gerade gelöscht.

Als nächstes dann mal das viel und heiß diskutierte Thema angeschaut: Unity Shopping Lens. Funktioniert ;-) und sogar ziemlich flott. Was das jetzt bringen soll (mal völlig unabhängig davon, ob irgendwer dafür Geld bekommt) weiß ich nicht. Wenn ich was Suche, dann gehe ich direkt zu Amazon. Gibt ja auch eine Webapp... Na ja, da ich aber relativ wenig über Dash startet bleibt's erst Mal aktiv.

Unter Ubuntu 12.04 war Rhythmbox ja ein echtes Problemkind. Die Situation hat sich inzwischen ein bisschen geändert: Eine funktionierende Amazon Integration gibt's so oder so nicht mehr und der iPod weicht demnächsten einem Samsung Galaxy. Bleibt also nur noch das Thema CD-Rippen, welches unter 12.04 nicht funktioniert. Unter 12.10 zeigte ein 1. schneller Test, dass es funktioniert. Sehr schön.

Ansonsten ist das Systemmenü (das rechts oben über das "Zahnrad"-Symbol erreichbar ist) aufgeräumt und ist meines Erachtens besser strukturiert. Allerdings ist die Aktualisierungs-Verwaltung nicht mehr enthalten? Warum auch immer. Diese ist aber nach wie vor über das Dash erreichbar.

Alles anderen, was ich so nutze, funktioniert auch ohne Probleme (Shotwell, Emphathy).

Alles in allem würde ich sagen war das - zumindest bei mir - eines der problemlosesten Distribution-Upgades, die ich bisher mit Ubuntu gemacht habe.

Donnerstag, 4. Oktober 2012

Grafikformate online konvertieren

Aktuell hatte ich das "Problem", dass ich eine .jpg Datei nur mit einer Größe von 100x100 Pixeln bei 100 DPI hatte, sie jetzt aber größer brauchte. Wie das so ist war das Original, aus dem die kleine Datei generiert wurde, nicht mehr zu finden...

Das Bild in der Datei ist simpel: weißer Hintergrund, darauf mit schwarz und ein paar Graustufen ein Umriss gezeichnet.

Mein Plan: zuerst in eine .svg Datei konvertieren - die ist dann skalierbar - und dann wieder zurück in ein Pixel-Format.

Mit GIMP geht das nicht - jedenfalls kann GIMP aus den Quellen unter Ubuntu 12.04 kein .svg speichern. Was installieren wollte ich nicht, zumal ich dann erst mal hätte lesen müssen, welches Prog das kann. Also flux Tante Google befragt und zur Webseite http://image.online-convert.com/ gelangt. Dort kann man ziemlich viel Formate - nicht nur Grafiken - konvertieren. Online & kostenlos.

Und: hat gut funktioniert! Bei der Konvertierung von JPG -> SVG gibt's diverse Optionen wie Anzahl der Farben, Kantenglättung usw. Beim Wandeln von SVG in ein Pixelformat kann man die Zielgröße, Auflösung in DPI und ein paar andere Sachen einstellen. Alles sehr schön und einfach zu bedienen. Und nach ein paar Sekunden bekommt man das konvertierte Bild zum Download.

Wer ab und an ein Datei konvertieren muss, für den ist die Seite sicherlich ein heißer Tipp!

Montag, 1. Oktober 2012

Pennywise "All or Nothing"- Rezension

Ok, ok - das Album ist nicht mehr neu. Erschienen am 1.5.2012, also heute genau vor fünf Monaten. Gekauft habe ich es vor ca. zwei Wochen. Hätte ich vorher gewusst, wie gut das ist, hätte ich es am 1.5. schon gekauft.

Pennywise höre ich schon sehr lange, so seit Mitte der Neunziger Jahre des letzten Jahrtausends ;-) . Nur waren alle Alben nach "Staight Ahead" nach meinem Geschmack nicht mehr sooo dolle. "The Fuse" (2005) und "Reason to believe" (2008) habe ich mir gar nicht mehr gekauft. Ein Indiz dafür, dass die Luft raus war, ist auch die Trennung des Sängers Jim Lindberg von der restlichen Band 2009.

2012 kam dann das neue Album "All or Nothing" mit dem neuen Sänger Zoli Teglas, seines Zeichens auch Sänger bei Ignite. Von Ignite habe ich auch Sachen. Nicht schlecht, aber nach meinem Geschmack auch nicht der Kracher. Daher war ich skeptisch bei der neuen Pennywise.

Aber: alles Quatsch! Pennywise ist wieder da, und das richtig. Endlich wieder straighter Melodic Hardcore mit sehr gutem Gesang von Zoli, der auch anders (=besser!) als bei Ignite klingt. Passt sehr gut zusammen. Tempo-mäßig spielt Pennywise ja so wie so in der schnelleren Liga, so auch auf diesem Album. Und es gibt auch einige Stücke, die recht "catchy" sind, ohne poppige zu wirken (wie z.B. das 5. Stück namens "Let us hear your voice" - einer meiner Favoriten). Ansonsten gibt's noch schöne Singalongs und Crew-Vocals.

Fazit: Sehr gutes Punkrock / Melodic Hardcore Album. Meines Erachtens das beste, was Pennywise seit über 10 Jahren abgeliefert haben.

Bob Mould "Silver Age" - Rezension

Bob Mould ist in der Alternative Musikszene hinreichend bekannt. Als Mitglied der heutzutage legendären Band Hüsker Dü und auch als Gründer und Kopf der (sogar kommerziell erfolgreichen) Band Sugar.

Hüsker Dü existiert seit 1987 nicht mehr und Sugar seit 1995. Bob Mould war seitdem musikalisch stets aktiv. Aber, sagen wir mal so: der kreative Output war nicht immer wirklich nach dem Gusto der Liebhaber von Hüsker Dü und Sugar.

Mit dem aktuellen, heute erschienen Release ändert sich dies jedoch mit Sicherheit: "Silver Age" heißt das aktuelle Album - und das vereint das beste von Hüsker Dü und Sugar. Spielfreudiger, straighter Alternative Rock mit durchaus poppigen Einschlag. Sehr gut und abwechlungsreich - und einfach - zu hören. Im Vergleich zu Sugar ist das Songtempo durchweg etwas höher. Macht aber nichts - dadurch rockt es ein wenig mehr.

Fazit: Bob Moulds kann's also immer noch. Wer Hüsker Dü oder Sugar mag, der sollte sich diesen Release auf jeden Fall zulegen. Es lohnt sich!

Wieder den Audioplayer wechseln - Dank Amazon?

Im April diesen Jahres hatte ich hier im Blog geschrieben, dass ich aufgrund diverser Enttäuschungen mit Rhythmbox wieder zu Banshee gewechselt bin (Link zum Artikel). Nun, es steht vielleicht wieder ein Wechsel an. Wobei ich das eigentlich gar nicht will - ich mag eher Systeme, die out-of-the-box laufen.

Banshee an sich kann noch nicht mal was dafür, dass ich wechsele. Banshee an sich ist ok - macht das, was es soll. Der Grund ist  vielmehr, dass Amazon den MP3-Shop geändert hat, so dass der Download via Banshee Plugin nicht mehr funktioniert.

Bis Ende September hat das so funktioniert: Das Plugin in der Menüleiste links wählen, gewünschtes Album / Lied / ... suchen und kaufen. Dann startet der Download und die Titel sind in der Bibliothek. Schön einfach. Seit der Umstellung funktioniert das alles auch bis nach dem Kauf. Dann passiert... nix. Neu ist der Hinweis auf den "Amazon Cloud Player". Wenn man den Download dort aus Banshee heraus starten will erhält man ein lapidares Hinweisfenster, dass das Herunterladen von mehreren Dateien unter Linux nicht mehr unterstützt wird. Wohlgemerkt, nachdem man den Kauf getätigt hat. Warum der Hinweis erst dann kommt ist im Moment das Geheimnis von Amazon. Frech ist das aber schon.

Gut, die Dateien - und das Geld - sind natürlich nicht weg. Wenn man via Browser auf die Amazon-Seite geht, sich einloggt und dann den Cloud Player ansteuert, kann man die Dateien herunterladen. Aber nur einzeln. Es ist wie ein "normaler" Dateidownload. Null Integration in den Audioplayer, bzw. Banshee. Alternative Workarounds findet man auch in diesem Thread im Forum von ubuntuusers.de .

Klar ist eine Alternative zu Amazon das Ubuntu One Store. Nur: Das hat (keine mir bekannte) Integration in Banshee unter Ubuntu 12.04. Und ist nun mal schlechter bestückt als Amazon.

Also, was tun? Wieder CDs kaufen? Dauerhaft keine echte Alternative ;-) Im Moment sieht es wohl eher so aus: Rhythmbox für Einkäufe im Ubuntu One Store, Amazon "wie früher" über den Browser - und was als Audioplayer? Ein heißer Kandidat ist Quod Libet.  Nutze ich auch unter Windows (wenn ich's mal benutze) und meiner "mal schnell was Testen" Installation von Ubuntu 12.04. Oder vielleicht funktioniert Rhytmbox unter Quantal wieder ootb so, wie es funktionieren soll...

Donnerstag, 13. September 2012

U1DB

U1DB ist Canonicals neue Datenbank zum Speichern und Synchroniseren von Daten. Synchronisieren heißt hier, dass "Desktop Daten" wie z.B. Kontaktdaten aus dem E-Mail Programm oder Kalenderdaten zwischen verschiedenen Rechner - und auch einem Serverdienst wie z.B. UbuntuOne - abgeglichen werden können. Wobei U1DB an sich die API beschreibt, und nicht die Datenbank selber.

Solche Dienste gibt es aber bekanntlich bereits - wozu programmiert Canonical also an einer eigenen Lösungen (die übrigens von Anfang an OpenSource ist und unter GNU LGPL v3 Lizenz steht)? Nun, neu ist die Synchronisation unter Ubuntu nicht. Genau genommen gibt es die schon länger, U1DB ist aber der 2. Anlauf. Grund: der 1. ist zwar nicht gescheitert, wurde aber wegen Problemen aufgegeben. Die 1. Variante setzte auch CouchDB als Datenbank-Server und lokal auf Desktopcouch. Dieser Ansatz war auch komplett in die Ubuntu Desktop Installationen integriert, wurde dann aber nach dem Release von Ubuntu 11.10 als "Auslaufmodell" deklariert, weil es bei Canonical zu Skalierungsproblemen mit CouchDB kam, die sich wohl nicht lösen ließen (wer darüber mehr erfahren möchte sollte einfach "ubuntu couchdb" als Suchbegriff in die Suchmaschine seiner Wahl eingeben). Der Nachfolger, und damit 2. Anlauf, ist jetzt U1DB. In Ubuntu 12.04 LTS konnte die Lösung noch nicht intergriert werden, dazu war die Zeit zu knapp. Für den kommenden Ubuntu Release 12.10 gibt es wohl eine Intergration, jedenfalls gibt es bereits fertige Pakete in den offiziellen Quellen.

Was heißt das jetzt für den Desktop-Nutzer? Nun, erst Mal nichts, da die Synchronisation der Daten transparent erfolgt, d.h. man selber hat keinen direkten Kontakt zu U1DB. Interessanter sind da schon die Pläne von Canonical, was die Integration in andere Betriebssysteme angeht. Diese sind nämlich recht ehrgeizig. U1DB soll - früher oder später - für alle gängigen Systeme verfügbar sein, also neben Linux auch MacOS, Windows, Android, iOS und eine Web-Schnittstelle. Dazu soll U1DB in Python, C, Vala, Go, C, C#, Objective C, Java und JavaScript umgesetzt werden. Die Implementierung in Python und C läuft, der aktuelle Release (Stand: 13.9.2012) ist 0.1.3. An der Vala und Go Umsetzung wird gearbeitet, es gibt aber noch keine Releases.

Schaut man in die API und Technik von U1DB, gibt es eine Reihe von Ähnlichkeiten mit CouchDB. Die Datenbank speichert text-basierte Daten im JSON-Format (ebenso wie CouchDB) - und ist alleine darauf ausgelegt. Binäre Daten (wie z.B. Bilder, Musik etc.) können nicht gespeichert werden. Des Weiteren beherrscht U1DB Mehrwege-Replikation inklusive Konfliktmanagement zwischen Datenbanken / Servern. Ein Feature, das CouchDB ebenfalls besitzt. Scheinbar war man bei Canonical mit der Funktionalität von CouchDB zufrieden und hat sich an diese angelehnt, wobei es keinerlei Kompatibilität gibt.

Als Speicher setzt U1DB lokal auf den meisten Plattformen auf die SQLite Datenbank. Was in sofern auch Sinn macht, als das Python, Android und iOS diese direkt mit an Bord haben. Auf der Projektseite wird aber betont, dass auch andere Datenbanken als Backend möglich sind. Die Go-Implementierung soll z.B. auf MongoDB setzen und auch über das Internet zugängliche U1DB-Server werden wohl eher auf MySQL und andere skalierbare Datenbanken setzen als auf SQLite.

Wie bereits erwähnt ist bisher "nur" die Python-Implementierung (mit in C geschriebenen Teilen fertig). Dies ist auch die Referenz-Implementierung. Wer sich also mit der API beschäftigen möchte, der sollte darauf zurück greifen. Das Python-Modul heißt einfach "u1db" und lässt sich auf bekanntem Wege via pip oder easy_install installieren. Übrigens ist U1DB für Python-Programmierer auch außerhalb von Ubuntu interessant, wenn eine einfache API zur persistenten Speicherung und Indizierung von JSON-Daten gesucht wird.

Zurück zu Ubuntu: U1DB wird unter Ubuntu sicherlich der kommende Standard zur Synchronisation von Daten. Wie gesagt, für den Nutzer transparent. Da sich U1DB noch in einem frühen Entwicklungsstadium befindet ist im Moment offen, wenn die API als stabil deklariert wird und die volle Integration in den Desktop abgeschlossen ist.

Sonntag, 2. September 2012

Redis und Python

Redis ist ein sehr schnelles Key-Value Store, zu Deutsch: Schlüssel-Werte Datenbank. Eine Besonderheit von Redis ist zusätzlich, dass es als Werte nicht nur einfache Strings kennt, sondern fünf verschiedenen Datentypen. Da die offizielle Dokumentation von Redis ganz hervorragend ist und auch in der September-Ausgabe von FreiesMagazin ein ausführlicher Artikel zu Redis vorhanden ist, wird an dieser Stelle auf eine weitere Beschreibung der Datenbank verzichtet und "nur" die Python-Anbindung näher beschrieben. In der Python-Welt erfreut sich Redis übrigens scheinbar recht großer Beliebtheit. Wird auf der Webseite des Python Package Index "redis" als Suchbegriff eingegeben, wird eine ziemliche lange Ergebnisliste angezeigt. So gibt es z.B. Anbindungen für Django, Flask und Celery an Redis sowie eine Vielzahl anderer Module, die Python auf die ein oder andere Weise mit Redis kombinieren.

Installation

Das empfohlene Python-Modul heißt einfach nur "redis" und lässt sich ganz einfach via pip oder easy_install installieren. Die die Ergebnisse der Abfragen des Redis-Servers werden von einem in Python implementierten Parser verarbeitet - was ohne Probleme funktioniert, aber nicht ultimativ schnell ist. Wer die volle Geschwindigkeit braucht, der installiert noch das Modul "hiredis" (via pip oder easy_install). So wird der in C geschriebene Parser inklusive Python-Bindings installiert. Die Entwickler nennen eine Geschwindigkeitssteigerung um das 10-fache, im Vergleich zum Python-Parser.

Mit dem Server verbinden

Das Verbinden mit einem laufenden Server ist einfach:

>>> r = redis.StrictRedis(host='localhost',port=6379,db=0)

Im Gegensatz zur z.B. Kommandozeile von Redis muss hier eine Datenbanknummer angegeben werden. Das Python-Modul erlaubt es übrigens nicht, die Datenbank im laufenden Betrieb zu wechseln (was z.B. via Redis Kommandozeile problemlos geht), weil die Datenbankverbindung dann nicht mehr "thread-safe" wäre. Wer also mehrere Datenbanken für sein Programm benötigt, der muss mehrere Instanzen von redis.StrictRedis(...) anlegen.

Connection Pooling

Im Hintergrund legt redis.StrictRedis(...) für jede neu Instanz einen neuen, eigenen Connection Pool an. Was je nach Anwendung aber gar nicht nötig ist. Aber es ist auch möglich, dass sich mehrere Instanzen einen Connection Pool teilen:

>>> pool = redis.ConnectionPool(host='localhost', port=6379, db=0)
>>> r = redis.Redis(connection_pool=pool)

Auch hier gilt: Ein Wechsel der Datenbank innerhalb eines Connection Pools ist nicht möglich bzw. - andersherum - ein Connection Pool kann immer nur für eine Datenbank gelten.

Datentypen

Natürlich unterstützt das Python-Modul allen Datentypen voll. Dabei werden so gut wie alle Befehle von Redis 1:1 in Python umgesetzt, so dass die Redis Befehlsreferenz bei Fragen zu Rate gezogen werden kann. Im folgenden ein paar einfache Beispiele zur Nutzung der Datentypen aus Python heraus: Strings sind der einfachste Datentyp:
>>> r.set('foo','bar')
True
>>> r.get('foo')
'bar'

Und ein paar Beispiele zu Listen in Redis:
>>> r.lpush('liste','foo')
1L
>>> r.lpush('liste','bar')
2L
>>> r.lrange('liste',0,-1)
['bar', 'foo']

Hashs lassen sich mit den bekannten Befehlen generieren:
>>> r.hset('hash','foo','bar')
1L
>>> r.hset('hash','spam','egg')
1L

Werden alle Werte innerhalb eines Hashs abgefragt, dann wird ein Python Dictionary zurück geliefert:
>>> r.hgetall('hash')
{'foo': 'bar', 'spam': 'egg'}

bei Einzelwerten logischerweise ein String:
>>> r.hget('hash','foo')
'bar'

Hashs lassen sich auch direkt aus einem Python Dictionary generieren:
>>> my_dict = {'Rhythmbox':'Audio','Totem':'Video'}
>>> r.hmset('progs',my_dict)
>>> r.hmget('progs','Rhythmbox','Totem')
['Audio', 'Video']

Anlegen eines Redis-Sets aus Python heraus:
>>> r.sadd('set','foo')
1
>>> r.sadd('set','bar')
1

Wird versucht, einen bereits vorhanden Wert zu einem Redis-Set hinzuzufügen, dann liefert die Datenbank einfach "0" (für "False") zurück:
>>> r.sadd('set','bar')
0
Werden alle Werte aus einem Redis-Set abgefragt, wird als Ergebnis ein Python-Set zurück geliefert:
>>> r.smembers('set')
set(['foo', 'bar'])
Ordered Sets werden wie folgt in Redis via Python angelegt:
>>> r.zadd('orderset',10,'bar')
1
>>> r.zadd('orderset',5,'foo')
1
Oder alternativ auch:
>>> r.zadd('orderset',spam=1.0,egg=2.0)
2
Die als Ergebnis einer Abfrage eines Ordered Sets wird entweder eine Liste von Strings oder eine Liste von Tuplen geliefert. Je nach dem, ob die Gewichtung der Werte mit abgefragt wird oder nicht:

>>> r.zrange('orderset',0,-1,withscores=True)
[('spam', 1.0), ('egg', 2.0), ('foo', 5.0), ('bar', 10.0)]
>>> r.zrange('orderset',0,-1,withscores=True,desc=True)
[('bar', 10.0), ('foo', 5.0), ('egg', 2.0), ('spam', 1.0)]

Transaktionen

Das Python Modul unterstützt auch das Zusammenfassen von mehreren Befehlen zu einer atomaren Transaktion. Allerdings setzt das Modul nicht die Redis-Befehle multi und exec um, sondern geht den Weg über Pipelines:

>>> pipe = r.pipeline()
>>> pipe.set('counter',1)
<redis.client.StrictPipeline object at 0x18cfb10>
>>> pipe.set('wort','irgendwas')
<redis.client.StrictPipeline object at 0x18cfb10>
>>> pipe.incr('counter')
<redis.client.StrictPipeline object at 0x18cfb10>
>>> pipe.execute()
[True, True, 2]

Alle Befehle werden also gepuffert und erst nach dem Aufruf von pipe.execute() im Block atomar ausgeführt. Das Ergebnis der Ausführung der einzelnen Befehle wird als Liste zurück geliefert.

Weitere Dokumentation

Hier im Blogeintrag wurden zwar die meisten, aber nicht alle Möglichkeiten des Python Redis-Moduls gezeigt. Diese sind aber natürlich in der Dokumentation aufgeführt.

Redis und ORM

Zu guter Letzt sei noch erwähnt, dass es auch auch eine Reihe von Object Relational Mapperns (ORM) für Python und Redis gibt. Diese tragen aber teilweise noch eine relativ niedrige Versionsnummer. Weiter entwickelt - wenn auch noch im Beta-Stadium - scheint Redisco zu sein. Andere ORMs bringt eine Suche im Python Package Index hervor. 

Alle Beispiele hier im Blogartikel sind unter Ubuntu 12.04, Python 2.7, redis-py 2.6.2 und dem Redis Server 2.4.16 getestet.

Dienstag, 17. Juli 2012

OFF! "OFF"!" - Rezension

Vor nicht all zu langer Zeit ist das erste "full length" Album von OFF! erscheinen. Der Einfachheit halber lautet der Albumtitel genau so wie der Name der Band, also OFF!.

OFF! ist eine kalifornische Punkrock-Band rund um Keith Morris , seines Zeichens Gründungsmitglied von Black Flag und Sänger der Circle Jerks. Ein Urgestein der Punkrock-Szene also.

Apropos Black Flag: Soundmäßig liegt OFF! ziemlich nah an den frühen Black Flag, ohne aber wie eine Kopie zu klingen. Die Band schafft es dabei, den Punksound der frühen 80er (des letzten Jahrhunderts) in die Gegenwart zu transportieren und dabei frisch und up-to-date zu klingen. Wer also Black Flag oder generell kalifornischen "old school" Punkrock mag, der liegt mit OFF! auf jeden Fall richtig.

Noch ein Wort zum Thema "full length" Album: Punkrock (und Hardcore) Alben zeichnen sich ja selten durch episch lange Lieder aus. Manch einer legt sogar die Länge (oder besser: Kürze) der Songs als Qualitätsmaßstab an. Und hier liegt OFF! auf jeden Fall auch ganz weit vorne: 16 Titel, der kürzeste 41 s, der längste satte 1.36 min. Gesamtspielzeit etwas weniger als 16 Minuten. 16 sehr gute Minuten.

Mittwoch, 6. Juni 2012

Ubuntu Softwarecenter und die Suchfunktion

Das die Suchfunktion für Programme (und Paketen) im Softwarecenter von Ubuntu "bescheiden" ist, habe ich schon öfters in Blogeinträgen erwähnt.

Nun, ich möchte mich korrigieren: Die Suchfunktion ist schlecht. Schlecht in sofern, dass die Treffer für Suchbegriffe Ergebnisse liefern, welche schlichtweg nicht die Pakete bzw. Programme enthalten, die man eigentlich erwartet oder erwarten würde.

Dazu ein aktuelles Beispiel aus jüngster Erfahrung: Ich wollte unter Ubuntu 12.04 Precise Prolog installieren (nein, ich kann kein Prolog, ich wollte lediglich ein Prolog-Programm testen, welches ich in einem Buch gesehen hatte). Gibt man nun im Softwarecenter den Suchbegriff "Prolog" ein, erhält man zwei Treffer: Einen Editor namens "jedit" und für ein 2D-Zeichenprogramm namens "TGif" (was immer das mit Prolog zu tun hat...). Weit und breit kein Prolog-Compiler zu sehen... Gut, es könnte natürlich sein, dass es kein Prolog für Precise gibt, was aber aufgrund der Paketvielfalt unter Ubuntu relativ unwahrscheinlich ist. Außerdem ist Prolog ein etablierte Programmiersprache und sollte von daher vorhanden sein.

Nun ist mein Wissen um Prolog relativ klein. Ich weiß, dass es verschiedene Prolog-Compiler gibt, mehr aber nicht. Also habe ich die Paketsuche von packages.ubuntu.com besucht und hier auch den Suchbegriff "Prolog" eingeben. Erster Treffer: Das Paket "gprolog", welches den GNU Prolog Compiler enthält. Gibt man den Suchbegriff in Synaptic ein, findet man neben gprolog auch noch einen anderen Prolog-Compiler. Gibt man übrigens "GNU Prolog" als Suchbegriff im Softwarecenter ein, dann findet es auch den gleichnamige Compiler - was aber im Umkehrschluss für eine erfolgreiche Suche voraussetzt, dass der Suchende weiß, dass es GNU Prolog gibt.

Aber warum klappt das mit der Suche denn nicht im Softwarecenter? Ich habe ja überhaupt kein Problem damit, dass Canonical das Softwarecenter auch als Vertriebsplattform für kommerzielle Software und ähnliches nutzt und die Startansicht des Softwarecenters Werbung dafür enthält. Nur: Solange hier keine brauchbaren Ergebnisse für (triviale) Suchanfragen nach "normalen" Programmen geliefert werden, ist das Softwarecenter für mich kein vernünftiger Ersatz für andere grafische Paketmanager wie Synaptic & Co.