When one door closes, another one opens. And so we have our own craftbeer shop and microbrewery in Volksdorf now: Locksmith brewing . And our fridge looks like this:

Cheers!
When one door closes, another one opens. And so we have our own craftbeer shop and microbrewery in Volksdorf now: Locksmith brewing . And our fridge looks like this:
Cheers!
I recently discovered jazda, which is a hackable bike computer. Well, actually, right now, it is a smart watch with a half-finished bare-bones core app that wants to become a biking app when it is grown up. You need to compile your own rust-based operating system and flash it using an STLink 2.0 pluged into a SWD breakout board dev kit, plugged into the charging cable, attached to the watch. So what can possibly go wrong? 🙂
The devkit arrived quickly, containing the Bangle2js watch, a STLink 2.0 and the breakout board to connect the STLINK to the charging cable and a few stickers. Do NOT expect a manual yet!
In this post, I am going to describe the steps to setup jazda, based on my first experiences.
tockloader
to flash things to the watch.python setup.py install --user
), ideally one could do this in a container or python venv to avoid polluting your local python modules. The upstream tockloader did not know the board name(?!), TODO: check out if/why upstream tockloader is not sufficient.python3-z3
, so install that from your package manager or via pip, if you want to run the test app.openocd
(which is used by tockloader) to do the actual flashing. The version in Debian testing/bookworm (0.11.0-1(?)) was sufficiently up to date.stlink-tools
(otherwise, openocd produced a Error: libusb_open() failed with LIBUSB_ERROR_ACCESS
error message). The reason is that this adds udev rules that permit any user in the plugdev group to do flashing to the STLINK without being root.just
is a command line something (similar to make, but less powerful). Debian did not have a package ready, but cargo install just
provides it to you. You need it to build the jazda Core app.make
in the directory boards/nordic/sma_q3
.
a907d5297a74f999bb98f860151a1dea87c021b3cf9fa247f7fae299615b88c2 target/thumbv7em-none-eabi/release/sma_q3.bin
make flash
with the STLINK plugged in and the running watch attached.sma_q3.bin
to the watch. and output a success info on the terminal.So, next I compiled the libtock-rs sample app (note: you need python3-z3 installed for it, see requirements section above!). The jazda wiki explains how:
cargo install elf2tab EXAMPLE=leds make nrf52840
If that succeeds, flash it and run it:
tockloader install ./target/thumbv7em-none-eabi/release/examples/leds.tab --board sma_q3 --openocd tockloader listen --board sma_q3 --openocd --rtt
This made the watch blink and vibrate until I killed the app with ctrl-c.
Once you are sure, it worked great, you need to uninstall the example app, or you’ll end up with a full memory and you’ll be unable to install anything else.
use tockloader list
–board sma_q3 –openocd and tockloader uninstall
–board sma_q3 –openocd to remove apps.
Now on to the real application. You need two repositories checked out in the same directory: Core, yanp. libtock-rs (yes, the one from the sample app above will be automatically checked out and build as part of the Core build process, so it is not needed to keep around anymore).
Before compiling succeeded, I needed to add the thumbv7em-none-eabi
target to rust. That went like this:
rustup target add thumbv7em-none-eabi
If you have just
installed (see requirements section), it will be as easy as entering the “core” repository and issueing
just build_bin map
If all this goes well, you’ll end up with an app as: target/thumbv7em-none-eabi/release/map
.tab
To install the app, connect your watch, and try to install the app
tockloader install target/thumbv7em-none-eabi/release/map.tab --board sma_q3 --openocd
and starting the app worked by issueing:
just listen
which is just a shorthand for:
tockloader listen --board sma_q3 --openocd --rtt
once, it runs, just unplug the charger to keep the maps app running. To “stop” the app, connect it again, tockloader listen
and interrupt with ctrl-c.
This will display a map. There is also an app called “speed”, it is compiled and installed the same way as the map app.
Da erstellen zwei Forscher eine “Notiz” mit dem schönen Titel “„Je höher die Impfquote, desto höher die Übersterblichkeit“, ein Mitglied der “Partei Bürger für Thüringen” (und vermutlich Coronaskeptikerin) macht sie publik und schon redet alle Welt davon.
Prompt kommen Faktenchecks, die allerdings wenig Details verraten oder die Ergebnisse nachvollziehen lassen. Also schnell selber die Daten runtergeladen und angeschaut. Eines vorweg, transparent in Datenquellen und Methodik ist die Originalnotiz, Bonuspunkte dafür (die statistischen Berechnungen stimmen auch). Auf der anderen Seite zeigt sich wie schnell mit dem Auswählen des richtigen Datensatzes und eines Meßwertes der für Ausreißer sehr anfällig ist, gezeigt werden kann, was gezeigt werden soll(?!). Der Kapitalfehler ist wohl sich auf lediglich einen 4 Wochenzeitraum zu beziehen und statistische Schlußfolgerungen ziehen zu wollen.
Anstatt einer (nach Bevölkerung gewichteten) Korrelation von +0.31, kommt bei mir dann eine (ungewichtete) Korrelation von -0.82 heraus. Was sind die Unterschiede zwischen den Analysen?
Ich habe als Basiswert für die Sterblichkeit die Jahre 2016-2019 herangezogen und nicht die Werte von 2016-2020 wie im Original (2020 war die Sterblichkeit schon coronabedingt höher, dieses Jahr mit in den Basisvergleichswert zu ziehen ist also nicht legitim). Ausserdem habe ich die gesamten ersten 43 Kalenderwochen von 2021 als aktuellen Vergleich anstatt nur der KW 36 bis KW 40 verwendet. Und auf einmal sieht die Korrelation im Scatterplot ganz anders aus. Was auf den ersten Blick auffällt, die westlichen Bundesländer sind schön linear angeordnet, während die östlichen wesentlich weiter gestreut sind und eine deutlich höhere Übersterblichkeit zeigen. So weit, so gut. Zu bemerken ist, dass das immer noch eine ziemlich krude und simplifizierende Analyse und Darstellung ist. Was fehlt?
Meine Rohdaten und Analyseskripte sind hier zu finden. Ich bitte um Notiz wenn Sie darauf aufbauen oder etwas verfeinern.
Diese “quick and dirty” Analyse entstand in Vorbereitung eines Seminars zur kritischen Hinterfragung von wissenschaftlichen Studien, erhebt aber selber keinen Anspruch auf wissenschaftliche Gründlichkeit und Vollständigkeit. Geäußerte Meinungen sind meine persönlichen und repräsentieren weder die Haltung der Universität Hamburg noch der Professur für Digitale Märkte.
Originalnotiz: Steyer, Rolf, und Gregor Kappler. 16. November 2021. „Je höher die Impfquote, desto höher die Übersterblichkeit“.
Olivers Traxxas Summit (which is a cool car, and an expensive one!) has two LiPo batteries which have a female Traxxas iD plug (TRX). And it has a balancing connection built in. Unfortunately, Traxxas chargers are horribly expensive, and we have a nice one. It just does not have a Traxxas iD plug for charging.
Solder iron to the rescue, now we have a nicely working adapter. But all that aside, what was REALLY difficult to find out is the pin layout of the XT plug used for balancing of a S2 battery. So without further ado: This is the plug that goes into the balancing port of the charger:
Looking at the plug with the metal pins visible from the top from left to right:
(German keywords: Pinbelegung XT Balancing Stecker 2S)
The pinephone contains amazingly few binary blobs. One of those is the modem firmware of the Quectel EG-25G. This modem is quite capable in terms of eg. LTE bands covered, but prone to crashes and other mysterious flaws. There is a firmware upgrade available (EG25GGBR07A08M2G_01.003.01.003), but people have reported instabilities with it.
Fortunately, biktorgj has created a (kind of) FOSS firmware that can be flashed on the modem, removing one more blob and making it easier debuggable. Kind of because the modem consists of two parts, a Linux userland (yes, it runs a full-fledged linux) and a binary firmware blob for the DSP inside (which does all the actual communication part). The DSP blob will not be replacible, but the userland is. So this is what I did:
The latest release at this point in time is 0.3.6 and is here (you might want to check the latest release version on the release page).
You need adb and fastboot (sudo apt install fastboot adb
) installed on your pinephone,. The installation itself was just these commands on the pinephone :
wget https://github.com/Biktorgj/pinephone_modem_sdk/releases/download/0.3.6/package.tar.gz # any other temporary directory name/place will do below mkdir firmware tar xvzf package.tar.gz -C firmware cd firmware sudo ./flashall # took less than 30 seconds: last lines output was: "Finished, if everything went well, run fastboot reboot to restart the modem." # Do not reboot the modem before flashing the recommended DSP upgrade though) wget https://github.com/Biktorgj/quectel_eg25_recovery/raw/EG25GGBR07A08M2G_01.003.01.003/update/NON-HLOS.ubi # you only need to flash the newer DSP blob once, not on every future upgrade... sudo fastboot flash modem NON-HLOS.ubi fastboot reboot
This FOSS Firmware does not do some loudness gain that the original one did, so the README (useful to read!) recommends to:
Call volume: May need some tweaking to the ALSA UCM configuration file. You can do this by editing
/usr/share/alsa/ucm2/PinePhone/VoiceCall.conf
. These values seem to work well:
cset "name='AIF1 DA0 Playback Volume' 90%"
cset "name='AIF2 DAC Playback Volume' 90%"
A reboot is required after changing this configuration file.
That was it!
Note1: After a fastboot reboot, mobile data did not immediately work. I powered the phone off, and took the battery out. After rebooting, data worked just fine. Not sure if it was necessary or even this, but it might be in case of trouble.
Note2: And before you ask: the modem cooperates better with ModemManager, resetting itself when it notices some inconsistencies, it makes HD audio possible, it makes routing the audio through USB possible, and it has no persistent data partition (meaning you cannot corrupt the modem if you cut power to it unexpectedly). We believe it is quite stable together with current mobian unstable/bookworm, but there is no guarantee, of course.
Auf golem.de schreibt Sebastian Grüner in einem Meinungsbeitrag Wie das Internet am Kapitalismus scheitert. Er behandelt die Ausfälle einiger großer Cloud und CDN-Anbieter (Fastly, Amazon, …) die weite Teile des WWW außer Gefecht setzten. Die Hauptthesen des Beitrags ist, “dass der Aufbau der aktuellen Internet-Infrastruktur immer mehr von Konsolidierung und damit von kapitalistischen Zwängen geprägt ist.” Und bevor eine Lösung in Sicht ist, “muss das Problem deutlich werden; vielen Nutzern, Betreibern, politischen Enscheidungsträgern ist es das nämlich nicht.”
Lieber Herr Grüner, oft stimme ich Ihnen zu, und auch hier stimmt vieles: viele Organisationen verlassen sich zu sehr auf einzelne “Cloud”anbieter ohne Alternativen in Betracht zu ziehen. So weit, so gut. Aber wenn diese Anbieter ausfallen und das eigene Geschäft offline ist, dann ist das erstmal nicht das Problem der Nutzer (im Sinne von Endnutzern), Betreibern (you get what you pay for) oder politischen Entscheidungsträgern (was sollte hier reguliert werden?), sondern der beauftragenden Organisation selber.
Das hier die Keule des Kapitalismus geschwungen wird, ist vermutlich clickbait. Mit Kapitalismus hat es nämlich nichts zu tun, dass Kunden sich auf einen großen Anbieter verlassen (die produzierenden Genossenschaften in der DDR waren größer und mindestens genauso dünne Flaschenhälse für die Supply Chain). Und Sparsamkeit ist nun wahrhaftig keine Tugend des Kapitalismus. 1958 hat Walter Ulbricht als 7. von 10. Geboten der sozialistischen Moral verkündet: “Du sollst stets nach Verbesserung Deiner Leistung streben, sparsam sein und die sozialist. Arbeitsdisziplin festigen.”
Abgesehen davon ist unklar, ob eine solche Konzentration auf große CDNs in einem “öffentlichen” Internet nicht ebenso stattgefunden hätte. Gegenfrage: sind die Serviceanbieter in Kuba zuverlässiger?
Zumindest bei meinem Arbeitgeber, einer Universität und Anstalt des öffentlichen Rechts, bricht zu Semesterbeginn regelmässig die Studieninfrastruktur zusammen, weil der (einzige?) Datenbankserver überlastet ist, wenn sich mehr als eine Handvoll Personen gleichzeitig über das neue Semester informieren. Genug vom Kapitalismus.
Das eigentliche Argument dass ich Herrn Grüner nicht abkaufe, ist dieses:
Die [für Cloud und CDN Dienstleistungen] nötigen Vorab-Investitionen in Hardware und Infrastruktur sind aber derart riesig, dass es wohl allein deshalb schon zu einer Art natürlicher Konsolidierung kommt. […]
Ebenso ist es unwahrscheinlich zu erwarten, dass sich die Seitenbetreiber selbst um Redundanz in den von ihnen gebuchten Dienstleistern bemühen. Eine parallele Infrastruktur für Ausfälle zu betreiben, die im Zweifel nur wenige Stunden im Jahr umfassen, ist wirtschaftlich oft nicht zweckmäßig.
Zum ersten Absatz: Ja, wenn man ein globales CDN aufziehen will, sind die Investitionen groß. (Wobei die BBC es sich vielleicht leisten könnte, im Vereinigten Königreich einen 2. oder 3. Server aufzustellen und seine Leser in Togo im Ernstfall für ein paar Stunden zu vernachlässigen). Aber es ist auch unnötig, dass ottos-schnuersenkel-shop.de ein globales CDN aufbaut. Wenn man das Risiko minimieren will, kann man a) redundante Datenzentren auch bei einem Anbieter buchen, oder b) einen zweiten CDN mit einbeziehen. Amazon verlangt keinen exklusiv-CDN Vertrag. Und Plattformen lassen sich auch auf mehren Anbietern hosten, ohne ein eigenes CDN Datencenter aufbauen zu müssen. Wenn der Bedarf dafür da ist, wird es auch Dienstleister geben, die über mehre Cloudanbieter gestreute High-Availability Server anbieten, ohne dass Onkel Otto eigene Server im Keller seines Schnürsenkelgeschäfts installieren muss.
Zum zweiten Absatz: wenn sich Seitenbetreiber nicht um die Redundanz der von Ihnen gebuchten Dienstleistungen bemühen, dann ist das schlicht kalkuliertes Risiko, und ein Ausfall ist einfach eine Folge dieser Kosten/Nutzenrechnungen. Und das kann man auch der BBC zumuten. Rechnungen der Art, “wie viel Reserve braucht man wenn man bei einer Ausfallwahrscheinlichkeit von X%, eine Servicequalität von Y% aufrecht erhalten will”, habe ich im 1. Semester ausrechnen müssen, dass ist wahrlich kein Hexenwerk.
Wenn die Mannschaft der Feuerwehr keinen Helm bekommt, dann ist eine Verletzung auch keine Machenschaft des Kapitalismus, sondern eine Folge von unsäglicher Kosten/Risikoabschätzung. Wenn etwas “wirtschaftlich nicht zweckmäßig” ist, dann sind die Kosten des Risikos per Definition geringer. Ansonsten *wäre* es eben wirtschaftlich zweckmässig. Wenn Seitenbetreiber hier auf Risiko setzen, ist das wirklich nicht das Problem der Gesellschaft, der Politik oder der Endnutzer. Genug medienwirksame Augenöffner bezüglich der Risken aus der letzten Zeit hat der Beitrag ja eindrücklich beschrieben.
Ihr Argument wird allerdings gültiger, je weiter weg man vom direkten Impact auf “Webseiten” kommt. Die Redundanzen der grundlegenden Infrastruktur (ich rede nicht vom Webhosting und CDN) sondern von den OSI Schichten 1-3, kosten Geld und ein Ausfall lässt sich nur sehr bedingt einzelnen Inzidenzen zuordnen, bzw. von Privatakteuren stemmen. Und ein Seitenanbieter im Süden Neuseelands ist nun mal nur durch zwei Unterseekabel mit dem Norden (und dieser durch wenige mit dem Rest der Welt) verbunden und hat wenig Wahl- oder Einflussmöglichkeiten.
Die Lösung des Problems? Betreiber müssen sich überlegen welche Cloud/CDN-Servicequalität sie benötigen. Und wenn ein Ausfall teurer ist als eine redundantere Infrastruktur, dann sollte man in diese investieren. Gerade bei gut zuzuordnenden Dienstleistungen auf die Servicequalität und bei leicht wechselbaren Anbietern (es ist ja kein Monopol) ist das durchaus möglich.