Ich habe mal aus Spaß das Mastodon-Plugin installiert. Der Blog sollte jetzt unter blog@bjoern-tantau.de verfügbar sein. Mal gucken, ob das funktioniert.
Kategorie: Technik
Wichtige Vorbereitungen
Muss meine Einbindung einer fremden API an den API supplier für ein Review übermitteln. Meine Vorbereitung dazu:
grep -irE 'fuck|stupid|dumb|silly|shit|wtf' .
Kam zum Glück nur was in phpunit raus.
Nur, für mich selbst, damit ich es nicht wieder vergesse. Wenn man doppelt UTF-8 encodierten Text in der Datenbank hat, dann kann man dies relativ leicht beheben.
UPDATE IGNORE tabelle SET spalte = CONVERT(binary CONVERT(spalte USING latin1) USING utf8) WHERE LENGTH(CONVERT(binary CONVERT(spalte USING latin1) USING utf8)) != CHAR_LENGTH(CONVERT(binary CONVERT(spalte USING latin1) USING utf8));
Das ganze habe ich mir natürlich nicht selbst ausgedacht, sondern von Joni Salonen geklaut.
Noch mehr Löcher gestopft
Ein Teilproblem aus Ein Loch ist im Eimer ist jetzt auch gelöst. Ich kann jetzt endlich ein neues BIOS mit flashrom flashen. Der gute Luc Verhaegen hat einen Patch erstellt durch den mein Mainboard jetzt unterstützt wird.
Ich liebe Open Source!
Ich konnte inzwischen mein Problem aus Ein Loch ist im Eimer lösen. Naja, zumindest das ursprüngliche Problem, dass ich alte Spiele zocken wollte. Es klappte nach dem Update nichts mehr wegen einem Bug in dem Intel Grafiktreiber. Nachdem ich den Kernel auf 4.6.7 gedowngraded hatte läuft Ubuntu 16.04 mehr oder weniger ohne Probleme und ich kann endlich mal wieder Super Mario World und Blackthorne im Wohnzimmer zocken.
Das hat mir so viel Spaß gemacht, dass ich das auch gerne unterwegs haben wollte. Aber auf dem Smartphone zockt es sich mit Touchscreen nicht so angenehm. Und eigentlich ist das auch einem Nerd nicht ganz würdig auf einem ordinären Telefon zu spielen. Ganz klar, da musste eine Raspberry Pi-Lösung her! Am besten so etwas ähnliches, wie ein Nintendo Switch oder das alte nVidia Shield.
Nur blöd, wenn das ganze Budget auf absehbare Zeit für andere Dinge verplant ist. Dabei will ich doch so gerne ein neues Spielzeug haben! Aber wenn ich nicht das Geld dafür habe, dann hat das vielleicht jemand anderes. Deshalb habe ich einfach angefangen so ein Gerät bei ebay zu verticken. Eine Win-Win Situation. Ich kann das Spielzeug basteln, ein anderer kann Spaß mit dem Spielzeug haben und mit der kleinen Marge habe ich irgendwann genug Geld zusammen, um selbst auch mit dem Spielzeug Spaß zu haben. Den ersten zufriedenen Kunden habe ich schon und ich bin mir sicher, dass es mehr werden.
Ein Loch ist im Eimer
Ich wollte die Tage gerne meine Wiimote an meinen Wohnzimmer-PC anschließen und dort ein paar Emulatoren für Retro-Gaming installieren. In meinen Tests am Laptop klappte das zumindest mit wminput schon ganz gut.
Also Bluetooth-Dongle an den Rechner gesteckt, wminput -d -c gamepad
gestartet, 1+2 auf der Wiimote gedrückt uuuuuuuuuund es passierte nichts. Ein wenig googeln erklärte mir, dass das Dongle in Ubuntu 14.04 nicht richtig funktionierte. Kein Problem, ein do-release-upgrade
und etwas Geduld später sitze ich auch 16.04. Und nichts funktioniert mehr. Aber so gar nicht. Alles kaputt, lässt sich nicht reparieren, Björn ist frustriert und hat schon viel zu viel Energie da rein gesteckt, nur um Super Mario Bros auf dem Fernseher zu zocken. Anscheinend ist auch von Ubuntu-Seite her beim Update von 14.04 auf 16.04 die Empfehlung neu zu installieren. Zumindest wenn man Kubuntu einsetzt, was ich auch tat, um in den Genuss von KDE Connect zu kommen.
Die Hau-Drauf-Methode musste also her. Am besten gleich Artful Aardvark, dann sollten die Emulatoren auch direkt in der neuesten Version daherkommen. Es war abgesehen von der Kodi-Konfiguration sowieso nichts auf dem Rechner, was gesichert werden müsste. Beim letzten Mal hatte ich Ubuntu einfach per DVD installiert. Das war diesmal nur nicht drin, denn mein DVD-Laufwerk ist kaputt.
Kein Problem, dachte ich, einfach das Image auf einen USB-Stick spielen. Damit geht die Installation in der Regel ohnehin schneller. Tja, Pustekuchen. Wenn der USB-Stick drin steckte kam der Computer nicht einmal mehr zum POST. Und auch wenn ich ihn reinsteckte, wenn ich im BIOS war, frierte der Rechner komplett ein. Am Stick selbst lag es nicht, denn der Fehler trat auch mit anderen Sticks auf.
Aber zum Glück besitzt der Rechner auch einen SD-Karten-Leser. Image auf eine SD-Karte geschrieben, Karte eingelegt, selbes Problem. Computer friert ein. Will nicht starten, wenn etwas bootbares über USB (denn daran hing das Lesegerät letztendlich) angeschlossen war.
Google, google, google… Ah, anscheinend gibt es ein BIOS Update für mein AOpen i965GMt-LA. Und darin ist genau dieser Fehler behoben. BIOS runtergeladen. „Bla, bla, bla, nicht über Windows flashen, lieber DOS nehmen…“ Ja, mir egal, hab‘ doch Linux mit flashrom. Backup vom alten BIOS gezogen, kein Problem. Aber, aber schreiben ging nicht.
$ sudo flashrom --programmer internal -c "W39V040FA" -w IGC1B.BIN
flashrom v0.9.9-rc1-r1942 on Linux 4.4.0-112-generic (x86_64)
flashrom is free software, get the source code at https://flashrom.org
Calibrating delay loop... OK.
Found chipset "Intel ICH8M".
Enabling flash write... OK.
Found Winbond flash chip "W39V040FA" (512 kB, FWH) mapped at physical address 0x00000000fff80000.
Reading old flash chip contents... done.
Erasing and writing flash chip... FAILED at 0x00000000! Expected=0xff, Found=0x49, failed byte count from 0x00000000-0x00000fff: 0x463
ERASE FAILED!
Reading current flash chip contents... done. Looking for another erase function.
FAILED at 0x00000000! Expected=0xff, Found=0x49, failed byte count from 0x00000000-0x0000ffff: 0x463
ERASE FAILED!
Reading current flash chip contents... done. Looking for another erase function.
FAILED at 0x00000000! Expected=0xff, Found=0x49, failed byte count from 0x00000000-0x0007ffff: 0x60915
ERASE FAILED!
Looking for another erase function.
No usable erase functions left.
FAILED!
Uh oh. Erase/write failed. Checking if anything has changed.
Reading current flash chip contents... done.
Good, writing to the flash chip apparently didn't do anything.
This means we have to add special support for your board, programmer or flash
chip. Please report this on IRC at chat.freenode.net (channel #flashrom) or
mail flashrom@flashrom.org, thanks!
-------------------------------------------------------------------------------
You may now reboot or simply leave the machine running.
Tja, erst einmal einen Bugreport für die netten flashrom-Leute vorbereitet. Aber dann brauchte ich eine Alternative. Freedos dürfte sicher gehen. Aber wie auch immer ich es angestellt habe, ich bekam es nicht von Festplatte gestartet. USB-Stick ging aus bekannten Gründen nicht. Tja, und ich würde ja von CD booten, aber mein DVD-Laufwerk ist kaputt.
Heute Abend werde ich mir mal ein Laufwerk von einem anderen Rechner borgen und ins Wohnzimmer schleppen…
Gott, endlich habe ich eine komplette Open Source Alternative zu der Find My Phone Funktion in Android gefunden. Bzw. eine Alternative für den Android Device Manager. Nennt sich Open Device Manger und ist auf Github verfügbar. Einmal der Client und dann die Server-Komponente.
Bräuchte noch ein paar Tweaks (der erste PR is geschickt), aber so für den Anfang ist das echt super. Fehlt nur noch die Abhängigkeit zu Google Cloud Messaging. Aber die Daten werden zumindest verschlüsselt verschickt. Vielleicht finde ich auch mal die Zeit das dort heraus zu reißen.
Das ist eigentlich allgemein bekannt, aber ich muss nur mal kurz meinen PHP-Frust loswerden. Ich durfte heute zu meinem Leidwesen feststellen, dass var_dump(10 == "10,5")
als Ergebnis bool(true)
ausgibt.
Das liegt ganz einfach daran, dass PHP anscheinend, wenn es zwei Strings vergleicht, die wie Integers aussehen (oder einen Integer mit einem String), diese zuerst in Integers umwandelt. Das ist historisch darin begründet, dass früher PHP quasi nur mit Strings gearbeitet hat, weil Browser auch nur Strings herüberschicken. Dafür hat PHP dann später auch den genauen Vergleich mittels ===
eingeführt. Der prüft auch darauf, ob die beiden Werte vom gleichen Typ sind.
Aber noch fieser wird es, weil ich die Keys von einem Array mit Strings vergleichen wollte. Ich dachte mir, ich achte einfach darauf, dass die Keys als Strings aufgebaut werden und mache dann einen strengen Vergleich. Tja, das würde ja funktionieren, wenn PHP nicht auch automagisch alle Array-Keys, die wie eine Integer aussehen, in einen Integer umwandeln würde, was sich nur über fiese Verrenkungen verhindern lässt.
Es wird also aus
array( "1" => "eins" );
einfach so
array( 1 => "eins" );
gemacht.
Danke Obama PHP!
Väterlicher Stolz
Oh, ich bin so stolz auf unsere Kunden. Aus Gründen die zu umfangreich sind, um sie aufzuzählen benutzen wir in unserem Webshop Sofortüberweisung.de. Für die Unwissenden; das ist ein Dienst, dem man seine Bankdaten, PIN und TAN gibt, damit der dann damit die Überweisung tätigt und den Erfolg sofort dem Webshop mitteilt.
Aus irgendeinem Grund erscheint das einigen Kunden recht suspekt. Keine Ahnung, wieso…
Ich bin mal ins kalte Wasser gesprungen und habe mir Let’s Encrypt Zertifikate im Mailserver installiert. Da mein Webserver von einer (noch) nicht unterstützten Verwaltungssoftware betreut wird läuft da noch mein altes StartSSL Zertifikat. Aber auch da sollte es nur noch eine Frage der Zeit sein, bis Let’s Encrypt unterstützt wird.
Nach der Installation des Clients musste ich die Pfade zu den Zertifikaten anpassen.
Für Postfix in /etc/postfix/main.cf:
smtpd_tls_key_file = /etc/letsencrypt/live/[DOMAIN]/privkey.pem
smtpd_tls_cert_file = /etc/letsencrypt/live/[DOMAIN]/cert.pem
smtpd_tls_CAfile = /etc/letsencrypt/live/[DOMAIN]/chain.pem
smtp_tls_CAfile = $smtpd_tls_CAfile
Und für Dovecot in /etc/dovecot/conf.d/10-ssl.conf:
ssl_cert = </etc/letsencrypt/live/[DOMAIN]/cert.pem
ssl_key = </etc/letsencrypt/live/[DOMAIN]/privkey.pem
ssl_ca = </etc/letsencrypt/live/[DOMAIN]/chain.pem
Dann lass ich schließlich einmal im Monat per Cron folgendes Script laufen:
#!/bin/bash
service apache2 stop
$HOME/.local/share/letsencrypt/bin/letsencrypt certonly -t --agree-tos -m [EMAIL] --renew-by-default --standalone -d [DOMAIN]
$HOME/.local/share/letsencrypt/bin/letsencrypt certonly -t --agree-tos -m [EMAIL] --renew-by-default --standalone -d [JABBERDOMAIN]
service apache2 start
service dovecot restart
service postfix restart
openssl pkcs12 -export -in /etc/letsencrypt/live/[JABBERDOMAIN]/fullchain.pem -inkey /etc/letsencrypt/live/[JABBERDOMAIN]/privkey.pem -out /etc/letsencrypt/live/[JABBERDOMAIN]/fullchain.pkcs12 -name [JABBERDOMAIN] -passout pass:changeit
keytool -delete -alias [JABBERDOMAIN] -storepass changeit -keystore /etc/openfire/security/keystore
keytool -importkeystore -deststorepass changeit -destkeypass changeit -destkeystore /etc/openfire/security/keystore -srckeystore /etc/letsencrypt/live/[JABBERDOMAIN]/fullchain.pkcs12 -srcstoretype PKCS12 -srcstorepass changeit -alias [JABBERDOMAIN]
service openfire restart
Es ist ein gutes Gefühl zu wissen, dass ich mich da nie wieder mit Zertifikaten werde herumschlagen müssen.
Und ja, das Default-Passwort von Openfires keystore ist anscheinend wirklich „changeit“. :-/