• Python Rediscovered: uv – The Swiss Army Knife for Tooling

    As a developer who works extensively with JavaScript and Java, exploring Python anew has been an exciting journey. Back in university, I had already worked with Python, but at that time, I didn’t give much thought to tooling — it just worked, or so it seemed. Today, I understand that tools for dependency management and virtual environments are fundamental for modern software development.

    However, much like in the JavaScript ecosystem, I encountered a vast array of options in Python: pip, poetry, virtualenv, and many more. The sheer variety, combined with tutorials often relying on different tools, can feel overwhelming when starting out.

    To find a clear entry point, I reached out to my friend Oliver for advice. His response was concise:

    Yes. Only uv. It replaces pip, venv, poetry, twine, setuptools, pdm, hatch, and everything else out there.

    This recommendation felt like a practical solution to what could otherwise have been a daunting setup process.

  • Stepping into Other Bubbles

    Every year, I dedicate some of my free time to Advent of Code, and each year I try to tackle it with a different programming language. It doesn’t have to be anything overly exotic, and I often end up using Go. But this year, I want to give Python another chance.

    And what can I say: I can totally understand how other developers feel when they transition into the JavaScript ecosystem. You're practically overwhelmed by tools and opinions, leaving you afraid to even get started for fear of doing it wrong. Back when I first started programming (often with Python, among other things), it was simpler. I didn’t know what I needed to pay attention to (testing, build systems, dependency management), and somehow, it was more chaotic back then—but it also felt faster.

  • TIL: Efficient Sorting of Git Branches

    In Git, branches are sorted alphabetically by default. This is convenient when you remember the branch name, but it's not always the most practical approach. Fortunately, the sorting order can be customized to display branches with the latest changes first:

    git branch --sort=-committerdate

    Optionally, -r can be added to search for a remote branch. This is particularly useful when looking for a branch previously worked on with a teammate.

    I have set this as the default in my personal .gitconfig:

    [branch]
        sort = -committerdate
  • Cleaning Up Local Git Branches

    Over time, I accumulate several local Git branches in various projects. To maintain clarity, I regularly delete all branches except the main branch.

    To avoid having to constantly search for the command, I'd like to share it with you here:

    git branch | grep -v "main" | xargs git branch -d

    git branch lists all local branches. grep -v "main" filters out the main branch from this list, as I don't want to delete it. xargs git branch -d executes the git branch -d command on the remaining branches.

    If you want to keep multiple branches, you can extend the command:

    git branch | grep -v "main" | grep -v "develop" | xargs git branch -d

    Here, two branches, main and develop, are filtered out from the list and thus not deleted.

    I hope this tip helps you keep your system as tidy as it helps me.

  • TIL: Smaller PDFs

    Now and then I want to create PDFs and optimize the file size. I'm not necessarily in the mood to add another PDF software to my computer, and, depending on the content of the document, I don't want to complete the task online. In this situation, you can do well with Ghostscript.

    The first thing you have to do is install Ghostscript on your computer. On a Mac with Homebrew, you can accomplish this with the following command:

    brew install ghostscript

    To optimize a PDF, I use the following command.

    gs -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile="output.pdf" input.pdf
  • How to - Randall Munroe

    Nach "What if" folgt also "How to", welches auf den ersten Blick die logische Fortsetzung des vorherigen Buchs von Randall Munroe ist. An vielen Stellen gelingt das gut, jetzt, wo ich das Buch abgeschlossen habe, frage ich mich, ob ich zwischen den Büchern mehr Zeit hätte lassen sollen.