Ephes Blog

Miscellaneous things. Mostly Weeknotes and links I stumbled upon.

Date -

Weeknotes 2025-02-24

, Jochen
One of the advantages of the downfall of the United States will be eradicating the mm/dd/yyyy date format --Myles Eftos

Spring is finally in the air! 🌼 With the warmer weather rolling in, I found myself inspired to set up a Bedrock Minecraft server and wrote a quick blog post about the process – mostly so I wouldn't forget how to do it again later.

The nice weather also made me feel a bit guilty about my neglected kptncook project, so I pushed out a new release with some bug fixes. While I was in a productive mood, I updated django-cast too. The new version now includes transcript URLs in your podcast feed. I tested it with Castro, and it works great – there's now a neat "Transcript" button at the top of each episode that displays the transcript when tapped. I also created a new HTML view for the transcripts, though I haven't linked to it anywhere yet since it's still pretty bare-bones and needs some proper styling and layout work.

Articles

Software

Fediverse

Videos


Deploying a Minecraft Server

, Jochen

Let's talk about one of life's little annoyances: I'm part of that "lucky" generation stuck between helping our parents with printers and setting up our kids' tech. And now, on top of printer duty, I've somehow inherited the job of deploying Minecraft servers. At least it's slightly less painful than dealing with printers.

I found these articles while researching this task:

Since we're an Apple household with iOS devices everywhere, Bedrock edition was really our only option. I decided to keep things simple and install it directly in a dedicated user account without messing with Docker. Here's the Ansible playbook I use to deploy the Bedrock server:

- name: Install Minecraft Bedrock Server
  hosts: all
  become: true
  vars:
    minecraft_user: "bedrock"
    minecraft_home: "/home/bedrock"
    minecraft_download_url: "https://www.minecraft.net/bedrockdedicatedserver/bin-linux/bedrock-server-1.21.60.10.zip"  # Update to latest version

  tasks:
    - name: Create Minecraft user
      user:
        name: "{{ minecraft_user }}"
        home: "{{ minecraft_home }}"
        create_home: true
        shell: /usr/bin/fish

    - name: Create Minecraft directory
      file:
        path: "{{ minecraft_home }}"
        state: directory
        owner: "{{ minecraft_user }}"
        group: "{{ minecraft_user }}"
        mode: "0755"

    - name: Download Minecraft Bedrock Server
      get_url:
        url: "{{ minecraft_download_url }}"
        dest: "/tmp/bedrock-server.zip"
        mode: "0644"

    - name: Extract Minecraft Bedrock Server
      unarchive:
        src: "/tmp/bedrock-server.zip"
        dest: "{{ minecraft_home }}"
        remote_src: true
        owner: "{{ minecraft_user }}"
        group: "{{ minecraft_user }}"

    - name: Ensure Minecraft server is executable
      file:
        path: "{{ minecraft_home }}/bedrock_server"
        mode: "0755"

    - name: Create a systemd service file for Minecraft Bedrock
      copy:
        dest: "/etc/systemd/system/minecraft_bedrock.service"
        content: |
          [Unit]
          Description=Minecraft Bedrock Server
          After=network.target

          [Service]
          User={{ minecraft_user }}
          WorkingDirectory={{ minecraft_home }}
          ExecStart={{ minecraft_home }}/bedrock_server
          Restart=always
          RestartSec=5
          StandardOutput=journal
          StandardError=journal
          LimitNOFILE=4096

          [Install]
          WantedBy=multi-user.target
      notify: Restart Minecraft Server

    - name: Enable and start Minecraft Bedrock service
      systemd:
        name: minecraft_bedrock
        enabled: true
        state: started

  handlers:
    - name: Restart Minecraft Server
      systemd:
        name: minecraft_bedrock
        state: restarted

Weeknotes 2025-02-17

, Jochen
Pessimist: The glass is half full. Optometrist: That's the letter H --Tess

Managed to accomplish quite a bit outside of my regular work this week.

PySAML2 Updates

A while back, I wrote a tutorial on setting up Django with SSO login using PySAML2's test IdP. Recently, a reader pointed out that the tutorial stopped working with Python 3.13. I filed a bug report with PySAML2 about this issue, and last week I created a pull request to make the test IdP server compatible with Python 3.13.

The main challenges were:

  1. The old cgi module from the standard library was used, but it's been removed in 3.13
  2. The test server uses shelve.open to store data on disk, which now has complications:
    • The dbm module (used by shelve) has switched its default backend from berkeleydb to sqlite in Python 3.13+
    • Cheroot (the HTTP server powering CherryPy) uses threads for concurrency but tries to access the same shelve database from all threads
    • This causes sqlite to complain about reading from a database created in a different thread

My solution is to use dbm.dumb as the backend for Python 3.13+, since performance isn't critical for a test server.

django-cast Progress

I released a new version with support for Wagtail 6.4. I'm happy to report that test coverage is back to 100%! Also made some minor fixes related to uv and tox.

django-resume Improvements

Released a new version with several improvements:

Articles

Fediverse

Software

Videos


Weeknotes 2025-02-10

, Jochen
I'm tall. I have been asked innumerable times to help a stranger get something off a high shelf in a store. I've even offered to help once or twice, though I only do so in dire circumstances. Usually it's something right there, but occasionally I've been summoned from another aisle. This is the code of the tall person. I am bound to help you by my giant blood, in payment of some long-past debt of my people to yours. Don't worry. The pact will always be honored. --Venial Trinities

It's been a hectic week, though not much to report here. Made some progress on django-cast, but haven't pushed out a new release yet. I really need to put together some basic documentation and tutorials for django-resume, but haven't found the time. Hopefully next week!

Articles

Books

Software

Fediverse

Recipes


Weeknotes 2025-02-03

, Jochen
A - DNS record
AA - battery
AAA - battery
AAAA - DNS record
--Kevin P. Fleming

Made it to FOSDEM 2025 in Brussels this year. Great to see some old friends and catch up while hopping between talks. I also gave a presentation about django-resume, a small Django app I wrote for CV management. You can check out both the slides and the video recording of the talk:

Articles

Software

Fediverse