:dev-http {3000 {:root "public"
:proxy-url "http://localhost:7000/my-backend-service"}}
31 July 2026
When I was a kid, I had access to a workshop full of scraps and could build all sorts of gadgets.
When I got a computer,
I had a BASIC interpreter
and the manual.
I’d occasionally
buy or borrow a reference book
from the school library,
and I could study, experiment,
and crank out all sorts of code
using every page of those books.
I always appreciated that I didn’t need
to consume raw resources
to explore the computer and create things.
The internet
just brought more access.
For nearly 40 years, I’ve tried to stick mostly to freely-available and open-source tools. I want to know that I can keep creating things without great expenses of raw materials or subscriptions. Free tools are likely to be the most accessible and have a community of users.
I don’t count electricity and internet access as programming expenses, since they’re useful for other everyday tasks. (I do sometimes worry about how I’d work on an airplane, though, with limited battery and maybe no internet access.) Will I consider subscription access to AI Models a utility?
I’d be uncomfortable having the AI agent do all this work, but I take the time to review, understand, and decide to keep or toss the agent’s work. If I don’t completely understand the work it did, I ask it for explanations.
I can still study and do work manually, and I often do, so I don’t quite feel like I’m held hostage to that subscription. The agent still needs to use the same tools I would use to do the work by hand. Without the agent, I may just need to focus my attention a bit stronger.
03 March 2026
I’ve broken my reverse proxy configuration in shadow-cljs multiple times, so I need a reminder for myself.
I have the server-side api running in a container, and the CLJS is running in shadow-cljs in dev mode.
With a :proxy-url set,
shadow-cljs will forward
any request it can’t match
with a file
in the root
to the other server.
This helps avoid Cross-Site-Request-Forgery failures
in the browser
during development.
:dev-http {3000 {:root "public"
:proxy-url "http://localhost:7000/my-backend-service"}}
The important part is to ensure the URL lacks the trailing slash. With the slash, I see lots of not-found errors from the backend server for everything but the default index.
19 February 2026
The Gemini AI will make some pretty good guesses about how a 3rd-party API may work. It is good at searching the internet, but when APIs have changed across versions, the old and new docs and examples it’ll find can confuse it. In a dynamic language and environment you’ll not spot these errors until runtime.
To combat the ambiguity and to give the AI agent more power to solve its own problems, ask it to add some tests around the code that uses the API. (In my case, the API is the XTDB client API.) Once it has a way to execute the code through tests, it’ll quickly start figuring out where it’s made mistakes and start running its own experiments to observe errors, search for fixes, and applying those fixes around the codebase. I exhibit the same pattern when I’m doing it by hand.
The tests also give you, the human, an easier entry point to evaluate the code the AI generated. If the tests look gnarly, you know to suggest refactorings to improve the architecture and make it easier to test. When the AI has the tests passing, and the test code is easy enough to read, then you can have a closer look at the application code to refine and keep that maintainable too.
09 February 2026
Gemini CLI
is getting even stronger
for Clojure code.
The clojure-mcp
is part of that power:
it’s exploring the code and fixing up syntax
quicker now.
In addition to writing code, it’s been good at listing and implementing optimizations and refactorings to improve the code when asked.
I’d still like to remind you to ask the AI to explain itself. It’s still our responsibility to understand what it’s doing and to question its decisions, just like we would to get the best we can from any other teammate. It’s our opportunity to learn and understand too from a very comprehensive summary of all the internet searches I used to need to do for myself.