Sonntag, 28. April 2013

PulseAudio-Soundausgabe automatisch Umschalten

Vor einigen Jahren habe ich mir ein paar ordentlich klingende Desktop-Lautsprecher angeschafft. Die Dinger werden per USB angeschlossen und melden sich mit einer eigenen Soundkarte an. Das bietet den Vorteil, dass Soundkarte und Verstärker auf einer Platine untergebracht sind und Kabelwege zwischen Signalerzeugung und Verstärker entfallen, was wiederum der Soundqualität zugute kommt. Soviel zu den Vorteilen. Nachteilig wirkt sich allerdings aus, dass erst mit dem Einschalten der Boxen die Soundkartenanmeldung erfolgt. Das Standard-Device zur Soundausgabe ist dann schon dem internen Audio-Device auf dem Mainboard zugewiesen, weil das Audio-Device für die ausgeschalteten Lautsprecher beim Hochfahren noch nicht zur Verfügung stand. Ich müsste also jedes Mal in die Audio-Einstellungen und auf die neu aktivierte Soundkarte von den Lautsprechern umschalten. Über die Zeit haben sich verschiedene Lösungen für dieses lästige Verhalten ergeben, dass eigentlich von Seiten Ubuntus leicht zu beheben wäre. Ich meine: was will der User wohl, wenn er eine USB-Soundkarte einsteck/aktiviert?

Erste Lösung: Bash-Script das auf das nächste aktive Ausgabegerät umschaltet. Damit reduziert sich der Aufwand auf einen Klick oder Shortcut nach aktivieren der Soundkarte.

Zweite Lösung: Wenn das interne Audio-Device deaktiviert ist und somit kein valides Ausgabegerät zur Verfügung steht, wird automatisch die neu aktivierte Soundkarte zum aktiven Ausgabegerät. Früher gab es in der Oberfläche für die PulseAudio-Einstellungen die Möglichkeit Devices zu deaktivieren. Die scheint im "Alles muss minimalistisch sein"-Wahnsinn allerdings über Bord gegangen zu sein.

Dritte Lösung: Einfach ein Audio-Device anlegen, dass die Ausgabe auf alle aktiven Audio-Devices umleitet. Dies lässt sich leicht mit dem Programm paprefs unter der Registerkarte Simultane Ausgabe bewerkstelligen. Der PulseAudio-Soundserver muss allerdings neu gestartet werden, damit das Simultaneous output-Device in der Liste der Audio-Devices in der Ubuntu Audio-Konfiguration erscheint. paprefs lässt sich über die Paketverwaltung nachinstallieren.

Donnerstag, 25. April 2013

Das Ding mit dem Ring - Tastaturmodding

Gute Peripherie kann leicht zu nem Spleen werden, was bei Nerds aber ohnehin egal ist. Weit ab von Mediamarkt & Co. bekommt man Profi-Tastaturen, wie die Filco Majstouch-2, die nun ihren Weg auf meinen Schreibtisch gefunden hat.

Weil eine gute Peripherie aber nie gut genug sein kann, lässt sich da auch noch was Modden. Man bekommt bei GetDigital nicht nur die Tastatur selbst, sondern fürs Auge auch gleich ein paar Tasten in verschiedenen Farben zum Aufpeppen oder mit Pinguin um die Windows-Tasten zu ersetzen.

Mechanischen Tastaturen ist neben einem harten Anschlag auch ein gewisser Geräuschpegel zu eigen. Dagegen gibt es auch Modelle mit Soft-Landing-Pads, die sich ebenfalls nachrüsten lassen. Noch besser hat mir die Idee dieser kleinen Dämpfringe gefallen, die unter jede Taste gesteckt werden. Weil solche Ringe nicht zu bekommen sind, gibt es in den Modding-Foren die Idee mit Einmachglas-Gummi und einem Locher selbst solche Ringe herzustellen. Eine weitere Möglichkeit habe ich probiert und kurzerhand einen Beutel Dichtungsringe mit passendem Maß bestellt. Tasten raus, Ring drüber, Taste rein und fertig.

Die Ringe passen super. Wer den harten Anschlag schätzt kann es übrigens auch mit 1mm Ringen versuchen. Wichtig ist nur, dass der Durchmesser zwischen 5,0 und 5,5mm liegt, damit die Ringe nicht rutschen. Meine Tastatur ist jetzt jedenfalls genau richtig.

Samstag, 20. April 2013

E-Book- und Dokumentenmanagement mit Jeboorker

Dieses Mal gibt es aus der Reihe Java auf dem Desktop eine Software-Vorstellung in eigener Sache. Ursprünglich für eigene Zwecke gedacht hat Jeboorker inzwischen einen Entwicklungsstand erreicht, der es auch für andere nutzbar macht.

Jeboorker ist eine E-Book- oder Dokumentenmanagement-Software, deren Besonderheit darin liegt, dass es selbst keine Ordnungsstruktur vorgibt. Das ist für all diejenigen sinnvoll, die ihre E-Books und Dokumente lieber selbst in verschiedene Verzeichnisse sortieren um auch ohne Hilfsmittel jederzeit das passende/gesuchte zu finden. Jeboorker erlaubt die Verwaltung mehrerer Verzeichnis die sich einfach eintragen lassen. Die unterstützten Dokumente werden dann samt ihrer Metadaten eingelesen, so das anschließend eine gezielte Stichwortsuche nach jenen Inhalten möglich ist. Natürlich lassen sich die Dokumenten-Metadaten auch bearbeiten.

Alle eingelesenen Dokumente werden zentral in einer Listenübersicht dargestellt, die nach Dateiname und Metadaten sortierbar und durchsuchbar ist. Außerdem lässt sich die Listenübersicht nach der selbst angelegten Verzeichnisstruktur filtern so das das eigene Ordnungsprinzip nicht nur erhalten bleibt sondern gleich mitgenutzt wird.

Neben den reinen Verwaltungsfunktionen gibt es außerdem Funktionen für den Download von Buchcover aus Google-Search und Metadaten von Amazon.de und Amazon.com, wodurch deutsch- wie englischsprachige Buchinformationen auffindbar sind. Hinzu kommen einige einfache Konvertierungsfunktionen mit denen sich zum Beispiel die Bildarchivformate CBZ und CBR in das für Lesegeräte eher übliche PDF-Format überführen lassen oder umgekehrt eine PDF in ein Bildarchivformat.

Screenshot Jeboorker
Jeboorker ist Open Source und läuft am besten mit einem installierten Java 7. Downloads stehen für Debian/Ubuntu und Windows auf der Projektseite zur Verfügung.

Freitag, 12. April 2013

Java: Listen transformieren

Braucht man eine Liste vom Typ X und hat eine Liste vom Typ Y, müssen alle Werte der Liste X transformiert werden. Das kopieren und transformieren aller Werte der Liste X verbietet sich ab da, wo die Liste X sehr viele Einträge hat und vielleicht nicht einmal alle Einträge gelesen werden. Für diesen Fall ist eine elegante Lösung die, einfach eine Liste vom Zieltyp Y zu erzeugen, die die Werte aus Liste X während dessen Abfrage transformiert. So eine Liste könnte wie folgt aussehen:

import java.util.AbstractList;
import java.util.List;

/**
 * List that allows to transform it values.
 * 
 * @param <T> The target, transformed type.
 * @param <S> The source type.
 */
public abstract class TransformValueList<S, T> extends AbstractList<T> {

    List<S> list;
    
    public TransformValueList(List<S> sourceValuesList) {
        this.list = sourceValuesList;
    }
    
    public abstract T transform(S source);
    
    @Override
    public T get(int index) {
        S source = list.get(index);
        return transform(source);
    }

    @Override
    public int size() {
        return list.size();
    }

}


Der praktische Einsatz der Liste, hier mit einer Transformation von einer List<Boolean> in eine List<String>.

List<String> stringList = new TransformValueList<Boolean, String>(listWithBoolean) {

    @Override
    public String transform(Boolean source) {
        return source != null ? source.toString() : "false";
    }
    
};
Die Werte der Liste werden während der Abfrage / Iteration transformiert. Wenn die Transformation komplexer ausfällt und die Liste mehrfach abgefragt wird, sollten die Werte aus Performancegründen gecacht werden.