Mit BlueALSA Bluetooth-Headset unter ALSA ansprechen
Mit bluez5 wurde die direkte Unterstützung für Audiogeräte herausgeschmissen. Stattdessen müsse man Pulseaudio nutzen. Auf meinem Laptop habe ich das sogar gemacht, da dort Ubuntu ohne weitere Modifikationen läuft, aber es funktionierte nicht gut. Auf meinem Hauptsystem läuft einfach nur ALSA, und angesichts der konstanten Problemen mit Pulseaudio wird sich das auch nicht ändern. Und hier springt BlueALSA (vormals bluez-alsa) in die Bresche.
BlueALSA erstellt ein virtuelles PCM-Modul, das für das Bluetooth-Gerät steht. Wird dann dieses als Ausgabegerät gewählt, kommt der Sound aus dem Headset.
Vorbedingung ist, dass die Geräte gepairt sind. Dafür benutzte ich Blueman, alternativ kann man das auch gut in der Konsole mit bluetoothctl machen. Schwierigster Schritt war hier, herauszufinden, wie man das Headset in den richtigen Modus schaltet.
Dann BlueALSA installieren. Bei mir ist es noch als bluez-alsa bezeichnet:
sudo emerge bluez-alsa
Gestartet ist es schnell:
sudo bluealsa
Und direkt danach hat das Abspielen einer Audiodatei funktioniert:
aplay -D bluealsa:HCI=hci0,DEV=XX:XX:XX:XX:XX:XX,PROFILE=a2dp testdatei.wav
Um nur bluealsa angeben zu müssen, kann man die Parameter wie in der Readme erwähnt der ~/.asoundrc hinzufügen:
defaults.bluealsa.interface "hci0" defaults.bluealsa.device "XX:XX:XX:XX:XX:XX" defaults.bluealsa.profile "a2dp"
Ist jetzt alles gut? Leider noch nicht. Ich habe Firefox nicht überzeugen können, Sound über BlueALSA abzuspielen. Firefox war immer schon störrisch mit ALSA, hatte z.B. nie eine Möglichkeit, das Ausgabegerät auszuwählen. Auch scheint Mixing, also das unterstützen mehrerer Audioquellen auf einmal, noch zu fehlen. Generell sind wir hier in einem Bereich, in dem die ~/.asoundrc angepasst und eine gute Standardkonfiguration gefunden werden muss, da fehlt noch Dokumentation (wobei dies ein guter Ansatz ist). Aber BlueALSA wird aktiv entwickelt, ich bin zuversichtlich, dass das Projekt eine Lösung finden wird.
Hoffentlich bevor die Katze das Kopfhörerkabel durchgebissen hat.
Phantastische Tierwesen und wo sie zu finden sind
Das war kein Film für mich. Die Schauspieler sind nicht schlecht, die Grundidee eines Films im Universum von Harry Potter mochte ich und den Trailer fand ich gut. Doch am Ende ist der Film enttäuschend.
Zum Einen funktioniert die Geschichte nicht. Sie ist wirr und die Ereignisse sind nur zufällig miteinander verbunden. Vor allem aber ist das Timing daneben, zu oft ist eine spannende Stelle vor einer ruhigen, ein Spannungsbogen wird nicht gebaut. Entlarvend ist da vor allem das Ende, wenn nach dem Finale drei Kitsch-Ausblenden hintereinander gesetzt werden, als ob es ein Herr der Ringe wäre, und der Muggel nach zwei Stunden belanglosem Nebenherrennen anlasslos zum besten Freund erklärt wird. Aber auch schon vorher ist die Geschichte schwer auszuhalten, z.B. wenn nur Scamander den Oberbösen als solchen erkennt, oder wenn die autoritäre Magiergilde wie immer ein Abziehbild der US-Justiz ist, nur um am Ende doch den Helden lobend auf die Schulter zu klopfen.
Zum Anderen erklärt der Filmtitel die Tierwesen zum Fokus – genau sie funktionieren für mich gar nicht. Schuld sind die Computeranimationen. Es ist zwar schon beeindruckend, welche Fantasieprodukte geschaffen werden. Aber sie bleiben die ganze Zeit über eben phantastische Computeranimationen, in keiner Szene wirken die Viecher echt. Es ist leider statt Jurassic Park ein Episode I geworden. Fast wünschte ich mir, den Film in 3D geschaut zu haben, das hätte davon vll abgelenkt.
Ein totaler Reinfall? Das nun auch nicht. Mit nicht zu schreckhaften Kindern (die sicher deutlich älter als 6 Jahre sein sollten) oder niedrigen Erwartungen kann man sich den Film schon anschauen. Mehr ist es halt nicht.
Font Awesome 5 Kickstarter
Ich weiß nicht, ob darüber nicht schon zu viel geschrieben wurde (erst war ich nicht wirklich online, dann mein Feedreader wirklich offline), aber da ich eigentlich nicht an Kickstarter teilnehme will ich über diese Ausnahme dann doch schreiben. Das Kickstarter-Projekt der Iconfont Font Awesome hat mich geködert, als sie ihr $20-Frühkäuferangebot für alle freigegeben haben, nachdem sie wohl deutlich mehr Geld bekommen haben als erwartet. Und das war, bevor ich deren Video gesehen hatte:
Ich finde das Prinzip grundsätzlich gut. Font Awesome wird oft genutzt, auch ich habe es schon in Projekten benutzt. Und jedes mal ist es toll, passende Icons zu finden, und ist es ärgerlich, wenn genau das gesuchte Icon nicht da ist. Mit dem Geld des Kickstarters wollen sie mehr und bessere Icons bauen, häppchenweise 10 für die freie Version und 30 für die kostenpflichtige (davon sind derzeit 29 Pack finanziert). Meine $20 gehen also gleichzeitig in meine eigenen Projekte und kommen freier Software zugute, denn für beide gibt es dann mehr Icons. Da gönn ich den Iconmachern wirklich ihren erfolgreichen Kickstarter.
Nutzer mit sinatra-portier einfachst authentifizieren
Sinatra-portier ist ein Fork des Gems sinatra-browserid, das ich ebenfalls vorher geforkt hatte. Es funktioniert für den Entwickler noch genauso, der Unterschied ist, dass statt dem Button ein Formular erstellt wird, und dass Portier zum Bestätigen der Email benutzt wird.
Ein Sinatra-Projekt von Persona auf Portier umstellen
Sinatra-portier ist ganz offiziell als Gem registriert und kann darüber installiert werden:
gem install sinatra-portier
Im Sinatra-Projekt bindet man aber weiterhin sinatra/browserid ein:
require 'sinatra/browserid'
Dadurch kann man ohne Codeanpassung von Persona zu Portier wechseln. In den meisten Projekten muss man nur in der Gemfile gem sinatra-browserid
mit gem sinatra-portier
ersetzen und dann schauen, ob das Loginformular anstatt des Buttons im bestehenden Design ebenfalls funktioniert.
Die API
Es werden einige weniger Helferfunktionen und sinatraweit globale Variablen definiert, mit denen das Gem genutzt wird:
authorized?
True wenn der Nutzer sich mit Portier eingeloggt hat. Die Kernfunktion.
authorized_email
Die Email (als String), mit welcher der Nurzer eingeloggt ist. Kann benutzt werden um die genauen Rechte des Nutzers zu prüfen.
authorize!
Leitet zur Loginseite weiter, wenn der Nutzer nicht bereits eingeloggt ist.
render_login_button
Gibt das HTML des Loginformulars aus.
logout!
Loggt den Nutzer aus,
authorized?
ist danach false undauthorized_email
leer.
Ein Codebeispiel zeigt, wie die Funktionen benutzt werden können:
require 'sinatra/base' require 'sinatra/browserid' module MyApp < Sinatra::Base register Sinatra::BrowserID set :sessions, true get '/' if authorized? "Welcome, #{authorized_email}" else render_login_button end end get '/secure' authorize! # require a user be logged in email = authorized_email # browserid email ... end get '/logout' logout! redirect '/' end end
Nutzungspattern
Mit der obigen API gibt es mehrere Wege, wie man am besten Nutzer anmeldet und ihre Email prüft. Aber ich weiß noch, dass ich eine Weile brauchte um das für mich durchzustrukturieren, trotz des Beispiels. Nicht einfach zu prüfen, ob das eingegebene Passwort das gespeicherte ist, war ungewohnt. Aber im Grunde ist es noch einfacher: Prüfen, ob man die Emailadresse bereits kennt (=ist sie in der Datenbank?) und welche Rechte sie hat.
Ersten Nutzer zum Admin machen
Aber wo fängt man an? Bei der ersten Nutzung ist die Datenbank ja noch leer, es gibt nichts abzugleichen. Meine Projekte, die dieses Gem nutzen (ursprung, feedtragón und music-streamer) zeigen daher einen kleinen Installer, wenn die Datenbank leer ist. In diesem loggt der Nutzer sich über Portier ein, und diese erste Emailadresse wird dann als Adminadresse in der Datenbank gespeichert. Später prüft man, ob authorized_email
die gespeicherte Emailadresse ist, und kann so zu schützende Bereiche der Seite abriegeln.
Weitere Helfer erstellen
Um die Emailadresse auf Adminrechte zu prüfen definiert man am besten zwei weitere Helfer:helpers do def isAdmin? if authorized? if Database.new.getAdminMail == authorized_email return true end end return false end def protected! unless isAdmin? throw(:halt, [401, "Not authorized\n"]) end end end … get %r{/([0-9]+)/editEntry} do |id| protected! … end
Mit Nutzerliste abgleichen
Was aber, wenn man mehr als einen Nutzer haben will? Dann vergleicht man mit der Nutzerdatenbank.helpers do def isAdmin? if authorized? return Database.new.getAdminMail == authorized_email end return false end def isRegistered? if authorized? return Database.new.registered?(authorized_email) end end def protected! unless isRegistered? halt 401, erb(:login) end end def adminProtected! if (isRegistered? && isAdmin?) return true else halt 401, erb(:login) end end endRouten, die normale Nutzer aufrufen können, werden wie zuvor mit
protected!
geschützt. Hier wird nur geschaut, ob in der Datenbank der Nutzer registriert ist. Music-streamer z.B. hat eine Liste in den Einstellungen, in die der Admin neue Adressen und damit neue Nutzer hinzufügen kann. adminProtected!
hingegen prüft, ob authorized_email
die gespeicherte Emailadresse des Admins ist.
Das könnte dann mit einem kompletten Rollensystem erweitert werden, in dem der Code für jede Email prüft, welche Rolle und damit welche Rechte er hat. Und die Datenbankstruktur dafür bleibt simpel:
CREATE TABLE IF NOT EXISTS users( mail TEXT PRIMARY KEY, role TEXT );
Das schöne an dem System ist, was auch bei Persona schon hübsch war: Wir haben mit dem bisschen Code eine komplette Nutzerverwaltung in ein Sinatra-Projekt eingebaut, ohne ein einziges Passwort zu speichern oder auch nur einen Gedanken an Hashverfahren zu verschwenden.
Der Snowden-Film
Im Film gibt es eine Szene, in der Snowden beschreibt, dass seine große Sorge ein kommender Machthaber ist, der den Hebel umwirft und so das Überwachungssystem der USA in ein Unterdrückungssystem verwandelt. Damals hat weder er noch ich an Trump gedacht. Heute ist durch ihn der Gedanke aktueller als jemals zuvor.
Aber ich wollte eigentlich den Film besprechen. Und Snowden ist ein guter Film. Wobei ich vielleicht zu nah an der Sache dran bin, um den Film wirklich als Film zu bewerten. Aber immerhin: Er baut seine Spannungskurve auf, es sind gute Schauspieler, keine Minute ist er langweilig. Im Konflikt mit seiner Freundin Lindsay Mills bekommt der Grundkonflikt eine persönliche Dimension, und dass der Film das gleichzeitig nutzt, um die hübsche Schauspielerin in Szene zu setzen und das Problem der Invasion der Privatsphäre zu verdeutlichen, ist eine ziemliche Leistung.
Die eigentliche Leistung des Films ist natürlich nicht, ein guter Film zu sein, sondern Snowdens Enthüllungen dem Publikum zu zeigen. Und das schafft er. Selbst wenn man wie in meinem Fall das alles mitbekommen hat, ist es doch immer noch erschreckend die ganzen Überwachungsmaßnahmen so gebündelt zu sehen. Und gezeigt zu bekommen, wofür sie benutzt werden. Und das ist auch die Seite, wo der Film nochmal gewinnt: Er ist akkurat. Was gezeigt wird stimmt, nur wenig wird ausgelassen (das Zusammenspiel der nationalen Geheimdieste fiel mir auf). Natürlich wird das nicht für die Details der Hintergrundgeschichte gelten, ich meine den öffentlichen Teil, welche Überwachungsprogramme existieren, was sie können, und wie Snowden gehandelt hat. Beispielweise sind das in allen(?) Szenen, in denen Snowden öffentlich spricht, schlicht seine Originalzitate. Und der Schwenk am Ende zum echten Edward Snowden ist unglaublich mächtig. Dass es funktioniert, sah ich an den während des Abspanns diskutierenden Gruppen im Kino.
Snowden ist ein sehenswerter Film, den man seiner Umgebung zeigen sollte, damit sie Snowdens Enthüllungen und die damaligen und derzeitigen Verbrechen der USA verstehen. Mit Trump als Präsident werden da noch genug dazukommen.
Wileyfox Spark+
Das Wileyfox Spark+ kam in einem kleinen roten Karton. Das Zubehör ist simpel: USB-Kabel, Kopfhörer und eine Kurzanleitung. Kopfhörer und Kabel wirken gar nicht mal schlecht, die Kurzanleitung war klar verständlich.
Das Telefon selbst ist von vorne unscheinbar und hat hinten das Wileyfox-Symbol als sehr sichtbares Designelement, außerdem ist die Plastikrückseite hübsch angeraut. Intern identifiziert es sich übrigens als Fly Evo Tech 4, das den Fotos zufolge ähnlich aussieht, aber nicht identisch ist.
Im Test auf Computerbase kam das Spark ohne Plus nicht gut weg, zu wenig Arbeitsspeicher, zu langsam und zu wenig internen Speicher. Beides behebt wohl das Plus-Modell. Und es hat weiterhin die positiven Eigenschaften des Spark: Auswechselbare Batterie (Pflicht), Dual-Sim (super für mich, mit meiner französischen und deutschen Nummer), gutes Display und aktuelles Android, erweiterbarer Speicher. Es wirkt zudem sauber verarbeitet und die Leute, denen ich es zeigte, fanden es hübsch.
Im direkten Vergleich mit dem LG G3 ist das Spark wohl ein kleiner Schritt zurück. Das Display des G3 erscheint mir etwas besser, nicht die Helligkeit, sondern die Farben. Mein Gesprächspartner meinte, die Sprachqualität sei etwas schlechter – auf meiner Seite höre ich immerhin keinen Unterschied. Akkulaufzeit kann ich noch nicht beurteilen, ebensowenig die generelle Leistung. Beides braucht mehr Zeit, war bisher aber völlig okay. Für die Kamera habe ich ein paar Vergleichsbilder geschossen (links: G3, rechts: Spark+):
Nebeneinander gehalten, Automatikmodus, im gleichen Moment gedrückt. Das G3 scheint mit dem Gegenlicht deutlich besser zurechtzukommen. Unbrauchbar ist die Kamera des Spark aber auch nicht.
Das Android auf dem Spark+ wirkt bisher sehr gut. Android mit Cyanogenmod, ich bin zu wenig vertraut mit aktuellen Androidversionen um genau zu wissen, was verändert wurde. Im Gegensatz zum G3 ist der Wegfall der vorinstallierten LG-Anwendungen durchaus angenehm, und das alphabetisch sortierende Anwendungsmenü gefällt mir auch gut (da weiß ich allerdings auch, dass das normalerweise auswechselbar ist). Dass das Spark+ etwas kleiner ist finde ich gut (aber hey, ich hielt auch das HP Veer für ausreichend groß), und sein angerautes Plastik ist angenehmer zu greifen als das glatte Plastik des G3.
Zusammenfassend: Mit einem Langzeittest kann ich noch nicht dienen. Aber der erste Eindruck des Spark+ ist ziemlich positiv. Es scheint mir völlig geeignet, das G3 zu ersetzen – allerdings würde ich das G3 behalten, wenn ich die Wahl hätte. Abgesehen davon wüsste ich derzeit nicht, was ein Android-Smartphone mehr haben sollte. Aber genau deswegen wollte ich ja auch ein solches günstiges Smartphone haben. Es hat neu samt Lieferung 150€ gekostet.