v4l2loopback mit Chrome verwenden

Für Videokonferenzen nutze ich schon länger Videodateien und habe das kürzlich auch in ein Push-to-talk-Skript hinterlegt. Nur mit Jitsi Meet hatte es nie funktioniert - egal mit welchem Browser ich es auch versuchte - keiner konnte auf meine “Webcam” zugreifen. Heute bin ich nach einer weiteren naiven Suche auf dieses Github-Issue mit der Lösung für Chrome gestoßen.

Man muss das Flag exclusive_caps beim laden des Moduls mit 1 angeben.

sudo modprobe v4l2loopback exclusive_caps=1

Nun funktioniert die “Webcam” auch im Chrome \o/ Zwar immernoch nicht im Firefox - aber immerhin.

Import-Module und der "-Prefix" Parameter

Eine Sache die ich aus der Aufzeichnung der Präsentation “How to Position Yourself for the Future” mit Jeffrey Snover und Jason Helmick (genauer, der Frage- und Antwortrunde bei 1:01:17) entnommen habe: man kann einen Präfix für die Befehle eines Moduls beim Import angeben!

In der Frage- und Antwortrunde erwähnt ein Teilnehmer, dass ein PowerShell Modul (vermutlich PowerCLI von VMWare) andere Befehle “überschreibt”, da Funktionen/Cmdlets in dem Modul gleich benannt sind wie Cmdlets von PowerShell Core oder anderen Modulen.

Importiert man das PowerCLI Modul wird einem der Befehl Get-VM zur Verfügung gestellt, was eine gute Idee ist, wenn man virtuelle Maschinen auf vSphere verwalten möchte, aber heutzutage kann es durchaus sein, dass man auch noch einen Hyper-V Server verwalten möchte, welches auch das Cmdlet Get-VM hat; und das vom gleichen Computer (z.B. mittels RSAT). Nach dem Import des Moduls ist es aber nicht länger möglich die virtuellen Maschinen des Hyper-V Servers zu verwalten (mindestens Get-VM funktioniert nicht mehr) ohne das PowerCLI Modul aus der PowerShell Instanz wieder zu entfernen (oder man spezifiziert genau, dass man jetzt diesen Befehl aus dem Hyper-V Modul verwenden möchte).

Es ist nicht sehr wahrscheinlich dass VMWare ihre Befehle zeitnah ändern wird, damit es nicht andere Cmdlets/Funktionen überschreibt/kollidiert. Was also tun, wenn man beide Hypervisoren in einem Skript verwalten möchte?

Man kann das Modul, das dafür sorgt, dass der Code nicht korrekt funktioniert mit dem Parameter -Prefix laden.

Schauen wir uns an wie das funktioniert. Zu Demo-Zwecken werde ich das BitsTransfer Modul verwenden.

Wenn man das Modul “wie gewohnt” importiert und sich die verfügbaren Befehle anzeigen lässt bekommt man was man erwartet.

Import-Module ohne Prefix

Import-Module ohne Prefix

Aber importiert man das Modul mit einem Präfix wird dieser vor jedem einzelnen Befehl (nach dem Verb-) des Moduls eingefügt.

Import-Module mit Prefix

Import-Module mit Prefix

Ein sehr cooles Feature das ich bis jetzt noch nicht kannte.

ConvertTo-Influxdb.ps1

Als ich meine Daten von zwei Influx Datenbanken in eine zusammenführen wollte, war ich überrascht, dass man nicht beides (Export und Import) mit dem CLI influx direkt machen kann.

Influx Measurement exportieren

Um die Daten aus einer Influx Datenbank auszulesen nimmt man folgenden Befehl: influx -database home -format csv -execute "select * from temperature" > /tmp/temperature.csv Es wird hier aus der Datenbank home das Measurement temperature in eine CSV-Datei gespeichert.

Import fehlgeschlagen

Der Versuch diese zu importieren scheitert jedoch:

influx -database private -format csv -path /tmp/temperature.csv -import 2018/02/17 12:33:03 error writing batch: {"error":"unable to parse '
...
ERROR: 11397 points were not inserted

Ich habe mir nur kurz die Parameter angesehen und daraus geschlossen, dass es sinnvoll wäre, wenn man die Daten so einlesen könnte. Wie naiv von mir!

Formatierung für den Import

Die Daten müssen für den Import wie bei einem Insert aufgebaut sein; also in meinem Beispiel: temperature,sensor=livingroom temperature=21 Man muss also die Daten vom CSV-Format in dieses überführen …

Alternative Skripte

Auf github fand ich mehrere Skripte die CSV-Dateien nach Influx konvertieren (oder direkt importieren) diese waren aber alle in Programmiersprachen die nicht installiert waren und vor allem in Programmiersprachen die ich (noch) nicht kann. Ein Bash-Skript hätte ich liebend gerne genommen, das habe ich aber nicht gefunden. Und Bash-Skripte schreiben macht mir keinen Spass, deshalb hab’ ich mich daran gemacht das PowerShell-Skript ConvertTo-Influxdb zu schreiben.

ConvertTo-Influx ausführen

Eine CSV-Datei kann mit dem Skript wie folgt in eine Datei überführt werden, die man direkt mit dem influx CLI importieren kann. ConvertTo-Influx.ps1 -Path /tmp/temperature.csv -Database private > /tmp/temperature.influx

Daten in Influx Datenbank einlesen

Die konvertierten Daten importiert man mit folgendem Befehl: influx -path /tmp/temperature.influx -import

Firefox - automatisches Füllen von Login-Forms deaktivieren

heise security berichtete über Tracking-Skripte die Emailadressen und Passwörter auslesen können, wenn man sie im Browser speichert. Man kann jetzt in Panik geraten oder diesen Automatismus deaktivieren, um zukünftig mit max. zwei Klicks die (echten) Formulare mit den Logindaten zu füllen und das automatische auslesen so zu verhindern.

Um den Automatismus zu deaktivieren muss man about:config in die Adresszeile eingeben und die Warnung bestätigen.

Die Liste der Konfigurationen sucht man nach signon.autofillForms dessen Wert im Standard auf true gesetzt ist. Indem man doppelt auf true in der Spalte Wert klickt ändert man ihn auf false - und das war’s auch schon.

MRU im Atom Editor deaktivieren

Der Atom Editor ist ein großartig hackbarer Editor. Leider mit der (für mich falschen) Standard-Einstellung bei der Tastenkombination STRG+TAB zum Wechseln der geöffneten Dateien:

MRU MRU (Most Resently Used) wechselt immer zwischen den zuletzt geöffneten Dateien eben in genau der Reihenfolge wie sie zuletzt geöffnet wurden.

Damit konnte ich mich (noch?) nicht anfreunden .. und weil der Editor so schön hackbar ist kann man diese Option wieder zurücksetzen.

Dazu geht man auf Edit > Keymap... und es öffnet sich eine Datei namens keymap.cson.

In dieser Datei fügt man dann folgende Zeilen ein, speichert und ist auch schon fertig.

'body':
  'ctrl-tab ^ctrl': 'unset!'
  'ctrl-tab': 'pane:show-next-item'
  'ctrl-shift-tab ^ctrl': 'unset!'
  'ctrl-shift-tab': 'pane:show-previous-item'
keymap.cson

keymap.cson

Für den Fall, dass man nun doch MRU nochmal testen möchte sind die Zeilen auch schnell wieder gelöscht bzw. auskommentiert.

userstyles.org - mit Browser Plugin "Stylus" Webseiten umgestalten

Mein Internet-Konsumverhalten

Das Web konsumiere ich indem ich RSS Feeds von Webseite abonniere. Bei Ebay kann man zum Beispiel den Parameter &_rss=1 an die URL einer Suche hängen und bekommt somit einen RSS Feed für neu eingestellte Artikel (was ich hier schon mal beschrieben hatte). Den Instagram-Kanal von Katz und Tinte lass ich mir mittels fetchrss.com als RSS Feed generieren. Für manche Seiten erzeuge ich mir die RSS Feeds selbst.

Warum immernoch RSS/der ganze Aufwand in Zeiten von Google+Facebook? Deshalb!

Mobiles Lesen

Mit Feedly auf dem Mobilgerät meiner Wahl lese ich die Überschriften der RSS Feeds. Interessiert mich ein Artikel sende ich ihn mit der Aktion “langes Drücken” an Pocket. So lese ich mehrere hundert Artikelüberschriften jeden Tag. Davon interessieren mich durchschnittlich 15 so sehr, dass ich sie vollständig lese.

Pocket versucht die Artikel aus den Webseiten herauszufiltern und bereitet den Artikel neu auf (ohne Werbung/Navigationsleisten/Sidebar/etc.) und ich kann es meist “ordentlich” lesen, manchmal fehlen aber Bilder, oder Code-Beispiele was schon nerven kann.

Lesen im Browser

Wenn ich aber die Artikel mittels Feedly im Browser konsumiere genügen mir meist zwei Tasten: J und K (eine Übersicht über alle verfübaren Shortcuts bekommt man mit ?). Mit J springe ich zum nächsten Artikel und mit K wieder einen Artikel zurück. Leider gibt es keinen Shortcut für “Senden an Pocket”, aber einen Button den man “erst umständlich” mit der Maus anklicken muss.

Tatsächlich kann man sich eine Krücke bauen, indem man Feedly Pro kauft, die Artikel in Feedly mit dem Shortcut S in Feedlys eigenen “Read-It-Later”-Funktion speichert und in IFTTT ein Applett erstellt das in Feedly gespeicherte Artikel an Pocket schickt. Das kann man schon so machen .. aber dann es ist es auch so.

Wenn ich mir gerade Zeit zum Lesen nehme möchte ich idealerweise den Artikel sofort lesen und nicht erst in Pocket speichern, in den Tab wechseln in dem Pocket geladen ist, nach dem Artikel suchen, anklicken und dort lesen.

Um den Artikel über Feedly direkt zu lesen drückt man V und es öffnet sich der Artikel in einem neuen Tab direkt auf der Webseite des Verfasser/Publizisten. Ist der Artikel gelesen schliesse ich den Tab mittels STRG+W, bin wieder in Feedly und weiter gehts zum nächsten Artikel. Das sieht dann ungefaehr so aus: J, J, J, K, V, STRG+W, J, J, etc.

Auf der Suche nach Inhalt

Manche Webseiten sind so überladen mit “Menschen die diesen Artikel gelesen haben lasen auch”-Bildern, animierter Werbung, Umfragen, Kommentaren, Social-Like-Buttons, etc. dass man nach dem eigentlich Artikel erst mal suchen muss. Hier mal ein Beispiel-Suchbild (was auch tatsächlich der Anlass für mich war):

Na? Fündig geworden? Genau, es sind die sechs (in Zahlen: 6) Sätze die darüber informieren, dass die Version X von Software Y veröffentlicht wurde, welche Verbesserungen diese beinhalten und wie man sie installiert. Dafür den ganzen restlichen “Inhalt” drum-herum verzweifelt versuchen zu ignorieren missfiel mir. Ich erinnerte mich dass es mal ein Plugin gab mit dem man Webseiten seine eigenen Layout-Vorgaben aufzwingen konnte und fand es wieder: [update] stylish wegen Sicherheitsbedenken bin ich auf die Open Source Erweiterung Stylus umgestiegen [/update]

Also habe ich meine CSS-Fähigkeiten rausgekramt, einen eigenen Style für die Webseite definiert und nun sieht der Artikel so aus, wie er meiner Meinung nach aussehen sollte; ohne grosse Ablenkung; ein reiner Artikel.

Meine rosarote Brille

Hatte ich erst einmal damit angefangen die Welt das Web nach meinen Vorstellungen zu gestalten fand ich schnell gefallen daran.

So habe ich die Seite von heise.de “aufgeräumt”,

bewegte Bilder und Werbung von amazon.de entfernt

oder Habitica auf das beschränkt was es für mich ist: ein Task-Manager (für die Gamification habe ich mich nie interessiert)

Damit man die Anpassungen die man gemacht nicht immer wieder in all seinen Browsern auf all seinen Geräten neu hinterlegen/kopieren muss, kann man seine Styles auf userstyles.org hochladen. Die dort verfügbaren Styles können bequem über die Webseite (nachdem man das Plugin installiert hat) abonniert werden. Aktualisierungen können mit wenigen Klicks angewendet werden.

Meine Styles auf userstyles.org sind unter folgendem Link abrufbar: https://userstyles.org/users/430273

Web-Verbesserer

Auf userstyles.org finden sich auch viele Styles anderer Web-Verbesserer.

Zum Beispiel der Nyan Cat Fortschrittsbalken für Youtube:

https://userstyles.org/styles/95033/youtube-nyan-cat-progress-bar-video-player-theme

Oder ein dunkles Theme für github (Ideal für Nachteulen):

https://userstyles.org/styles/37035/github-dark

Zertifikatsfehler beim Verbinden einer RDP Sitzung mit Remmina

Nachdem ich nun die aktuelle Version von Remmina verwende kam nach kurzer Zeit eine Meldung zu Zertifikatsdetails auf.

remmina remote desktop protocol rdp certificate details

Da ich mich via IP-Adresse zu verschiedenen VMs verbinde (z.B. bei Kunden A verbinde ich mich auf Maschine “KA” und bei Kunden B auf Maschine “KB” jeweils auf die IP-Adresse 192.168.178.12) kommt diese Meldung weil die VMs unterschiedliche Zertifikate vorzeigen - soweit klar. Nur beim Klick auf “OK” um das Zertifikat zu akzeptieren erhalte ich eine Fehlermeldung.

remmina remote desktop protocol rdp certificate details

Diverse Einträge im Internet beschreiben dass man im Verzeichnis ~/.freerdp/certs eventuell vorhandene Dateien löschen soll. Das Verzeichnis existiert bei mir jedoch nicht. Andere meinten Sie hätten die RDP-Sicherheit von Aushandeln auf RDP gestellt .. auch das half bei mir nicht. Erst eine Blog-Eintrag brachte mich auf die richtige Spur - dort wird xfreerdp in der Kommandozeile gestartet mit dem Parameter /cert-ignore - dieser Parameter Zertifikat ignorieren ist in Remmina als Option verfügbar.

remmina remote desktop protocol rdp certificate details

Remote Desktop Gateway mit Remmina verwenden

Bis vor Kurzem hatte ich eine Windows VM verwendet um nichts anderes damit zu tun als mich mittels Remote Desktop Gateways auf diverse Maschinen/VMs zu verbinden. Vor ein paar Wochen wurde ich gefragt warum ich das nicht mit Remmina mache, das soll das können. Nach einer ersten Suche fand ich als Antwort (von 2014) dass das wohl FreeRDP das unterstützt und man die Anwendung dafür selbst kompilieren soll. Ausserdem könne man das Feature Request auf dem GitHub-Repo von Remmina upvoten. Dort stand aber auch dass das Feature bereits implementiert ist …

Also habe ich nochmals geprüft ob ich die aktuelle Version installiert habe. Der Linux Mint Update Manager zeigte keine Updates an.

Remmina selbst war in Version 1.1.2 installiert - die Unterstützung des Remote Desktop Gateway wurde aber erst mit Version 1.2.0 (welche derzeit als PreRelease verfügbar ist) implementiert.

Im Wiki steht dass es für Remmina 1.2 ein offizielles PPA gibt, welches man mit folgenden Befehlen hinterlegt und das aktuelle PreRelease installiert:

sudo apt-add-repository ppa:remmina-ppa-team/remmina-next
sudo apt-get update
sudo apt-get install remmina remmina-plugin-rdp remmina-plugin-gnome libfreerdp-plugins-standard

Nach der Aktualisierung der Remmina Installation mit dem aktuellen PreRelease kann ich mich nun erfolgreich via RDG verbinden, ohne dafür jedes Mal eine VM zu starten.

remmina remote desktop gateway settings

DuckDuckGo - oder: das bessere Google

Ich war immer wieder befangen ob der Sammelwut die Google an den Tag legt und suchte googlete immer mit einem “schlechten Gefühl”. Die Trefferquote hatte aber keine andere Suchmaschine erreicht.

Wie suche ich?

Seit vielen Jahren verwende ich die Keyword-Suche von Firefox. Diese Funktion (gab es soweit ich mich erinnere zuerst in Opera) ermöglicht es mit einem Keyword, das auch nur aus einem Zeichen bestehen kann, die Suchmaschine/-seite seiner Wahl auszuwählen.

firefox suche einstellungen

Gebe ich in meine Adressleiste “ich suche etwas in meiner Standardsuchmaschine” ein, so wird dieser Text von meiner Standardsuchmaschine (DuckDuckGo) gesucht. Stelle ich meiner Suche ein “g” voran, wird alles was nach dem “g” folgt an Google geschickt. Analog gilt ein “a” für Amazon, ein “e” für Ebay und mit einem “d” lasse ich mir in regelmäßig unregelmäßigen Abständen etwas auf Leo.org übersetzen.

  • “g roter Porsche” sucht auf Google nach “roter Porsche”
  • “a roter Porsche” sucht auf Amazon nach “roter Porsche”
  • “e roter Porsche” sucht auf Ebay nach “roter Porsche”
  • “gi roter Porsche” sucht auf Google Images nach “roter Porsche”
  • etc.

Das Setzen einer Standardsuchmaschine hat fuer mich also nur den Bequemlichkeitsfaktor, dass ich kein weiteres Zeichen nebst Leerzeichen meiner Suche voranstellen muss.

Auf der Suche nach Google-Alternativen

Immer wieder wollte ich “dem Geschwätz der Leute” keine Beachtung schenken, dass es keine Alternative zu Google gibt; sah ich doch auch immer wieder Kollegen, denene Bing ihre Fragen im Internet beantwortete. Also stellte ich mal Yahoo, mal Bing, mal ixquick, mal MetaGer in regelmäßig unregelmäßigen Abständen als meine Standardsuchmaschine ein. Auch zwang ich mich dazu diese für mindestens eine Woche beizubehalten. Das tat ich über die letzen zwei Jahre immer mal wieder, immer mit dem selben Ergebnis -> ich stellte wieder auf Google um.

Der Unterschied

Bis ich DuckDuckGo für mich entdeckte. Ich glaubte mich zu erinnern, dass ich damit schon vor einigen Monaten mal experimentierte und schlechte Erfahrungen gemacht hatte (glaube nun aber dass ich es einfach mit ixquick verwechselte). Dennoch stellte ich mal wieder um und war begeistert als ich die simple Suche “linux test wifi strength” eingab und nicht nur eine sehr gute Ergebnisliste zurückbekam, sondern die Lösung aus dem ersten Treffer direkt unter meiner Suchanfrage präsentiert wurde.

duckduckgo suche nach 'linux test wifi strength'

Zum Vergleich, die selbe Suche auf Google.

google suche nach 'linux test wifi strength'

Der Vorteil liegt hier klar auf der Hand, statt auf dem ersten Treffer nach der Lösung zu suchen bekommt man die Lösung (meist ohne weiteres Zutun) direkt angezeigt. Der “Google-Schritt”, den ersten Treffer zu öffnen und die Lösung selbst zu finden entfällt also. Beigeisterung pur!

Nicht immer aber immer öfter

Das funktioniert leider (noch) nicht für alle meine Suchanfragen, aber immer öfter. Bei der Suche nach “php cast string” (und ähnlichen Fragen rund um das Thema Programmieren) wurde mir meist direkt die Antwort angezeigt.

duckduckgo suche nach 'php cast string'

Und zum Vergleich das Ergebnis bei Google.

google suche nach 'php cast string'

auch schön

Schön fand ich das Ergebnis auf meine suche nach “beautify html”. DuckDuckGo selbst verschönert das unleserliche HTML anstatt auf eine weitere URL gehen zu müssen, wieder ein Schritt/Klick weniger.

duckduckgo suche nach 'html beautifier'

MediaWiki Update Skript "mediawiki-updater"

Weil mich in erster Linie jede sich wiederholende Aufgabe anödet (mein Leitsatz ist: “Wenn du etwas zwei Mal tun musst, automatisiere es. Die Wahrscheinlichkeit dass du es erneut tun musst steigt mit jedem weiteren Mal.”) habe ich die sich in regelmäßigen Abstand wiederholende Aufgabe “MediaWiki aktualisieren” in ein zwei Skripte gepackt.

Da ich Installationen sowohl auf Linux als auch auf Windows betreue wurden es ein Bash- und ein PowerShell-Skript.

Die Dateien (und Voraussetzungen) findet ihr in folgendem Repo:

https://github.com/gpunktschmitz/mediawiki-updater

Hier kurz was die Skripte tuen:

  1. Prüfen ob eine neue Version verfügbar ist
  2. MySQL Datenbank sichern
  3. Backup (Kopie) der derzeitigen Installation anlegen
  4. neue MediaWiki Version herunterladen
  5. neue MediaWiki Version in temporäres Verzeichnis extrahieren
  6. vorhandene Installation (Dateien) mit neuer Version überschreiben
  7. Löschen des Verzeichnisses “vendor”
  8. mittels Git neue externe Bibliotheken in das Verzeichnis “vendor” klonen
  9. alte Backups löschen (die letzten 3 werden beibehalten)
  10. das Skript “maintenance/update.php” ausführen

Beim Erstellen hatte ich auch im Hinterkopf das Skript im Cron/eine geplante Aufgabe zu packen. Dahingehend habe ich es aber noch nicht ausgelegt - meine Installationen habe ich durch manuelles Ausführen der Skripte erfolgreich von 1.28.2 auf 1.29.0 gebracht.

Hoffe die Skripte helfen auch dir diese Aufgabe zu automatisieren.