🇩🇪 — Hi, ich bin Martin Ueding; Physiker, Maschinenlerner, Softwareentwickler und Fahrradaktivist. Ich habe recht früh mit dem Programmieren angefangen und schreibe darüber im Bereich Computer. Im Physikstudium bin ich immer weiter in die Computerphysik gegangen, meine Studiumsunterlagen sind noch immer Teil dieser Webseite. Nach der Promotion bin ich in die Wirtschaft gewechselt. Seit dem Abitur habe ich meine Wege mit dem Fahrrad erledigt, Radtouren unternommen und irgendwann auch Radreisen.

Aktuell schreibe ich am meisten zu Verkehrsthemen, manchmal auch noch ĂĽber Wissenschaft, Maschinenlernen oder anderen Dingen, die mir einfallen. Die eher technischen Dinge schreibe ich meist auf Englisch, den Rest auf Deutsch.

🇺🇸 — Hey, I am Martin Ueding, a physicist, software developer, machine learning researcher and a traffic policy activist from Germany. On my blog you can find all my physics study material, English articles about computer and programming, about science and travel. The articles about traffic policy are in German.


Mich findet man auch auf anderen Plattformen und Webseiten:


Stressfaktor OxfordstraĂźe und Bornheimer StraĂźe

Seit kurzem habe ich einen Pulsmesser, und den hatte ich neulich bei einer Erledigungstour in die Stadt getragen. Ich wollte zum Globetrotter in der VorgebirgsstraĂźe, das ist im Westen der Stadt. Ich wohne ganz im Osten, ich musste also einmal durch das Zentrum. Und da bin ich dann ganz todesmutig einfach Bertha-von-Suttner-Platz, OxfordstraĂźe, Berliner Freiheit, Bornheimer StraĂźe entlang gefahren.

FĂĽr die, die sich in Bonn nicht auskennen, hier mal ein paar EindrĂĽcke entlang der Strecke. Das hier ist der Bertha-von-Suttner-Platz Richtung Westen:

Foto Bertha-von-Suttner-Platz

Man hat einen Schutzstreifen, der zum Überholen ohne Sicherheitsabstand einlädt. Dann hat man noch eine Dooring-Zone beim Taxistand. Dort stand an jenem Tag aber nur ein Lieferwagen.

Weiterlesen…

Making Adapter Code More Testable

Part of my Vigilant Crypto Snatch project are the marketplaces. The most popular is the Kraken one. I use the krakenex Python library to interface with that. In the UML diagram you can see how the KrakenexMarketplace directly uses the krakenex library:

In order to instantiate the KrakenexMarketplace, one needs to supply the API key. One does this via the KrakenConfig, which is just a data class that contains the API key and associated secret.

Weiterlesen…

Component Facade without Incomplete Imports

My current hobby Python project is the Vigilant Crypto Snatch. This has grown to a size which made me refactor it a few times by now. Recently I've refactored it towards the clean architecture. I have introduced a two-level module structure such that I have components like configuration, marketplace, telegram and so on.

In a very reduced way, each of these components contains interface classes, concrete implementations and factory functions. They are then used from outside. This is what the dependency graph looks like (made with PlantUML), although I cannot show free functions in UML:

There are a few ways that one can do the import statements in Python. And I have been bitten by cyclic imports and got frustrated about that. When searching the web for cyclic imports in Python, one will find many articles about dumb incarnations of the problem. Somebody really has a cyclic dependency in their components, and then there is no way to get it right. But with Python one can get cyclic imports even when one doesn't have cyclic dependencies. And this is what this post is about.

Weiterlesen…

KĂĽchen-Psychogramm eines AuĂźendienstleisters

Die Tage war ich mit dem Fahrrad unterwegs und sah einen AuĂźendienstmitarbeiter eines Industrieunternehmens mit einem groĂźen Handwerkerwagen auf dem Radweg stehen. Ich habe neben dem Auto angehalten, und durch die geschlossenen Fenster auf den Radweg gestikuliert. Der Fahrer lieĂź das Fenster herunter, und drĂĽckte mir diesen Satz rein:

Wenn du einen Führerschein hättest, wüsstest du: Autos mit rot-weißen Streifen dürfen alles.

Dann machte er das Fenster wieder zu und grinste dabei ganz ĂĽberlegen. FĂĽr ihn war die Unterhaltung damit dann beendet. Er schaute wieder auf sein Klemmbrett und ignorierte mich.

Das ganze hat mich natürlich ziemlich aufgeregt, aber ich habe das vor Ort nicht weiter verfolgt. Vielmehr habe ich darüber nachgedacht, wie viel eigentlich in diesem Satz drinsteckt. Das möchte ich hier mit Küchenpsychologie einmal auseinandernehmen.

Weiterlesen…

Garmin HRM-Dual Herzfrequenzmesser-Brustgurt

Ich habe bisher bei Radtouren und Joggen nur meine Position aufgenommen. Damit kann man dann Entfernung, Geschwindigkeit und Zeit auswerten. Strava schätzt daraus dann auch noch die verbrannten Kalorien ab.

Um das etwas zu erweitern, habe ich mir einen Pulsmesser gewĂĽnscht. Dabei gibt es die Uhren, und auch die Brustgurte. Generell sind Brustgurte genauer, und unter Handschuhen ist eine Uhr vielleicht nervig. Daher habe ich einen Brustgurt ins Auge gefasst. Der HRM-Dual von Garmin schien mir eine gute Option zu sein, da er Bluetooth unterstĂĽtzt. So kann ich ihn direkt an mein Handy koppeln und mit einer App nutzen. Zumindest in der Theorie.

Weiterlesen…

Camera Tether and Preview

I occasionally take selfies, because it is much easier than to go to a professional photographer. The results are not as good, but at the same time I can learn more about photography myself. The problem with selfies is that one doesn't really see what is going on, unless one takes them with a smartphone. But my arm is too short to give a natural distance between camera and myself. So I take a tripod. But the selfie camera in my phone has a small focal length, so it doesn't really work on longer distances.

Therefore I take my DSLR camera, an ancient Canon EOS 350D. I have an infrared remote for it, but one cannot see the pictures that I have taken. I can go behind the camera, and take a look, but that's not really suitable for adjusting a single light a little bit. Also I have no idea whether my face was within one of the focus points.

Luckily one can attach the camera via USB to the computer. Then one can take a picture and directly download it. For this I use gphoto2 on Linux. With a little Python script (see below), I just periodically take pictures and download them to the laptop.

Weiterlesen…

Die BaumschĂĽtzer

In Bonn gibt es zwei Radwegsprojekte, die in der Lokalpresse heiß diskutiert werden. Die Radwege durch die Rheinauen auf beiden Rheinseiten sollen verbreitert werden. Den rechtsrheinischen Radweg habe ich in einer Fotostrecke dokumentiert. Man sieht, wie dort sehr häufig sehr schmale Radwege vorhanden sind. Diese sind für beide Richtungen ausgewiesen, aber einfach viel zu schmal. Am linksrheinischen Radweg hat der Radentscheid Bonn neulich eine Ampelaktion durchgeführt, um auf die zu schmalen Wege hinzuweisen.

Die Diskussion ist ziemlich hitzig geworden. Um die Radwege auszubauen, müssten jeweils grob 50 Bäume gefällt werden. Teilweise sind sie so nah am Radweg, dass sie deshalb gefällt werden müssten. Bei anderen kann aber eine Beschädigung der Wurzeln bei den Tiefbauarbeiten nicht ausgeschlossen werden, sodass man sie präventiv fällen würde.

Niemand möchte diese Bäume gerne oder leichtfertig fällen. Es fahren viele Leute mit dem Fahrrad durch die Rheinauen, weil die Strecke am Rhein auf beiden Seite eine gute Verbindung zum Pendeln ist. Und entsprechend Kapazität bräuchte es. Aktuell kommt es immer wieder zu Konflikten, weil die Wege so schmal sind. Ein Ausbau würde dort Abhilfe schaffen.

Weiterlesen…

Diagram Creation Tools

There are various programs to create diagrams, and so far I haven't found the one which really satisfies me. I want to create flow charts, UML diagrams and sequence diagrams. Also I want to layout arbitrary graphs that come up with say game theory projects.

In this article I will take a look at a few graph systems that I have used over the time:

  1. GraphViz
  2. PlantUML
  3. Blockdiag
  4. Dia
  5. Draw.io
  6. Umbrello

Weiterlesen…

Ausfälle bei 1&1 DSL

Wir haben unser Internet als VDSL 50 mit Vectoring, aktuell über 1&1. Und das klappte auch wunderbar, bis zu jenem Tag. Da kam ein DSL-Techniker vorbei, um den Nachbarn anzuschließen. Das Haus ist ein Mehrparteienhaus, mit einem wahrscheinlich furchtbar unübersichtlichen Verteilerkasten im Keller. So einem, in dem Zig Klingeldrähte ankommen, und die irgendwie notdürftig organisiert sind. Der Techniker hat beim Festschrauben des einen Kabels unser Kabel gelockert, jedenfalls war dann die Internetverbindung komplett weg.

Glücklicherweise habe ich das rechtzeitig gemerkt und konnte den Techniker noch vor dem Wegfahren ansprechen. Er hat dann noch unser Kabel wieder festgeschraubt. Seit dem hatten wir aber regelmäßige Ausfälle. Also nicht so regelmäßig, aber grob einmal die Woche. Und mit der Zeit wurden sie immer häufiger, bis sie aktuell grob täglich auftreten.

Ich habe dann bei 1&1 angerufen und wollte die Störung behoben haben. Mir scheint auch die Ursache recht klar zu sein, jemand muss den Verteilerkasten unten nochmal aufräumen. Jedoch sagte man mir, dass bei derart selten auftretenden Störungen nichts gemacht werden kann. Es bräuchte so 5 Störungen in 26 Stunden, damit man das überhaupt diagnostizieren könnte.

Weiterlesen…

Besucherstatistik (November 2021)

Ich werde immer mal wieder gefragt, wie viele Besucher ich auf dieser Webseite habe. Ich weiß es nicht so recht. Mir ist die Privatsphäre meiner Besucher:innen wichtig. Also nicht so wie das immer in den Cookie-Bannern steht, direkt bevor man abnicken soll, dass man alle Cookies von Drittanbietern akzeptiert. Ich habe hier auf der Webseite weder Google Analytics, noch Matomo. Von daher bleibt mir nur das Log des Webhosters, und dort sind die IP-Adressen auch alle durch einen Standardwert ersetzt. Ich kann also maximal eine Höchstgrenze für die Seitenaufrufe abschätzen.

Vom Hoster bekomme ich die Logs auch nur fĂĽr grob zwei Wochen, mehr liegt dort nicht auf dem FTP-Server. Diese Logs habe ich:

Datei Von Bis
web.log-20211107.gz 31.10.2021 07.11.2021
web.log-20211114.gz 07.11.2021 14.11.2021
web.log 14.11.2021 16.11.2021

Weiterlesen…