Hi, I am Martin Ueding, a physicist (M.Sc.), programmer and PhD student in Lattice QCD.

Although I am German, most of the content on this website is in English as both science and programming is communicated mostly in English.

Since 2011, I study Physics at Bonn university. I have finished my Bachelor degree in 2014 and my Master thesis in 2017. See the studies section for the study related material.

At the age of 13 I started programming with C. Then I looked into HTML and CSS, started to use PHP and then MySQL. Looking for something to write software with a nice user interface with, I came to Java. Then I looked into more languages like Bash, Python, JavaScript, GNU Octave, VimScript, Fish. From then on, I tried to do most things in either Python 3 or C++11, so that I only have two languages, which I know well. For my work I now use R and also picked up the Wolfram Language. See my portfolio.

My most popular project are the thinkpad-scripts which I wrote to get all the screen and digitizer features working effortlessly on my ThinkPad. It is a collection of Python modules that take care of docking and screen rotation.

For several years now, I have been almost paperless. The main challenges are papers I get from other people and hand written notes. The former can be faced with a scanner, the latter was more interesting. I own a Wacom Tablet since long before I started to become paperless, but I never had a good software for note taking. Since I did not find one at first, I wrote jscribbe. After I was almost done with that, I discovered Xournal which I now use most of the time.

You can also find me on other platforms:

Video Conference Experiences

During the pandemic I work from home, just like most office workers. To keep in touch we use video conference tools. But as we did not have anything set up before, we needed to find something that works sufficiently welt. Also with the GDPR it is not that easy to just take anything.

It turns out that none of the tools are quite satisfactory, there always is a bunch of friction.

The first that we tried is the DNF Conf system by the German Research Network. It uses WebRTC, is hosted in Germany and fulfills the GDPR requirements. Also it supports presenting PDF documents. Unfortunately it has been hopelessly overrun and it took a month before they ramped up resources and users went to other services such that it is mostly usable now. On my laptop is uses a lot of resources.

The second thing that we have tried is Jitsi Meet on their site and then also hosted an instance on our own. I like this the best so far. It also uses WebRTC but supports keyboard shortcuts for muting the microphone and even has a push-to-talk feature. But somehow the resource use is quite high and the members of our group with flaky internet connections would be cut of all the time.

For Android there is an app, that seems to work just fine also. I have used it occasionally and am quite happy with it.

Read more…

Cloud Backup for Linux

I routinely do backups on external hard drives using backintime. It is a tool which uses hard links to create snapshots with deduplication. Restoring is super easy, either use the tool or copy files manually. The directory hierarchy had a directory with time as filename and your whole directory tree below that.

As I only do these backups every couple of weeks, there is a gap of time during which I could lose data. Also on the go I want to have backups. My PhD thesis draft is in a private GitHub repository, so I can just push to that and have a backup in the Microsoft cloud somewhere. For everything else I need something else, so I started researching this a couple years ago. Backblaze offers a software client and unlimited cloud space for 5 USD/month, but just for Windows and macOS.

The SpiderOak service was recommended by Edward Snowden, so i tried that. It works with Linux and has encryption already on my laptop. I just needed around 150 GB of space, they used to charge 10 USD/month for that tier. Their client looks nice to use and I quickly had set it up with the free trial. It took a while before it actually started to upload things. And it seemed to use quite a bit of resources, I guess for encryption and file hashing.

My friend Simon, who had the same problem, discovered that one could also use duplicity with the Backblaze B2 storage backend. Their rates are really affordable and so I had a look at that. One can store unlimited data there and is billed proportional to the amount. I ended up paying a few EUR/month for the service, so it was cheaper than SpiderOak.

I want to show how I did it with duplicity and why I am now back with SpiderOak.

Read more…

Bash and Spaces in File Names

On LinkedIn one can specify skills that one has as a collection of keywords. Contacts can verify these skills by vouching that one has them. A recently added feature is that one can take a 15 question multiple choice test and show a badge if the test result lies in the 0.7 quantile or above. In principle a nice idea.

The tests for C++, Python, R and Git seemed sensible, The one about Bash was rather well for the most part, except for one question:

In order to write a script that iterates through the files in a directory, which of the following could you use?

  1. for $ls; do …; done
  2. for $(ls); do …; done
  3. for i in $(ls); do …; done
  4. for i in $ls; do …; done

Well, the third one will get the job done under a lot of dangerous assumption from the programmer, so it likely is the “correct” answer. But is is terribly brittle and I would never accept that in any code that I review. Let's take a look at this and make it fail.

Read more…

Learning New Programming Languages

Over the time I have learned a lot of programming languages. DOS batch scripts was the first, but that is not really programming, more scripting. Later I started to learn C but got stuck at pointers. At that age I just did not understand this concept from the book I had. My father has showed me HTML and then PHP, I started to create my personal website with that. And then with PHP I was able to program things that other people could see and try out on my website. Then I wanted to write GUI applications and came to Java, programmed a bunch of little games with that. During my high school I also needed to learn Pascal for my computer science class but never gotten far with it.

During my work at DLR I started to learn Python and used it for data analysis. Then at university I attended a course in C given by two very funny mathematicians. This gave me a completely fresh start into C and I shortly after wandered off into the C++ world and still really like it there. I used GNU Octave (the free clone of MATLAB) for my lab courses first and then switched to Python for that task. I picked up Bash scripts somewhere along the way, did some scripting in Vim. Eventually for my master thesis I could do even more C++.

And then during the PhD I seemed to have picked up another trove of languages. My advisor has an R library to analyze the data that we see in that field. PhD students have tried to rewrite it in Python which they liked better, but it just lacked features and maturity. It turned out that learning R was really straightforward at this stage. It just took me a few weeks to get going in the language and after a few months I had the impression to really feel the language. I also picked up Haskell for fun and the Wolfram Language for a specific task.

But why am I writing all this? The interesting thing here are the decreasing costs of learning a new programming language. Just as with spoken languages, the programming languages fall into categories. The very first language you learn will be tough because you will have to learn that particular language but also programming and also patterns. The second language will be easier as you already know how programming works. But you might not have seen enough diversity to abstract the patterns that are there. So the second language will be about that language and abstracting patterns. Just as I learned a lot about German grammar while learning English and having to formalize the concept of grammar.

Read more…

Reflections on Private Tutoring

This likely will be my last season of tutoring high school and university students. The final exams for the high school are coming up next week. I thought that it might be a good time to look back and reflect on those years.

I have started with tutoring already while I was in high school. At the beginning I would teach material that I just had learned myself shortly before. According to the four stages of competence this was just after crossing from conscious incompetence to conscious competence. I would recall pretty exactly what knowledge I lacked, which experiences were needed to understand. This made me a reasonable tutor for my peers.

Later on during university studies I did tutoring as an university employee and also on the side as a private tutor. In both cases I have eventually worked mostly with university students. In general university students are self-motivated and really want to understand the material at hand. Sometimes they just want to pass a course, sometimes they want to build a foundation that lasts longer. High school students on the other hand are usually not as conscious about their future as university students and seem to be a more motivated by their exam scores than with building a foundation. Of course, there are school subjects that one just has to bear with until graduation and already knows years in advance that they are not going to pursue a future into these directions. I certainly had those subjects and did not too well in them as I just lacked the motivation that drove me in physics and mathematics.

Read more…

Fahrradexperiment Maximilianstraße

Schon seit längerem läuft in der Maximilianstraße ein Experiment mit einem Fahrradstreifen. Da die Ratshausgasse für den Durchgangsverkehr gesperrt worden ist und durch die Sperrung der Kaiserstraße somit auch in der Maximilianstraße nur noch sehr wenig Verkehr durchkommt, konnte eine Spur an die Radfahrer gegeben werden. An der zweiten Ampel an der Einmündung zu Am Hauptbahnhof sieht das ganze dann so aus:

Erstmal scheint das eine feine Sache zu sein. Jedoch offenbart sich das Problem nach der Rechtskurve: Die Straßenbahnschienen. Die liegen nämlich hier in der rechten Spur. Man muss also beim Abbiegen entweder rechts der Schienen bleiben oder zwischen die Schienen wechseln. Hinter der Kurve sieht es dann so aus:

Read more…

Fahrradexperiment Rathausgasse

Ab dem 01.04.2020 darf man mit dem Fahrrad in den Straßen »Am Hof« und Radhausgasse Richtung Rhein fahren. Vorher waren beide Straßen eine Einbahnstraße. Der General Anzeiger beschreibt die Neuerungen, die zu dem Stichtag umgesetzt werden.

Ich habe die neue Verkehrsführung als Radfahrer jetzt häufig genutzt und bin davon angetan. Da dies ein Experiment bis zum 18.06.2020 ist, möchte ich durch meine positive Rückmeldung darauf hinwirken, dass dieser Zustand dauerhaft Bestand hat.

Man fährt auf der Straße Am Neutor an und darf dort jetzt rechts abbiegen. Jedoch muss man erstmal seine Ampel finden, das ist die Fahrradampel auf der gegenüberliegenden Seite:

Read more…

»Schutzstreifen« schützen überhaupt nicht

In meiner Stadt Bonn gibt es recht wenig baulich getrennte Radwege. An sehr vielen Stellen gibt es nur Schutzstreifen. Damit es keine Missverständnisse gibt, muss man erstmal die verschiedenen Arten von Radinfrastruktur trennen:

Auf der Fahrbahn ist eine gestrichelte Linie angebracht, die am rechten Rand der Fahrbahn einen Bereich für Radfahrer markiert. Mit einem Kraftfahrzeug darf man diesen nur bei Bedarf überfahren. Autos dürfen auf dem Schutzstreifen nicht halten (vor 2020 war es nur Parkverbot).
Ähnlich, aber mit einer durchgezogenen Linie. Kraftfahrzeuge dürfen nie darüber fahren. Es besteht Benutzungspflicht.
Ein baulich getrennter Weg, der nur für den Radverkehr vorgesehen ist. Benutzungspflichtig.
Gehweg »Fahrrad frei«
Auf einem derart markierten Gehweg dürfen Radfahrer als Gäste fahren, mit angepasster Geschwindigkeit. Es besteht keine Benutzungspflicht.
Gemeinsamer Geh-Radweg
Hier teilen sich Fußgänger und Radfahrer gleichberechtigt einen baulich getrennten Weg. Da die Radfahrer aber schneller unterwegs sind, müssen sie sich von der Geschwindigkeit natürlich anpassen.
Geschützter Radstreifen
Aus dem Englischen als protected bike lane bekannt. Ein Radstreifen, der mit Pollern vom Autoverkehr abgetrennt ist und nicht überfahren werden kann.

Diese Feinheiten sind den meisten nicht bekannt, daher kommt es immer wieder zu Diskussionen aufgrund falscher Vorstellungen. Am schlimmsten ist es mit dem »Schutzstreifen«. Dieser wird von vielen Autofahrern anscheinend als Sonderweg wahrgenommen, sodass kein zusätzlicher Abstand zum Radfahrer eingehalten wird. In der Praxis sieht das dann so aus:

Rot eingezeichnet ist meine Spur.
Rot eingezeichnet ist meine Spur.

Read more…

Review of the Rainlegs

For the past decade I had just regular rain paints that would cover the whole legs. Together with a rainproof jacket and rainproof shoes (or shoe covers) this would protect me from the rain completely. However, it would not necessarily keep me completely dry. Although the rain paints that I have feature a membrane, one would still sweat in them.

In Bonn usually it does not rain very hard or very long. Also one often has a gradual fade-in, which makes it hard to decide what to wear. If I puts on the rain pants too early I will sweat a lot, too late will have my pants wet and then it does not make sense to put on the rain pants at all. Or I start from home and it rains a lot, so I start with the rain pants. But five minutes into the ride it stops raining and I am not sure whether it will start again later. So I either keep it on and sweat, or take it off and get wet later. Or take it off and put it back on. It is a hassle every time.

I've seen the Rainlegs product on the internet years ago, and every now and then saw people using it. Eventually I had so much positive feedback from users that I decided to buy my own pair. I got them in white reflective as I do not want to ride around in neon yellow.

My experiences have been mixed, let me elaborate.

Read more…

Log Analysis with GoAccess

Several years ago I used Matomo to analyze the traffic that I have on my website. This is a PHP application that uses either JavaScript or a pixel image to track the user's action on the website. It gave me a list of the most popular pages and also told me how people got to the “page not found” page. I could go ahead and improve already popular articles and fix redirections.

There have been somewhat frequent updates to Matomo which I had to install due to security. I did not want to have unpatched PHP stuff on my web server. My website has been static and zero maintenance at that time, so I got annoyed. At tomes I updated Matomo more often than I actually looked at the data. Then came the GDPR and I ditched Matomo because I was not entirely sure what sort of privacy statement I would need on my personal website.

This left a gap and I have thought about filling it. I wanted something that did not require me to update stuff on the server regularly. So I thought about Google Analytics as I would just have to add their little bit of tracking JavaScript. But then all the data would go to Google and it would be even worse than Matomo regarding the GDPR. My web hoster provides logs processed with Webalizer, which look terribly old fashioned. Luckily I have found GoAccess and can download the logs via FTP.

Read more…