Python Packaging with uv

uv is a fast Python package manager and project tool written in Rust.

Why uv over pip/poetry/pipenv?

  • 10–100x faster dependency resolution.
  • Single tool: replaces pip, pip-tools, virtualenv, and pyenv.
  • Lockfile support via uv.lock.

Common commands

uv init myproject          # scaffold a new project
uv add requests            # add a dependency
uv sync                    # install from lockfile
uv run pytest              # run inside the managed venv

Project convention

All Python projects in this workspace use uv exclusively — no raw pip install or python -m pytest.

[Read more]

Organizing This Site

A reference for how this Hugo site is organized and what configuration options are available.

Sections

Sections are created automatically from the directory tree under content/. Any directory with an _index.md file becomes a section with its own list page.

content/
├── _index.md           ← home page
├── about/
│   ├── _index.md       ← /about/ list page
│   ├── whoami.md
│   └── now.md
├── software/
│   ├── _index.md       ← /software/ list page
│   ├── ollama.md
│   └── hugo-setup/     ← page bundle (leaf)
│       ├── index.md
│       └── architecture.svg
└── config/
    ├── _index.md       ← /config/ list page
    └── this-file.md

No config changes are needed — Hugo derives sections from the filesystem.

[Read more]

How Dates Work on This Site

Every page on this site has two dates: Created and Updated. Neither one is maintained by hand. Here’s the full flow.

Creating a new page

New content is created with the new.sh script:

./scripts/new.sh content/thissite/my-page.md

This sources .env for HUGO_IMAGE and SITE_DIR, then runs hugo new inside the Docker container.

Hugo reads the archetype template at archetypes/default.md:

+++
date = '{{ .Date }}'
draft = true
title = '{{ replace .File.ContentBaseName "-" " " | title }}'
tags = []
+++

At creation time, Hugo substitutes {{ .Date }} with the current timestamp and writes it into the new file’s front matter. The result looks like:

[Read more]

Why I’m Learning LLMs

Motivation

Part curiosity — I like gardening, math, geology, history, psychology, and now this. Part continued employment. I don’t shine at working faster or adopting the coolest tools. I am, however, capable of thinking critically and asking why, even when it bothers everyone else.

AI will disrupt the technology landscape. It’s also opening opportunities. We have to figure out what they are.

Software engineers don’t work the way they did five years ago. Five years ago I was reprojecting maps in tile servers. Today I develop data pipelines for robotic applications. I want to be ready for whatever comes next.

[Read more]