Category Archives: Privat

✞ Timo Hellmer

Letzten Donnerstag verstarb mein Kamerad bei der Freiwilligen Feuerwehr Volksdorf bei einem tragischen Autounfall. Er wurde 27 Jahre alt. Das Auto gehörte seiner Mutter, die es braucht, um seine im Rollstuhl sitzende Schwester zu transportieren. Um zumindest einen Teil Ihrer Sorgen und Schmerzen zu lindern bitten wir um Spenden auf ein eingerichtetes Spendenkonto. Details dazu finden sich im Aufruf unseres Landesbereichsführers Harald Burghart.

Mach es gut Timo!

A rant on Garmin

I thought I am too old to write rants, but I need to get this one of my chest: we own a Garmin Drive 51 LMT-S, which currently (July 2022) is still being sold by Garmin. It is right now advertized as “Provides real-time services² such as live traffic and live parking³” with the caveat “²To access live information, you must download the free Smartphone Link app.” OK, so far so good.

Now, the problem is that Smartphone Link app! I could go on about the trackers included in the app (Facebook Analytics, Facebook Login, Facebook Places, Facebook Share, Google Analytics) or the fact that it does not work unless you are logged into your mobile with a Google Play account. Or the excessive permissions  (WRITE_EXTERNAL_STORAGE, READ_PHONE_STATE, READ_EXTERNAL_STORAGE, READ_CONTACTS, GET_ACCOUNTS, ACCESS_FINE_LOCATION) that is requests.

But let us keep all that aside for now. The important thing: IT DOES NOT WORK!

The Link app was last updated three years ago on Oct 31, 2019 which might indicate the priority Garmin assigns to the app. It works exactly once after pairing, and fails to reconnect on ALL subsequent connection attemps (mind, that the Android mobile phone automatically and successfully connects to the Garmin device, but the Smartlink app would not be able to see or establish a connection. It does not matter how often on clicks the reconnect button, it will only work for me if I remove the bluetooth pairing and restart the thing from scratch. And even than it will only work in about 40% of all cases!

Furthermore the Smartlink app likes to pop up erratically and “ding” even when there is not Garmin close by. Reviews on Google Play say that the Smartlink app easily cuts their battery life in half. So, to sum it up: THERE IS NO WAY I CAN ENJOY THE FEATURES THAT GARMIN ADVERTIZES AND PROMISES. IT NEGLECTS THE ONLY TOOL THAT ALLOWS TO GET REAL-TIME TRAFFIC INFORMATION ON A POPULAR ENTRY-LEVEL GPS NAVIGATION DEVICE. I FEEL CHEATED AND DISAPPOINTED BY GARMIN! AND I WILL NEVER BUY A GARMIN NAVIGATION DEVICE AGAIN BECAUSE OF THIS!

Without real-time information I can just use a local offline navigation app, thank you, Garmin!

There are 16.3k reviews on Google play and it receives an average rating of 2.7 (it is only that high as the ones from many years ago were mostly positive, but basically every rating from the last years is 1-2 stars). Does Garmin have a marketing department and is somebody reading these Google store reviews? They are enlightening:

“need to constantly “forget” and “pair” my Drive 5 to make it accept Smartphone Link.” (June 15, 2019)

Most of the time trying to establish a Bluetooth connection is a chore. I’ve tried three different devices this year and none can establish a link to the Garmin Navigator via this app without fumbling and retrying for at least 15 Minutes each time.” (May 1, 2022)

It won’t shut off, comes on even when you aren’t using the device or anywhere near it. Even if you force stop the app, it comes on again trying to connect to the device. (January 8, 2020)

.

A new hop(e)

Logo of Locksmith Brewing
Locksmith Brewing

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:

Our fridge full of craftbeer
A normal fridge on a normal day…

Cheers!

An open Bottle of Wiener Lager next to a full glass
Wiener Lager by Locksmith Brewing

Jazda

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.

Install required things

  1. You will need tockloader to flash things to the watch.
    I just installed it as regular user (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.
  2. The example app later requires python3-z3, so install that from your package manager or via pip, if you want to run the test app.
  3. You need 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.
  4. You need to install the 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.
    Note: restarting udev and re-plugging the stlink is required to make use of the added udev rules.
  5. Install rust (which is required for all the compiling)
    I first installed rust-all and rust-src on my Debian testing, in order to avoid the rustup script. (I just don’t like to cheat on my package manager).
    After failing with the rust version provided by the Debian package manager, I uninstalled everything and locally installed rust via rustup for my user. (sorry package manager, I hope you’ll forgive me!)
  6. 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.

Compile and flash the tock kernel

  1. Compile the tock kernel
    The board setup is described in https://framagit.org/jazda/tock/-/tree/flashil/boards/nordic/sma_q3
  2. Just run make in the directory boards/nordic/sma_q3.
  3. This resulted in the file:
    a907d5297a74f999bb98f860151a1dea87c021b3cf9fa247f7fae299615b88c2 target/thumbv7em-none-eabi/release/sma_q3.bin
  4. I then issued make flash with the STLINK plugged in and the running watch attached.
    This flashed the file sma_q3.bin to the watch. and output a success info on the terminal.
    There was NO change of the display in the watch which continued to show the time, and the display simply froze dead. (not even 30s button pressed will cause any reset or anything) You might be forgiven if you believe that you just bricked your brand new watch. Your watch is running the tock kernel, but does not do anything useful yet. The next step is to compile and run an example app, so see if things worked out.

Compile/run an example test app

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.

Compile and run the real jazda “core” app

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

jazda running in its full beauty! I have walked 0 decameters with it yet.

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.

See the elaborate bike holder? Themal insulation for hot water pipes works extremly well

This will display a map. There is also an app called “speed”, it is compiled and installed the same way as the map app.

Balancing Traxxas LiPos

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.

XH 3-poliger Stecker

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:

  • Red cable: Minus
  • Black cable: Balancing
    (plus of 1. cell)
  • Yellow cable: Plus

(German keywords: Pinbelegung XT Balancing Stecker 2S)

Wer kommt her? Die Feuerwehr

und ich! Seit August 2021 bin ich offiziell bei der Freiwilligen Feuerwehr Hamburg in der Einsatzabteilung (FF2931).

Zum Glück nur eine Übung
Wirklich nur eine Übung meine Damen, lassen Sie sich nicht stören!

Der “Kapitalismus” lässt das Internet nicht scheitern (zumindest nicht in diesem Fall)

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.

Absima RC cars

Oliver hat sich von seinem Taschengeld ein Absima “First Step Perfomance” Auto gekauft. Gelegenheit für mich mehr über Akkutechnik, Steckerformate und “LiPo Balancer” zu lernen.

Es ist dieses Auto: Absima 1:14 EP Monster Truck RACING. Während die meisten RC Autos einfach flache Akkupacks mit Tamiya Stecker, T-Stecker, oder XT60 Steckern haben, hat dieses allerdings zwei Mignonähnliche 3.7V 1.500mAh LiOn Batterien (TYP AGB171-042). Leider ist es unklar welche Dimensionen diese Batterien haben und auch der Charger (AGB171-041) gibt keinerlei technischen Spezifikationen preis. Bei Absima selber für 15€ (nicht erhältlich), im Fachhandel 2Stck für 22€ ist ein Wort für Akkus.

Sobald wir das Gerät haben, werde ich hier für die Nachwelt ein paar ausgemessene technische Daten posten, damit andere es leichter haben Ersatzbatterien zu organisieren.

Update: Die Batterien sind normale 18650 LiIo Akkus (steht sogar auf dem Label). Sollten auf dem Pluspol allerdings einen Knubbel haben, eine flache Seite bekommt keinen Kontakt (wenn man nicht mit einer kleinen Unterllegscheibe nachhilft :-)). Ein LiPo od LiIon Batterypack hat in dem Modell allerdings keinen Platz bzw. keinen Stecker vorgesehen. Das müsste man etwas für “modifizieren”… Allerdings hat das Gerät mit meinen China-Akkus deutlich weniger Power als mit den mitgelieferten Absima Akkus (Innenwiderstand?).

Die Splinte (Body Clips) sind insgesamt 20mm lang und haben eine Drahtdurchmesser von 0.8mm, allerdings ist das Loch relativ groß und 1mm Draht sollte gehen…

P.S. Nach einiger Erfahrung. Nie wieder Absima Autos, zumindest in dieser Preisklasse ist die Verarbeitung und Qualität absoluter Schrott.

Pure-maps on Mobian/PureOS

I wanted to run Pure Maps on my Pinephone and the Librem 5, but did not want to install the flatpak version. So I learned more about Debian packaging, build systems, Qt, GLES than I ever wanted to know. First, I talk about the packaging nags and open issues and below I will detail how to just *use* pure-maps.

For Packagers:

My packaging is currently all in https://salsa.debian.org/Mobian-team/puremaps-packaging comprising 5 source packages. It is kind of straightforward debian packaging, with a few snags:

  • s2geometry is packed as library libs2-0 and libs2-dev. UPDATE: it is already in the Debian repositories. the -dev package is a build-dependency for pure-maps. I simply named the package 0.10.0 using current master. The last release was 2 years ago and development has actively continued. Current master annouces itself as 0.10.0 (I am using that commit). Ideally upstream would put out a real release so we have a reference point we can publish. I have an open ticket to formally release a new version.
  • pure-maps contains 2 git submodules in the thirdparty repository:
    gpxpy @ b9219a9f and geomag @ 8eb9a730. Building this requires the submodules checked out and geomag will be installed as poor.geomag, I think. Debian has a python3-gpxpy package (UPDATE) which can be used, so we should be fine patching that out. geomag does not seem to be packaged. build.opensuse.org and salsa.debion.org’s CI build the package fine. autopkgtest and piuparts tests fail, I have not looked into this.
    The last release was buggy and failed to work, so I had to use a more current commit (2.6.0+bab4f3cc-1). puremaps releases pretty frequently, so hopefully we can use a *real* release soon.
    Update: pure-maps has released a proper version now, so that is fine. They have also redone their packaging, so that it can make use of a system gpxpy module, which is good.
  • nemo-qml-plugin-dbus-qt5 has been packaged as libnemodbus1 and libnemodbus1-dev. I am not sure if the package naming is ok, it would also seem reasonable to give them a name that is more according to the upstream source package name. It builds fine and all salsa CI tests pass.
  • mapbox-gl-native is tricky. a) it contains a whole bunch of 3rd party submodules. And while the build on my local machine and on build.opensuse.org work fine. Salsa CI complains about modified source files and unrepresentable changes, failing to build. I am not sure now whether those 3rd party modules are part of the .orig source code or something (I believe not), but that needs solving and I don’t know how (that is the build failure on Salsa). The second issue, is that this is a library and the content should be split into a -dev package. Right now it is all bundled in one big package. The patches on top to make QMapboxGL findable by CMake, place those files in /usr/include/qt5/[QMapbox|QMapboxGL|qmapboxgl.hpp|qmapbox.hpp]. Unfortunately the -qml variant searches in /usr/include/<ARCH>/qt, e.g. /usr/include/aarch64-linux-gnu/ (where all the other similar files are placed, so this needs fixing as it requires the ugly hack mentioned below.
  • mapbox-gl-qml just works out of the box. has a bad hack on top (see above). In order to find mapbox-gl-native, I had to hardcode a search path of “/usr/include/qt/” on top. If the issue in mapbox-gl-native were fixed, this hack would hopefully not be needed anymore.
  • We will have to think about how we achieve that mobian prefers the -gles variants in case of:
    libqt5gui5 | libqt5gui5-gles
    libqt5quick5 | libqt5quick5-gles

    some pinephone meta package needs to conflice the former variants or so…
    I did not want to hardcode a requirement on the *gles versions into puremaps as e.g. the amd64 laptop works just fine with the regular DesktopGL ones. Would appreciate creative solutions by experienced packagers.

For Users:

UPDATE: after a period of inactivity, opensuse deleted the repository. A Debian testing repository (so it will work with Mobian and PureOS byzantium too) is available at http://download.opensuse.org/repositories/home:/spaetz/Debian_Testing/. That page also contains instructions on how to integrate the repository.

You can either download all required .deb files directly from here and install them with or integrate the repository directly (which I do not promise to keep up permanently).

A) Installing the .deb files directly

You will be needing the latest .deb files from:

Download and install with sudo apt ./FILE1.deb ./FILE2.deb ...

It will run using software emulation now (prepending LIBGL_ALWAYS_SOFTWARE=1 to pure-maps), but crash when trying to use hardware acceleration. To fix this, you need to install the -gles variant of Qt (instead of the OpenGL variant), these are the alternatives:
libqt5gui5 | libqt5gui5-gles
libqt5quick5 | libqt5quick5-gles

and by default it will have installed the first variant. Just do:

sudo apt install libqt5gui5-gles libqt5quick5-gles

this will uninstall the non-*gles variant and install the *-gles ones.

Now, just using “pure-maps” will work. It will complain about a missing MAPBOX API key (they call it token), to get started switch to the HERE maps (they are no vector tiles, but at least it displays something), and get a Mapbox API key from them (TODO: write Howto).

B) TL;DR: integrating the repository

as user purism (or mobian):

echo 'deb http://download.opensuse.org/repositories/home:/spaetz/Debian_Testing/ /' | sudo tee /etc/apt/sources.list.d/home:spaetz.list
wget -qO- https://download.opensuse.org/repositories/home:spaetz/Debian_Testing/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/home_spaetz.gpg > /dev/null
sudo apt update
sudo apt install libqt5gui5-gles libqt5quick5-gles pure-maps

Getting maps

Now, just using “pure-maps” will work. However upon start, it will complain about a missing MAPBOX API key (they call it token), to get started switch to the HERE maps (they are no vector tiles, but at least it displays something), and get a Mapbox API key from them (TODO: write Howto).

Notes: Getting location to work

Starting /usr/libexec/geoclue-2.0/demos/agent as user purism before pure-maps makes location work. (perhaps not needed on Mobian?) When the geoclue agent is implemented in phosh this should not be needed anymore.

Thanks!

Credits to rinigus, Bhushan Shah (@bshah:kde.org), @xalius:matrix.org, @PureTryOut:matrix.org, the helpful sur5r@#debian-mentors and everybody who patiently endured my quest for 2 days.