As a developer, I tend to keep all kinds of things beyond just code managed with git.
In the past I have used a ~/.dotfiles repo with multiple symlinks, though there are alternate ways to handle it.
Having remembered that bare repositories and alternate work-trees are a thing, I did a short search before finding a tutorial.
Initially using their example directly, we arrive at commands that look like this.
    
    
    Read More →
    
    
    While most code forges have a decent way of navigating code, going back and forth becomes tedious and it can often be easier to check things offline.
The trick I use on my machine, is to combine alfred
 and a alfred-repos
 plugin for helping make things easier to search.
Using my own forked
 version to add some icons, I have a configuration file that looks like this.
{
  "__workflow_last_version": "4.1.0",
  "app_alt": "Terminal",
  "app_cmd": "Gitup",
  "app_default": "Visual Studio Code",
  "app_ctrl": "Browser",
  "global_exclude_patterns": [],
  "search_dirs": [
    // Projects is self explanitory
    {
      "depth": 2,
      "path": "~/Projects",
      "icon": "project.png"
    },
    // References is any 3rd party code I might want to view
    {
      "depth": 2,
      "path": "~/References",
      "icon": "references.png"
    },
    // I keep some documents in git as well
    {
      "depth": 2,
      "icon": "document.png",
      "path": "~/Documents"
    }
  ]
}
Adding icons gives me an extra visual hint what type of repo is found from Alfred.
    
    
    Read More →
    
    
    Even though I wrote about it in a previous week note
 I have not been using my start page to much yet.
Yesterday I randomly decided to start using it after cleaning a few things up.
Combined with my dev server
 I had some of the pieces ready.
First, I configured Firefox to change my start page to start.localhost, where I have my page running.
Unfortunately, while you can configure the home page, you can not currently configure the new tab page.
    
    
    Read More →
    
    
    Over a year ago, I wrote my first draft dev proxy launcher
 in Async Python, based on an idea I had to have something like xinetd
 for my various in development projects.
[service.django]
host = "django.localhost"
port = 8001
cwd = "~/Projects/my-django-project"
command = "uv run manage.py runserver {port}"
delay = 3
[service.hugo]
host = "hugo.localhost"
port = 8002
cwd = "~/Projects/my-hugo-site"
command = "hugo server --buildDrafts --buildFuture --port {port}  --liveReloadPort 80"
While the Python version validated the idea, and usually worked well, there were a few cases that did not work as well.
Recently, I decided to work on a new version using rust
 and hyper
 to handle the proxied requests, which I have named Norikae
 (乗り換え).
    
    
    Read More →
    
    
    On my Mac, I wrote a small nagger app to help remind me when I may have extended a break too long.
It is connected via mqtt
 to a hardware bell
 I have on my desk.
Recently I have been spending a bit too much time in Factorio
 so wanted to see if I could make a similar version on Windows.
I have not previously used my Windows PC for development (I do all of my work on MacOS or Linux), so the first step was to install VSCode, uv
, and git.
This was not particularly difficult and recently it seems like installers automatically handled updating PATH for powershell.
    
    
    Read More →
    
    
    While updating my PowerPlug ( pypi
 ) project, I implemented a pattern I have started using in a few other places that I use entry-points
.
By creating a custom enum using one of Django’s enumeration-types
, you can make it much easier to load these modules.
from importlib import metadata
from django.db import models
from django.utils.translation import gettext_lazy as _
class EntryPoints(models.TextChoices):
    APPS = "powerplug.apps", _("Installed Apps")
    REST = "powerplug.rest", _("Installed APIs")
    SIGNAL = "powerplug.signal", _("Installed Signals")
    TASK = "powerplug.task", _("Installed Tasks")
    URLS = "powerplug.urls", _("Installed URLs")
    CONTEXT = "powerplug.context", _("Installed context processor")
    def group(self) -> metadata.EntryPoints:
        return metadata.entry_points(group=self.value)
Using an enum like this, makes it very easy to load one of our entry points, while keeping all the
definitions for our app in a single place.
    
    
    Read More →
    
    
    Recently like a lot of my Python follows, I have been using uv
 to manage a lot of my python projects.
Given a project, uv tree will show you a nice tree view of your requirements.
wheat v0.1.0
├── click v8.1.8
├── inquirer v3.4.0
│   ├── blessed v1.20.0
│   │   ├── six v1.17.0
│   │   └── wcwidth v0.2.13
│   ├── editor v1.6.6
│   │   ├── runs v1.2.2
│   │   │   └── xmod v1.8.1
│   │   └── xmod v1.8.1
│   └── readchar v4.2.1
└── tomlkit v0.13.2
You can also do something like uv pip list to show it in list form.
Both support a --outdated flag to show you packages needing updates.
    
    
    Read More →
    
    
    Mostly for scripting reasons and alerting reasons, there are multiple times when I have wanted a simple status of a repository.
When working from the console, there is git-status which shows things in a human parsable format, but for scripts we need something more robust.
We can ue git-status with the –porcelain=2
 flag to provide a lot more information, in a more easily machine parsable format.
Seeing how starship
 parsed git-status helped me on this path.
Using this information, I wrote my own git-pending command to parse this data, into a form I could script against more easily.
    
    
    Read More →
    
    
    A friend writing about desktop environments
 reminded me of a few things as I consider a future switch to a Linux desktop.
    
    
    Read More →
    
    
    I do not (usually) think of myself a hoarder, but any kind of reading online seems to result in a browser full of tabs (as xkcd
 humorously illustrates).
Even though desktop has more room to handle tabs, I find that even light research or troubleshooting can result in dozens of tabs, and after a point, only the favicon remains.
When switching to a new task, I usually find it easier to close everything and start from scratch though I tend to bookmark to raindrop
 anything I might want later.
    
    
    Read More →