Archive

All published posts

2501 posts latest post 2026-06-21 simple view
Publishing rhythm
May 2026 | 56 posts

I often want to run an s3 sync in an isolated environment, I don’t want to set any environment variables, I don’t want anything secret in my history, and I don’t want to change my dotenv into something that exports variables, I just want s3 sync to work. dotenv run is the tool that I’ve been using for this, and this uv one liner lets it run fully isolated from the project.

one liner #

uv tool run --from 'python-dotenv[cli]' dotenv run -- uv tool run --from awscli aws s3 sync s3://bucket data

multi-line #

same thing formatted for readability

uv tool run \
  --from 'python-dotenv[cli]' \
  dotenv run -- \
uv tool run \
  --from awscli \
  aws s3 sync s3://dropper data

There are probably 10 ways to skin this cat, but this is what I did, if you have a better way let me know, I’ll link you below.

First 3d Printed Threads

Working on an upcoming project that requires some threaded screws. Trying to keep a low budget on this one with as much to come off of the printer as I can. It might become a slant3d portals product if it works out. I always like making test prints for stuff like this especially to see how the feel is off of the printer that is going to print the final product and take much longer. First try was a success. b485b759-719a-4aa0-aa8d-f98e0a5e1ac3-1080p.mp4 [1] What worked # [2] I started out looking up standard half inch thread pitch and size, but ran out of time to get the exact profile of a half inch bolt, so I will need to fix that later. Th [3] The print orientation is critical for strength here. This part is a full 1/2: so it should be strong either way, but to make sure we are printing the bolt horizontally to get nice long print layers. To do this we have to give it a bit of a flat spot on the top and bottom. This does not hurt performance, if anything it probably helps giv...
2 min read
- Atuin desktop sounds dope AF, tried to install it off the AUR [1] and it was broken for me. Seems early and the dev team is all in on mac. They have an official .deb and .rpm. I’ll have to try again later, maybe the binary will work. The idea of building out runbooks from my Atuin data sounds dope AF. It sounds like a mix of markdown and executable cells like a jupyter notebook, but not. Really pitching hard to those of us in the system administration, dev ops, SRE space. Having something that you walk through when a system goes down and you are feeling panicked in DR mode sounds relieving. References: [1]: /aur/
- Cloud is cooked bois. Seriously too much dumb shit relies on the cloud. Too much critical shit relies on single AZ’s. If normies are literally loosing sleep over an AWS outage (queue the Uncle Roger Voice), You’ve Fucked up. It’s wild to even think about a bed relying on the cloud let alone fully stop working when UE-1 goes down. I want to live in a world of opt in FEATURES, things that bring value to a product because it makes it better. Somehow a bed smells suspiciously like a cash grab for a subscription because its cloud connected. And yet for some reason it takes 16GeeeBee’s per month. I don’t own one of these, and I don’t want to. I don’t want a subscription for everything, I want my shit to just work. The future we are headed towards a world that is ever more reliant on a few key clouds. Which is fine. It’s fantastic that small companies can start and scale without owning an infrastructure team. It’s great that they have the ability to give us many nines of reliability. Some things just don’t need the cloud.
#artificialintelligence #hiring | Gary Vaynerchuk | 120 comments I care about humanity first, THEN skills .. and in this AI-scaled world, human sh*t will win 🔑 #artificialintelligence #hiring | 120 comments on LinkedIn LinkedIn · linkedin.com [1] More Human stuff that’s what we will be doing. Less looking at docs, more architecting (which suspiciously looks like writing docs), more decision making, more explaining. This is a good positive take on AI right now. References: [1]: https://www.linkedin.com/posts/garyvaynerchuk_artificialintelligence-hiring-activity-7387261666289373184-BOIo
Spinning a 3d printed test block on a threaded t handle.

FastAPI.">Starlette has a head request that works right along side your get requests. This morning I fiddled around with custom routes for GET and HEAD, but had to manually set some things about the file, and was still missing e-tag in the end. Turns out as a developer you can just add a head route to your get routes and starlette will strip the content for you, while preserving all of those good headers that fastapi FileResponse created automatically for you.

from fastapi import APIRouter
from fastapi.response import FileResponse
from fastapi import Request
from pathlib import Path

router = APIRouter()

@router.get("/file/{filename}")
@router.head("/file/{filename}")
async def get_file(filename: str, request: Request,):
    headers = {
      "Cache-Control": "no-cache, no-store, must-revalidate",
    }
    from pathlib import Path
    filename = Path(f"data/{filename}")
    if not filename.exists():
        raise HTTPException(status_code=404, detail="File not found")
    return FileResponse(filename, headers=headers)

Here is an example of the response with curl.

❯ curl -I -L "http://localhost:8100/api/file/e5523925-1565-454c-bab3-c70c4deabc83.webp?width=250"
HTTP/1.1 200 OK
date: Wed, 22 Oct 2025 14:16:03 GMT
server: uvicorn
cache-control: no-cache, no-store, must-revalidate
content-type: image/webp
content-length: 17206
last-modified: Tue, 23 Sep 2025 14:03:20 GMT
etag: f891660c1543feb1af7564f08abdd511

❯ curl -I -L "http://localhost:8100/api/file/unknown-file.webp?width=250"
HTTP/1.1 404 Not Found
date: Wed, 22 Oct 2025 14:16:11 GMT
server: uvicorn
content-length: 27
content-type: application/json

Today I learned that while .stignore and .gitignore look very similar they are not. My obsidian directory had been locked up for a few weeks and I had no idea why until I logged into the web ui and saw errors. The errors were some confusing regex validator not matching. I don’t know what the exact error was, but I went in and only ignored the files I cared about instead of the entire gitignore. Primarily I was getting conflicts in my .git directory.

pytauri [1] has done a fantastic job with pytauri [2]. Highly recommend taking a look. Tauri binding for Python through Pyo3 References: [1]: https://github.com/pytauri [2]: https://github.com/pytauri/pytauri
The work on fullcontrol [1] by FullControlXYZ [2]. Python version of FullControl for toolpath design (and more) - the readme below is best source of information References: [1]: https://github.com/FullControlXYZ/fullcontrol [2]: https://github.com/FullControlXYZ
I’m impressed by nicegui [1] from zauberzeug [2]. Create web-based user interfaces with Python. The nice way. References: [1]: https://github.com/zauberzeug/nicegui [2]: https://github.com/zauberzeug
3d Printed Dovetails Fanned Out
Experimental slices of 3d printed dovetails laid out in a fan. Each have sharpie notes written on them.

3d Printing Dovetails Experiment

I hit an issue with 3d printing oversized parts that I have not hit before. I’m working on some jigs for an upcoming woodworking project that will involve a lot of repetition. We want to utilize some dowel joinery and jigs for consistency. These parts will be up to 20in in length this is much larger than my print bed. I’ve fit things together before # [1] Here’s where I went wrong, I wasn’t really thinking through my previous applications. They’ve all been slip fit, primarily print in place joints that need to move. My go to offset for print in place on my printer is 0.2mm, sometimes 0.1mm depending on the scale. knife sharpener double hinge first try [2] A live hinged [[ knife-sharpener-double-hinge-first-try ]]. [3] And in the hinges of [[ a-box-of-caps-and-a-macropad ]]. Experimenting for feel # [4] Fitment like this is a lot dependent on the tolerences of your printer and the feel you are going for. I went to school as a mechanical engineer and theres a lot of science b...
- This is super cool, thanks to Brodie for reading me this content as I do household chores. lowtech magazine [1] is a website ran completely on solar power with only enough battery backup to cover most days. Adding enough to cover all days would increase its carbon footprint and negate the carbon offset of the solar panels it runs on. It’s fascinating to see a web server running completely off grid in a close power system. These interesting websites are fascinating keep em coming Brodie. References: [1]: https://solar.lowtechmagazine.com/
- The Year of the Linux Desktop is a meme, every year is the year of the Linux desktop as it gains rounding errors of market share. Outside of Linux nerds, developers that use servers on the regular, cheap asses reviving old hardware that is dead in the eyes of other OS’s, the average user wont even notice a difference with the right distro. I ran bazzite with plasma for over a year, It would be super beginner friendly while allowing users customization on levels never seen on non-Linux machines. Other than adobe, roblox, and EA games with easy anti-cheat most users probably aren’t going to run in to any issues. They probably wont even notice at this point, which is where the meme comes in. Why would anyone switch if its not noticeably different for the average user, they wont, until what is working for them stops working for them.
Handle Jig Alignment Window
Handle jig for theater boxes. The image shows the centerline lineup. This jig came out with a handle a little bit too big, going to go with a smaller one for the real boxes.
Looking for inspiration? unnamed_game_1_v2 [1] by Mordoria [2]. The Release of Mordoria References: [1]: https://github.com/Mordoria/unnamed_game_1_v2 [2]: https://github.com/Mordoria
Litewind Litewind is Tailwind without the build step litewindcss.com [1] This is a sick no-build version of tailwind. I have a couple of projects that the build step of tailwind is cumbersome on, mostly because they are for non-js devs. Some are for backend python devs, some are for folks that mostly want markdown with some styles. This is a perfect no-build tailwind alternative. References: [1]: https://litewindcss.com/

python extras are for shipping

Python has two ways of adding optional dependencies to your projects pyproject.toml file dependency-groups and optional-dependencies. dependency-groups # [1] for development Dependency grooups are used when working on the project, they do not ship with the project, users cannot select to install them with the project. These are for things like running tests, linting, or docs. You might want to run these in ci, or keep your dev machines tight. For the most part you can probably keep these in dev. Depending on your team, fluency, and tolerance for slower installs extra packages. Adding too many tight groups might make it hard for the team to remember all the groups and which one to use and end up with them using --all-groups anyways. optional-dependencies # [2] for users Optional dependencies are for shipping. These are for your users, not your development team. This is used for dependencies that are clearly not needed for all or main use cases. It is annoying to use projects th...
3 min read
Sister Splinter
Cling Grip Bind
- anthony has some of the best python highlight videos each year. This might be a good sign, but each year there seems to be less and less that I am chomping at the bit to get to. I thought the remote debugger looked every interesting, his use case for babi seemed very interesting. I wonder what textual would look like built in a 3.14 world, would it still have built its own debugger/console? uv tool run --python=3.14 babi Without a process flag you need sudo permissions to attach a pdb debugger similar to gdb. ps -ef | grep babi uv tool run --python=3.14 python -m pdb -p8605 [1] References: [1]: https://dropper.waylonwalker.com/api/file/b5e1a34d-c198-440a-ab30-4498bfa6962a.png

Kraft-Coordinates

Handy reference for coordinates in the kraft [1] world. Home # [2] Overworld:-208 71 -291 Nether:-26 9 -36 Ocean Monument # [3] Overworld: 209 62 -752 Nether:26 1 -94 References: [1]: /kraft/ [2]: #home [3]: #ocean-monument
1 min read
PEP 735 – Dependency Groups in pyproject.toml | peps.python.org This PEP specifies a mechanism for storing package requirements in pyproject.toml files such that they are not included in any built distribution of the project. Python Enhancement Proposals (PEPs) · peps.python.org [1] PEP 735 describes dependency groups as sets of optional dependencies that are not shipped with the package but intended for development purposes. The PEP includes an example for groups that include test, docs, typing, and a combo typing-test. [dependency-groups] test = ["pytest", "coverage"] docs = ["sphinx", "sphinx-rtd-theme"] typing = ["mypy", "types-requests"] typing-test = [{include-group = "typing"}, {include-group = "test"}, "useful-types"] This is implemented in uv and can be used by several of their commands. uv sync --group test uv run --group test uv add --group test pytest uv remove --group test pytest uv export --group test uv tree --group test Dependency Groups are not Extras # [2] The docs describe extras as being intended to ship with the application and dependency groups intended for development. The spec allows both to exist with the same name, but care should be taken as too...
Running Software on Software You’ve Never Run Writing about the big beautiful mess that is making things for the world wide web. blog.jim-nielsen.com [1] Running software applications in production today is crazy. One point release opens up for supply chain attacks. What’s crazier is not running your production applications without a lock file, potentially running dependencies you’ve never ran before for the first time in prod. References: [1]: https://blog.jim-nielsen.com/2025/run-software-on-software-youve-never-run/
Using Litestream to Restore My Database for Easy Development | Nic Payne Litestream see [[using-litestream-to-backup-quadtasks-sqlite-db]] for how I setup litestream replication for [[quadtask]] I have the entrypoint to my app contai pype.dev [1] I really like how well the local dev is setup to run off of production data here. I’ll use this as a reminder that I need to set up lite stream on a few of my projects that it’s missing from and include a nice sync prod data Posts tagged: justfile [2] recipe. Litestreams interface always throws me for a loop. It works fantastic, but the global config stored in /etc and some of the commands break my brain. It’s not you it’s me. Using real data when you can is goated. Fake data is so often a perfect example of what someone thinks the backend should look like and does not include things that users actually do, running pipelines for days, or setting titles to paragraphs worth of text. Obviously this is not possible everywhere and the more sensitive your data the harder that process becomes. References: [1]: https://pype.dev/using-litestream-to-restore-my-database-for-easy-development/#Update [2]: /tags/justfile/
TIL: Loading .env files with uv run Replacing python-dotenv with uv https://daniel.feldroy.com · daniel.feldroy.com [1] I smell a dependency to python-dotenv dying in my workflow. I originally read the title of the post and thought, “I know how to manage .env and almost skipped it”. I’m leaning more and more on uv run these days, so this should just [2] go in my [[ just file ]] to make it easy to run. References: [1]: https://daniel.feldroy.com/posts/til-2025-09-env-files-with-uv-run [2]: /just/
Check out sidekick.nvim [1] by folke [2]. It’s a well-crafted project with great potential. Your Neovim AI sidekick References: [1]: https://github.com/folke/sidekick.nvim [2]: https://github.com/folke
I’m really excited about mdserve [1], an amazing project by jfernandez [2]. It’s worth exploring! Fast markdown preview server with live reload and theme support. References: [1]: https://github.com/jfernandez/mdserve [2]: https://github.com/jfernandez
A quote from Dan Abramov Conceptually, Mastodon is a bunch of copies of the same webapp emailing each other. There is no realtime global aggregation across the network so it can only offer a fragmented … Simon Willison’s Weblog · simonwillison.net [1] Interesting catch from the HN discussion over his article [2] that came out yestereday. I scanned it yesterday and it has some really fascinating diagrams showing different phases of the web being open, to being siloed, to somewhere that we are trying to make it easy to publish, and retain ownership. I don’t know enough about bluesky, but the core is build on the AT protocol, you can self host [3] your own instance, you can build different front ends for it. So rather than having siloed instagram, FB, twitter, there are clones of those platforms that read the same data from everyones data, that they have the option of self hosting. I like this distinction between Mastadon here. Mastadon can also be self host, but its data aggregation is decentralized, so each instance is fragmented and cannot have a complete view of the data. The way that the ATproto does its aggregation is quite fascinating and feels right for an open social p...
Wanderers Crest Bind
Reapers Crest Gangfight
Violent Flintbeetle 2
Violent Flintbeetle Granted
Violent Flintbeetle 3
External Link youtube.com [1] This is a super cool movement, I like the idea of giving access to composable components like we have in open source. You want to build a website you have a bunch of options from raw dogging assembly all the way up to predefined templates that just need your content. Idk if the analogy is perfect but there are aspects of it that work. I see where right now we are somewhere in raw dogging c or python. We have cheap nuts and bolts and some low level things, but once someone needs some coupler like this it’s dropping down to drawing it by hand. References: [1]: https://www.youtube.com/shorts/PWyZB1nha_o
Violent Flintbeetle 1
External Link youtube.com [1] Wow, I’ve never seen or thought of multi setup parts this is very thought provoking, not sure how useful it is as we have good adhesives and stuff for printed parts. I definitely want to try this though References: [1]: https://youtube.com/shorts/ED2olTp8wGw?si=UU_E2dlREhavlzJc
- I can’t believe this thing is so devicive. I kinda can’t belive that I sit on the same side as Mathes and his always against the grain, non corporate influenced response. So many others have praised Haiden for bringing back the real gladiator bloodsport that SX is, is it that though?? It’s a race to the finish. different than a lot of other racing its very unpredictable takeout moves happen, occasionally as an accident, often taking both riders down at the same time. Also different than MANY sports we have a huge industry of weekend warriors, Some of which make it into the night show of the biggest race on TV. You see we only bring 20 riders from each class, the top half to top quarter are “Factory” riders, the rest are privateers, sometimes these privateers are completely their on their own. There is also something called a last chance qualifier. This is your last chance to get into the night show, often fought by these privateers out of box vans with their brother as a mechanic. Often that last spot is filled by sketchy on edge riding and takeout moves from a rider that looks like he is barely making it, but would run circles around anyone at your local race. We celebrat...
I’m impressed by fastapi-radar [1] from doganarif [2]. A powerful debugging dashboard for FastAPI [3] applications. Monitor HTTP requests, SQL queries, and exceptions in real-time with a beautiful React UI. One-line integration, zero configuration needed. References: [1]: https://github.com/doganarif/fastapi-radar [2]: https://github.com/doganarif [3]: /fastapi/
Covetous Pilgrim
Sherwood Gangfight
Long Pin
Halfway Home Gang Fight
Rosary String
Threefold Pin
Thread Storm
Progress so far on the Funk server elytra track. It goes through two sea lanturn lit caves so far.

Shots Get An Upgrade To the Main Feed

Today I updated my jinja templates and feeds to include shots posts in the main feed. These posts will prominently show the image in the feed with a small post for each one. [1] Shots [2] are instagram style imge posts inspired by https://justin.searls.co/shots/. References: [1]: https://dropper.waylonwalker.com/api/file/37dea007-e66f-42a5-bd90-6722dd1084dd.png [2]: https://waylonwalker.com/shots/
1 min read