Einträge über Code & Zahlen

Recht früh habe ich begonnen mit Computern zu beschäftigen, die Physik kam dann auch dazu. Im Physikstudium habe ich mich auf die Schnittmenge spezialisiert, die Computerphysik. Viele Dinge nehme ich nun mit dem Blick eines Naturwissenschaflers und Softwareentwicklers wahr. Entsprechend sind die Artikel in dieser Kategorie über Programmiersprachen, von mir geschriebene oder genutzte Software, Physik, quantitative Untersuchungen von Finanzthemen und weitere Dinge dieser Art.

Meinen Code findet man auf GitHub, meine dummen Fragen auf Stack Overflow. Auf Physics Stack Exchange habe ich auch einige Fragen gestellt und beantwortet.

Meine wissenschaftlichen Artikel aus der Studienzeit findet man auf arXiv und ORCID.


Besuch im Arithmeum (2006)

In Bonn gibt es das Arithmeum, ein Museum zur Geschichte vom Rechnen und Computern. Wir waren einmal mit der Schule da, das war schon sehr interessant. So fängt es zuerst mit mechanischen Systemen an. Da haben sie diverse Teile in Epoxy gegossen.

Dann zeigen sie Dinge wie die Napier-Stäbe, mit denen man Rechnen kann.

Weiterlesen…

Twitter hinter Paywall

Als Teil der großen Abrissparty bei Twitter hatte Musk noch mit dem Gedanken gespielt, Twitter komplett hinter eine Bezahlschranke zu packen. Ich fand den Gedanken gut, aber wohl nicht aus betriebswirtschaftlichen Gründen. Soziale Medien mag ich inzwischen nicht mehr wirklich. Twitter war noch deutlich erträglicher als Facebook, aber je nach Ecke konnte das auch ziemlich toxisch sein. Generell habe ich zwei große Kritikpunkte an dieser Art von sozialen Medien.

Das eine ist der Dopamin-Kick, den wir aus den Benachrichtigungen bekommen. Oh, ein Like! Und schon wird Dopamin ausgeschüttet. Das ist ein sehr mächtiger Wirkmechanismus im Gehirn. Allerdings haben wir schnell das Problem, dass wir zu kurzfristig motiviert werden. Es folgt ein Nachgeben in dieses kurzfristig erfüllende Verhalten. Für mehr zu diesem Thema siehe zum Beispiel das schöne Buch von Lembke1. Durch die schnellen Antworten und Reaktionen auf Beiträge haben wir auch einfach Stress. Und chronischer Stress ist einfach richtig schädlich, siehe Sapolsky2.

Wir bleiben bei diesem Suchtverhalten, weil wir als Gesellschaft einen vernachlässigenden Umgang mit Mentaler Gesundheit haben. Dabei sollte es eigentlich zum Grundwissen zur eigenen Psyche gehören, dass wir bei so etwas verwundbar sind, siehe Smith6. Die sozialen Netzwerke nutzen mit ihren Benachrichtigungsmechanimen genau diese Schwächen aus, und machen uns Abhängig.

Weiterlesen…

Spinnennetze für Fahrräder

Je nach dem, welche Radfahrer:innen man fragt, gilt die N-plus-eins-Regel. Die besagt, dass wenn man aktuell N Fahrräder hat, dann sollte man demnächst N + 1 Fahrräder besitzen. Das ist also eine Pauschalerlaubnis, sich immer noch ein weiteres Fahrrad zu kaufen. Ich selbst habe ein Trekkingrad, und damit bin ich sehr glücklich. Ich kann damit alle Touren machen.

Aber wenn man mal in so ein Bedürfnis des Haben-Wollens reinhört, kann man schon ein paar Nischen finden, in denen noch etwas ging. Zum Beispiel wäre so ein Mountainbike (MTB) für Fahrten auf Waldwegen ein bisschen besser. Und ein Rennrad wäre für den Weg ins Büro schon sehr cool. Aber für lange Touren ist das nichts, weil ich da nicht hinreichend Gepäck draufpacken kann. Da wäre so ein Crossrad cool, aber das ist nicht ganz so ideal auf Asphaltstrecken, wie ein extrem leichtes Rennrad. Es ist also kompliziert.

Aber es geht gar nicht so sehr um die Fahrräder. Vielmehr geht um es das Diagram, das ich als Bewertungshilfe gemacht habe. Dies ist ein Spinnennetzdiagram, und es zeigt die vier Fahrräder. Je größer die Fläche, desto besser das Fahrrad insgesamt. Man sieht aber auch gut, wie Rennrad und MTB eine Nische abdecken, während Trekking- und Crossrad viel breiter aufgestellt sind.

Dieses Diagramm habe ich mit Matplotlib aus der folgenden Tabelle mit Daten erzeugt.

Weiterlesen…

Neue Konfigurationsdatei für mein Android-Sync-Skript

Um mein Android-Smartphone mit meinem Laptop zu synchronisieren, habe ich auf diesem einen SSH-Server installiert und nutze meine Skripte um Dateien zu synchronisieren. Per SSH-FS wird das /sdcard Dateisystem in meinen Rechner eingebunden, Python-Skripte verschieben dann Dinge aus dem Download-Ordner auf mein Laptop und kopieren meine Passwortliste auf das Gerät.

Irgendwie ist allerdings die Konfiguration ziemlich inkonsistent gewesen. Für die Liste der Geräte hatte ich eine INI-Datei:

[martin-mia1]
path = /sdcard/
host = martin-mia1
user = mu

Das war so ganz okay, aber so richtig überzeugend ist das Format nicht. Und für die Spezifikation der Ordner hatte ich dann JSON genutzt.

Weiterlesen…

Cookie-Banner blocken

Ich nutze meine Browser immer mit Werbe- und Trackingblocker. Sei es Firefox mit uBlock Origin oder jetzt den Brave Browser mit den eingebauten Shields. Man sieht den ganzen Schrott nicht, mit dem die Webseiten vollgestopft sind. Außerdem werden die Tracker blockiert, die mich über Webseiten hinweg verfolgen.

Nun ist es allerdings EU-Recht, dass jede Webseite eine Einwilligung zu den Cookies anzeigen muss. Das ist dann technisch vollkommener Schwachsinn, juristisch aber wohl nötig. Für uBlock Origin gibt es auch die Fanboy Cookiemonster Liste, mit der das meiste davon blockiert wird. Und Brave Browser hat jetzt auch nachgezogen:

Das ist wirklich sehr angenehm, nun habe ich deutlich weniger von diesem juristischen Schwachsinn. Es gibt einzelne Seiten, die dann nicht richtig funktionieren. Da muss man kurz diesen Filter deaktivieren, das annehmen und dann wieder alles blockieren.

Weiterlesen…

Abhängigkeitshölle mit Python

Im Vigilant Crypto Snatch Projekt nutze ich Python als Programmiersprache und Poetry zum Verwalten der Abhängigkeiten. Dabei hat sich mit der Zeit einiges angesammelt:

[tool.poetry.dependencies]
BitstampClient = "^2.2.8"
appdirs = "^1.4.4"
coloredlogs = "^15.0"
python = "^3.7.1,<3.11"
pyyaml = "^6.0"
requests = "^2.25.1"
sqlalchemy = "^1.4.27"
urllib3 = "^1.26.3"
krakenex = "^2.1.0"
python-dateutil = "^2.8.2"
click = "^8.0.0"
ccxt = "^1.74.11"

pandas = { version = "^1.3.4", optional = true }
scipy = { version = "^1.7.2", optional = true }
streamlit = { version = "^1.2.0", optional = true }
altair = { version = "^4.1.0", optional = true }
PySide6 = { version = "^6.3.0", optional = true }

Das Problem dabei ist, dass jedes dieser Pakete wieder neue Abhängigkeiten reinzieht. So hängt Streamlit wieder von Click ab, jedoch in einer älteren Version. So hatte Streamlit früher maximal Click 7 unterstützt. Ich musste also erst Streamlit aktualisieren, bevor ich Click 8 nutzen konnte. Poetry löst diese Abhängigkeiten alle auf und erstellt dann eine Liste mit allen Versionen, die passend sind.

Weiterlesen…

Von Click zurück zu argparse

Um meinen Python-Programmen ein Kommandozeileninterface zu geben, habe ich in letzter Zeit Click genutzt. Das ist als Ersatz für das Modul argparse aus der Python-Standardbibliothek gedacht. Zuerst war es mir suspekt, weil man es mit Dekoratoren baut. Aber mit der Zeit fand ich es ziemlich elegant. So sieht das hier für die Skripte mit denen ich meinen Blog verwalte aus:

@click.group()
@click.option(
    "--loglevel",
    type=click.Choice(["debug", "info", "warning", "error", "critical"]),
    default="info",
    show_default=True,
    help="Controls the verbosity of logging.",
)
def main(loglevel: str):
    """
    Utilities for my Nikola blog.
    """
    coloredlogs.install(level=loglevel.upper())


@main.command()
@click.option("--fix/--no-fix", default=True, help="Apply automatic fixes.", show_default=True)
@click.option("--validate/--no-validate", default=True, help="Perform validation of post meta-data.", show_default=True)
@click.option("--publish/--no-publish", default=False, help="Publish an automatically determined amount of posts today.", show_default=True)
@click.option("--build/--no-build", default=True, help="Build the blog with Nikola.", show_default=True)
@click.option("--upload/--no-upload", default=False, help="Upload the generated files to the live server.", show_default=True)
def make(fix: bool, validate: bool, publish: bool, build: bool, upload: bool) -> None:
    """
    Build the website and other auxiliary files.

    There are a couple of stages which can be enabled or skipped with the additional flags.
    """

    # …


@main.command()
def gui():
    """
    Start the GUI with Kanban board.
    """
    from .qtgui import main
    main()


if __name__ == "__main__":
    main()

Weiterlesen…

Versuchter Umstieg auf Wayland

Vor vielen Jahren wurde Wayland als Nachfolger für X11 entwickelt, ich habe den Umstieg ziemlich lange aufgeschoben, dafür gibt es verschiedene Gründe. Nun habe ich den Umstieg dann aber doch vollzogen und schreibe hier über die Hürden, die es gab.

Weiterlesen…

Präsenz auf Mastodon

Twitter scheint sich ja aktuell in einer Art Abrissparty zu befinden. Viele haben sich schon Accounts bei einem der vielen Mastodon-Server eingerichtet. Und ich bin jetzt auch dort, als @martin_ueding@bonn.social. Ich habe mir feediverse eingerichtet, mit dem ich automatisch meine Blogartikel auch auf Mastodon teilen kann.

Auf Twitter habe ich nur noch meine IFTTT-Aktion, die die Blogartikel vom RSS-Feed der Webseite nimmt und dort auch noch bewirbt. Ich schaue manchmal in die Reaktionen darauf, allerdings habe ich schon seit Monaten nicht mehr in den Feed bei Twitter geschaut. Es ist mir zu viel Empörung und zu wenig konstruktive Substanz. Außerdem tut Twitter so, als würde es einem menschlichen Kontakt bieten, was es allerdings nicht tut. Ich werde das erstmal noch so betreiben, damit man über Twitter meinem Blog folgen kann. Aber investiert bin ich in die Plattform nicht mehr.

Wie viel ich auf Mastodon mache, muss ich noch herausfinden. Es scheinen einige der Bonner:innen dort aktiv zu sein. Von daher könnte das durchaus eine nette Gruppe werden. Mal schauen, wie sich das so entwickelt.

Weiterlesen…

Feuer in der Hand im Chemieunterricht (2008)

Im Chemieunterricht in den USA haben wir einmal ein bisschen herumgespielt. In eine abgeschnittene Plastikflasche als Trichter haben wir einen Schlauch angeschlossen und so Erdgas eingeleitet. Die halbe Flasche haben wir dann mit Seifenblasenlösung gefüllt. Und so entstand eine recht feste Säule aus Seifenblasen, die jedoch mit Erdgas gefüllt waren.

Die konnte man dann auf seine Hand nehmen und anzünden.

Weiterlesen…