i decided to take a look outside of my git comfort zone to see what's out there. and wow, i'm glad i did, because i came across jj-vcs and, it's hard to emphasize this enough: it's a delight. it lets me operate on commit graph like i'm playing with lego. jj is a version control system, like git. 1 it allows using git as a backend, so you have access to that world: collaborating with your coworkers…
given i'm often shuffling a program from my computer onto some server somewhere, i'm always interested in making that process more pleasant. i recently kicked the tires on railway 1 and thought it had a lot of nice things going for it. projects you group stuff by projects, it's not just a flat list of your docker containers. projects have environments like staging and production. each environment…
was observing the shift in february where my LLM generated commits outnumbered the ones i was authoring. you may need to squint, but the blue bars are my commits and the orange ones are from aider i learned about aider in july . i had already been using other llm tools before that but aider is helpful in the way it creates some attribution for the code it writes. i've been using zed's agentic…
i'm a big fan of fish's abbr and was wondering if it would also do sub commands, i.e. g c → git commit and so on. i came across a reddit post from Paul Irish 1 , no less, where someone indicates what to do. so i took a peek into Paul's dotfiles and got the cheat code: function subcommand_abbr set -l cmd "$argv[1]" set -l short "$argv[2]" set -l long "$argv[3]" # Check that these strings are safe,…
with the goal of writing some programs i will use, i've put together a few cli tools to improve my day to day. because cargo-dist lets me distribute binaries and put stuff on homebrew without having to write my own yaml, it means i actually do it, and i hope other people run this code too. linear-cli a part of my day includes looking at lists of issues in linear, reviewing the issue, and changing…
every time i need to install a python tool i brace myself for pain. but no more! thanks to a tip from paulg in the aider discord, i learned that uv has a uv tool install command to install python tools. it's nicer than using uvx because unlike uvx, the packages you run will not be deleted automatically . e.g. to install aider and csvkit you can do the following uv tool install --python python3.12…
you can run typescript from the web, e.g. deno run https://docs.deno.com/examples/hello-world.ts will do what you think it does you can build binaries with deno compile , e.g. to publish to homebrew so other people can install your programs you can publish the source to jsr.io as typescript and that's what's distributed and run publishing to jsr is easy with deno publish there's no confusion…
Here's what I learned: Season (usually with salt, pepper, chile flakes, some kind of acid) before you add the fat, which in 95 percent of the recipes in this book will be olive oil. Dial in the flavors through a few rounds of tinkering, tasting, and tinkering again. The goal, says Joshua, is for the dish to taste "like a potato chip." Meaning so tasty and savory that you can't help but take one…
→ envset: updates .env files envset : solving the most trivial of trivial problems. i work with .env files a lot 1 and update values in them often enough. wether it's feature flags, api keys, or whatever the things change. this is slightly annoying in a text editor, the whole process of searching for a KEY, the vim lifestyle of carefully deleting the value without overwriting my clipboard…
something that always catches my eye in a system is what kind of ids it uses. and the ones i'm most fond of are the human readable variety i first saw in stripe, they have a prefix indicating what resource they are followed by random characters. e.g. cus_NffrFeUfNV2Hib and re_1Nispe2eZvKYlo2Cd31jOCgZ is a customer and refund respectively, and even if that's flying by in logs or some csv you know…
finding new ways to work and better tools is something i enjoy a lot. and after discovering aider , a cli tool that uses llms to write code, i've been interested in trying it out on all sorts of things and finding the patterns that work well with it. so over coffee in the morning i put together a small typescript library, zod-urlsearchparams . it started out with a couple prompts to describe the…
at work we use harvest to keep track of time, and i'm generally working in vscode. it's easy enough to forget to turn on your timer, or leave one running that's on a different project and only realizing it later and have to take your best guess at correcting them. so i built timer reminder to let me know when that's happening. i put this thing together using xstate , i like how it lets me start on…
→ adding curly quote support to astro markdoc glad that this allows me to write dumb quotes in my documents and have curled when they come out of this website. contributing code to astro was easy, and i learned a reasonable way to deploy a forked npm package with a compile step.
srcset-codegen is something i've wanted since the create-react-app days . it's a cli that looks at the images in your project and generates typescript files exporting an object with a src, width and height. if you have @2x, @3x, …, variants it'll include a srcSet attribute as well. in practice it'll generate code like this: // generated by srcset-codegen import src from "./pdf.png"; import src2x…
i've long been a big fan of keeping a very large $HISTFILE as reference, Ctrl+R being one of the my favourite key combinations to press. but i've got a bad habit of writing secrets directly into my shell which results in things like api keys, jwts, private keys, etc., being written to disk in plain text. these days i'm using fish, and was pleased to discover fish -P kicks off a shell that doesn't…
→ oblique strategies originally available as a physical deck of cards, oblique strategies lets you work chance into whatever problem you're working through with a suggestion on how to go forward. In 1975, Peter Schmidt and Brian Eno created the original pack of Oblique Strategies cards, through thinking about approaches to their own work as artist and musician. The Oblique Strategies constitute a…
when you're working on a branch in git you might commit your work for a variety of reasons, and git expects you to write a message every time. this is a big ask for the commits that don’t make it into the trunk. it’s a chore to annotate snapshots that only get garbage collected. for years i thought my options were: write something useful as reference write a trash message but turns out there's a…
pnpm allows you to install packages straight from github , but if the package has a build step (such as typescript compilation) it'll likely be missing the js that you would be running. there doesn't seem to be a standard way to set a project up so that the build step only runs if it needs to, so many projects don't include a prepare script to run the build. so a workaround i ended up with is to…
after reading Entering text in the terminal is complicated i was motivated to figure out a problem that has long vexed me: how do i edit a long command in my editor instead of in an interactive shell? for the last ~15 years i've just been writing stuff into a files and running them, and having those files laying around feels like finding cigarette butts on the beach. it turns out shells support…
Now the concept of Flow is one that I have found of particular interest. My thanks to OMP student Mike Lecky for getting that book “Flow” in front of me a few years back. The basic idea of it is that when we are doing work for its own sake we can enter this realm where time disappears, the challenge in front of us takes up all our attention, and the rewards are personal, not external. The task is…
→ typescript ‘satisfies‘ operator TIL typescript 4.9 shipped with a new satisfies operator that lets you assert an expression is of a type, without actually changing that thing's type. i discovered this when looking up how to write an exhaustive switch type Fruit = "apple" | "tangerine" function example(value: Fruit) { switch (value) { case "apple": return "🍎" case "tangerine": return "🍊"…
→ modern font stacks nice resource to see all the ‘system’ fonts you can use in css. i’ve never been much of a webfont fan: slow, varying quality, restrictive and expensive licensing. trying out the ‘transitional’ stack on this site.
previously this site was built with remix, serving data stored in sqlite and content was authored in logseq and pushed up to the site via a custom logseq extension. this was fun to make, and worked well enough but logseq isn't a very good place to edit documents for the web. i wanted my content back on the file system in a proper format, and there was nothing dynamic preventing me from using a…
update: this is now a full fledged cli at https://github.com/schpet/linear-cli i'm a fan of the way linear has a button to pop out a git branch name for an issue, but sometimes i'm working on that branch and get back to linear. this CLI does exactly that. 1 additionally, if you rename the directory your project is in to start with the team id, it'll let you jump to the team. it has three commands:…
If I were to state it bluntly, I would have to say that I am more interested in the experience that I have in the shop than what I produce in it. […] Of course, the proof of my time in the shop are the finished chairs, but they leave. And what's left is me, my tools and the wood. How I feel and what I do in my shop is truly what I work to refine and sustain. Peter Galbert | Chairmaker’s Notebook…
with woodworking there's a lot of different ways to put steel to wood and the tools you choose informs the work you do and how enjoyable it is . same thing applies to working with tabular data. pretty print records in postgres sometimes you select * from some_table limit 5 in postgres and there's more rows than you have in your terminal. run \x or \x auto in psql to turn on 'expanded display' and…
despite the desire to keep everything as stock as possible sometimes you realize it sucks and you need buy some stuff and fiddle around to improve your situation. hardware i was tired of connecting power, display, headphones and other peripherals to my laptop every time i used it in my office so i went out and bought a Kensington K37010NA. it charges the laptop and drives a 4K monitor at 60hz. i…
after getting fed up with spotify and learning about navidrome i decided to repurpose an raspberry pi 3 i had kicking around into a little linux server.[^1] it was nice to follow the well worn path of setting this up since it's such a common thing to do. my setup is basically a run-of-the-mill 2TB external usb drive, formatted with zfs, plugged into the pi, and i back this up with restic…
writing this down, mostly so i can look back on it in a few years and see how things changed. vscode using this with the basic vim plugin. attempted to use the neovim plugin that runs nvim proper within vscode but it wasn't stable. maybe i'd try that again at some point. i frequently run into problems with undo breaking, and writing rust in it is real bad compared to the very good typescript…
update: i have since moved this setup to be run off a raspberry pi in my basement, still using tailscale so that i can connect to it while away from home this is the topic that originally motivated me to setup this site: i really wanted to talk about it but whenever i did it would cause people visible discomfort with how boring it was. the gist of this setup is putting vaultwarden , a web server…
i often reach for emotion in react native projects because it has a nice api to support themes, and it makes it easy to move stuff around compared to stylesheet.create. that said, it's tedious to refactor stuff into these styled component type of things so i find myself adding style props here and there. this is where styco comes in: you write inline styles, run the thing, and it refactors it into…
i've been feeling pretty unsatisfied scrolling into oblivion on twitter, reddit, etc. on my phone and am experimenting with a different reading workflow: i subscribe to RSS feeds using NetNewsWire on my mac and iphone. what a gift to have a high quality mac RSS reader that is also FOSS[^1] use mailbrew to turn my twitter timeline into a daily email, and convert this into an rss feed using…
note: this info is outdated, things have changed this is my riff on the put-logseq-on-website. after reading James Longster's description of his website, i thought, that sounds good so here we are. going for a casual "notes" type of thing, hoping i'll actually write here if it's easy and the bar for publishing is low. hosted on fly.io, when i hit my little homemade publish button in logseq, many…
a big thank you to the people writing cli tools that install easily, run quickly, and don't break because i upgraded node or ruby. these are some of my current favourites: json stuff jq op json tool jless is helpful when looking at a big chunk of json that you want to grok the shape of – it's interactive, has nice "copy this as a jq path" and search features gron is a great way to point at a very…