« Archives in November, 2010

Kleines Bugfix für Desktop Art (Plugin für Rhythmbox)

Hi @all,

ich hab heute mal wieder das Plugin Desktop Art für Ryhtmbox von mathias nedrebø ausprobiert.

So sieht Desktop Art aus!

Dabei fiel mir ein Bug auf: Wenn ihr in den ID3 Tags den Albumartist gesetzt hat, speichert Rhythmbox das Cover als <Albumartist> – <Albumname>.<Type> ab. Desktop Art kennt aber nur <Artist> – <Albumname>.<Type>. Somit findet er diese Cover dann niemals.

Schnell gefixt:

Die Methoden get_cover(self, db_entry=None) und get_song_info(self, db_entry=None)

der Datei /home/$USER/.gnome2/rhythmbox/plugins/desktop-art/CoverManager.py im original:

    def get_cover(self, db_entry=None):
        # Find cover in music dir
        if db_entry:
            cover_dir = path.dirname(url2pathname(db_entry.get_playback_uri()).replace('file://', ''))
            if path.isdir(cover_dir):
                for f in listdir(cover_dir):
                    file_name = path.join(cover_dir, f)
                    mt = mimetypes.guess_type(file_name)[0]
                    if mt and mt.startswith('image/'):
                        if path.splitext(f)[0].lower() in IMAGE_NAMES:
                            return file_name

            # Find cover saved by artdisplay plugin
            song_info = self.get_song_info(db_entry)
            for rb_cover_path in ('~/.gnome2/rhythmbox/covers', '~/.cache/rhythmbox/covers/'):
                for file_type in ('jpg', 'png', 'jpeg', 'gif', 'svg'):
                    cover_file = path.join(path.expanduser(rb_cover_path),
                                           '%s - %s.%s' %
                                           (song_info['artist'],
                                            song_info['album'],
                                            file_type))
                    if path.isfile(cover_file):
                        return cover_file

    def get_song_info(self, db_entry=None):
        song_info = {}
        if db_entry:
            song_info['title'] = self.db.entry_get(db_entry, rhythmdb.PROP_TITLE)
            song_info['artist'] = self.db.entry_get(db_entry, rhythmdb.PROP_ARTIST)
            song_info['album'] = self.db.entry_get(db_entry, rhythmdb.PROP_ALBUM)
        return song_info

Und hier die gefixte Version:

    def get_cover(self, db_entry=None):
        # Find cover in music dir
        if db_entry:
            cover_dir = path.dirname(url2pathname(db_entry.get_playback_uri()).replace('file://', ''))
            if path.isdir(cover_dir):
                for f in listdir(cover_dir):
                    file_name = path.join(cover_dir, f)
                    mt = mimetypes.guess_type(file_name)[0]
                    if mt and mt.startswith('image/'):
                        if path.splitext(f)[0].lower() in IMAGE_NAMES:
                            return file_name

            # Find cover saved by artdisplay plugin
            song_info = self.get_song_info(db_entry)
            for rb_cover_path in ('~/.gnome2/rhythmbox/covers', '~/.cache/rhythmbox/covers/'):
                for file_type in ('jpg', 'png', 'jpeg', 'gif', 'svg'):
                    cover_file = path.join(path.expanduser(rb_cover_path),
                                           '%s - %s.%s' %
                                           (song_info['artist'],
                                            song_info['album'],
                                            file_type))
                    cover_file2 = path.join(path.expanduser(rb_cover_path),
                                           '%s - %s.%s' %
                                           (song_info['albumartist'],
                                            song_info['album'],
                                            file_type))
                    if path.isfile(cover_file):
                        return cover_file
                    if path.isfile(cover_file2):
                        return cover_file2

            # No cover found
            return DesktopControl.UNKNOWN_COVER
        # Not playing
        return None

    def get_song_info(self, db_entry=None):
        song_info = {}
        if db_entry:
            song_info['title'] = self.db.entry_get(db_entry, rhythmdb.PROP_TITLE)
            song_info['artist'] = self.db.entry_get(db_entry, rhythmdb.PROP_ARTIST)
            song_info['albumartist'] = self.db.entry_get(db_entry, rhythmdb.PROP_ALBUM_ARTIST)
            song_info['album'] = self.db.entry_get(db_entry, rhythmdb.PROP_ALBUM)
        return song_info

Blöd ist natürlich immernoch, dass man ungehörte Mp3s zweimal starten muss damit das Cover erscheint – da Rhythmbox beim ersten Mal das Cover erstmal in den Cover Ordner kopiert.

Hier hab ich Datei nochmal zum Download.

Zur Installation in den Ordner /home/$USER/.gnome2/rhythmbox/plugins/desktop-art/ wechseln

und dort die Datei CoverManager.py ersetzen und die CoverManager.pyc löschen. Rhytmbox neustarten (manchmal auch 2 Mal nötig!).

Vllt. hilft das hier ja jemand :)

Achja, falls jemand weiß wie man den Ersteller (mathias nedrebø) darüber informiert lasst es mich wissen – auf seiner HP ist keine Kontaktmöglichkeit vorhanden!

Falls jemand Probleme hat das Plugin zu aktivieren, unter Ubuntu 10.10 hat es folgende Abhängigkeiten:

python-rsvg und python-gnomedesktop (ehemals gnome-python-desktop)

 sudo apt-get install python-rsvg python-gnomedesktop

(Und Python > 2.5, aber Python 2.6 ist bei Ubuntu normal ja dabei!)

Minecraft Epicfail: Never play with fire if you have a wooden home…

Vor einigen Tagen fing ich eine neue Minecraft Welt an, wegen dem neuen Weltengenerator der jetzt auch verschiedene Klimazonen generierte. Ich fand 3 Riesenbäume, welche mich dazu einluden ein sehr großes Baumhaus darauf zu errichten. Nachdem ich sogar eine Cave inkl. Spawner gefunden hatte (zum späteren erkunden schon markiert hatte) und alle Materialien zum vollständigen Ausbau beisammen hatte, began ich den Boden zu legen.

Ich war größtenteils fertig, als ich auf die Idee kam eine Feuerstelle zu integrieren. Bisher hatte ich immer Stein/Glasbauten .. da war das kein Thema. Bei Holzbauten muss man da aber vorsichtig sein – ich wusste das. Also ein die Feuerstelle mit Cobblestone umzingelt und 2 Blöcke Hölzer rein.Was dann in etwa so aussah (nur ohne Baumhaus – warum kommt gleich):

Hässliche Feuerstelle

sieht kacke aus – ganz klar. Also wollte ich sie erweitern.. (bis hierhin war noch alle “safe”.)

Ausbau der Feuerstelle

2 Steine zuviel weg gemacht ..

Noch nicht mal das Holz für die neuen Umrandungssteine weg gemacht und schon kam der Fail…

Stellt man sich jetzt das ganze in einem riesigen Baumhaus vor (ich hab leider kein Screenshot davon – hatte auch nicht vor es abzufackeln) .. dann passiert folgendes:

(Im 6. Bild sieht man übrigens die Feuerstelle…)

Hier noch zwei Bilder von einem kleinen Glasturm den ich kurz gebaut hatte… (das Baumhaus stand übrigens in einem Wald – Reste sind zu erkennen!)

Als es begann dachte ich noch, ich könnte das Holz weghacken um einen Übergang auf den Hauptteil meines Baumhauses zu verhindern … dann fiel mir ein, dass um mein Baumhaus herum ja Blätter sind …

und ich weiß wie gut Blätter brennen, ich gehe so immer “roden”. (Stämme abholzen, Blätter anzünden, die brauchen sonst ewig bis sie weg sind -> sieht schei**e aus.).

Ich konnte noch einige meiner Sachen aus meinen Kisten retten…

Daraus baute ich mir den Glasturm für die Draufsicht der letzten beiden Bilder .. und einen um den Rest aus einer meiner Kisten zu holen – die verbrennen ja garnicht?

Die Glaswände und ein erster Teil des Glasdaches stehen noch…

Ich hab es dann gelassen das Zeug zu holen – ich werde eine neue Welt anfangen, eine in der kein Mahnmal des Feuers steht….

Edit: Bald kommt eine neue Welt!

Netbooknews.de haut wieder Gewinne raus!


Sascha von Netbooknews.de haut wieder Gewinne raus,
dieses Mal ein Lenovo Ideapad U160 sowie eine 128 GB SSD!

Wie ihr gewinnen könnt und alles weitere findet ihr unter:
http://www.netbooknews.de/25462/gewinnspiel-lenovo-ideapad-u160-mit-core-i5-fuer-leser-und-128gb-ssd-fuer-blogger/

Viel Glück!

Thunderbird Alert “Unable to find specified executable”

Wenn ihr, wie ich, das Problem habt, dass Thunderbird beim öffnen sobald neue Mails da sind immer den Alert “Unable to find specified executable” bringt, liegt das daran, dass libnotify fehlt.

Einfach sudo apt-get install libnotify-bin und das Problem ist Geschichte.

Quelle: http://getsatisfaction.com/mozilla_messaging/topics/unable_to_find_specified_executable

Annoying JDownloader “existing jD instance found!”

Viele kennen den Fehler “existing jD instance found!” den der JD manchmal aus dubiosen Gründen (unter Linux!) bringt,
einfach aus langeweile, obwohl keine (!!) java/jd Instanz mehr offen ist, selbst nach einem Reboot geht es nicht mehr.

Bisher half nur eine erneute Installation und das zurück-kopieren des Backups, da die Devs vom JD als einzigen Hinweis geben, dass man alle Java Instanzen beenden soll.

Jetzt die richtige Lösung: Löscht den Ordner .junique in $HOME/.jdownloader, dort lockt jdownloader seinen Prozess und unter manchen Umständen kann es wohl sein dass dies unter Linux o.g. Probleme auslöst weil er nicht mehr richtig unlocked wird oder sonstiges.

Wirklich nervig…

Conky Anzeige für verfügbare Updates mit apt-get anstatt aptitude

Da bei Ubuntu 10.10 ja kein aptitude mehr dabei ist (kann aber nachinstalliert werden) und man natürlich nichts unnötig installieren will, hat man ein Problem sobald man sich mit Conky die Anzahl der verfügbaren Updates anzeigen lässt.

Bisher machte man das so (Quelle):
${execi 1800 aptitude search "~U" | wc -l} Updates

Jetzt muss man es eben so machen (oder aptitude nachinstallieren – aber nur für conky irgendwie auch doof..):
${execi 1800 apt-get --just-print upgrade | grep -o ^"[0-9]* aktualisiert," | awk '{print $1}'} Updates

Danke an Noqqe.de!

Edit: Grep raus, war natürlich quatsch! Danke nochmals an Nogge!
Edit2: So gehts auch nicht und ist quatsch, zeigt mir bei aktuell 15 verfügb. Updates 43 an.
Das liegt an Zeilen wie “Conf libasound2 (1.0.23-1ubuntu2.1 Ubuntu:10.10/maverick-updates [amd64])” bei der Ausgabe von apt-get –just-print upgrade. Hab es nochmal korrigiert, nun sollte es tun!