codex just saved my homelab At 0541 alerts started flying that several of my apps were going offline. When I noticed later and started investigating I saw that the vm’s on my proxmox were reporting io-error - the disk had either crashed or was full. I’d done a lot of remediation work recently with the talos nodes (migrating from 1.9 to 1.11 all via codex with minimal downtime) and…
herdr is actually worth the hype The Green Mile meme “I’m tired boss” is how I feel about most multiplexer apps these days. I am a zellij mam after years of futzying around in tmux configs i settled on zellij brcause its 80% works out of the box. I run most agents in there own panes split into tab groups. Works well even now. After dismissing it for a while I thought if its…
I went on a podcast last week! I got invited onto a podcast a couple months ago and we finally recorded it last week. I’ll be honest that had/have some reservations about doing but.. never say no to an opportunity. And I’ve decided I don’t care if anyone hates on me for it - its my story, and I did it for my friends and family. They can hear my story in a long format, much of it…
pi is my favourite agent so far (mostly) I really like the claude harness. I think it writes pretty good code and I like to shape it as it writes in my IDE - rejecting bad stuff early. But I reflect that I mostly do this because its soo slow that if I was to let it run and write a bunch of crap it would then take me ages to chat back and forth to fix it. A simple question is a 30 to 500s penalty…
Opencode and the MiniMax models are good enough I’ve dabbled with the MiniMax models (and Kimi/GLM) over the last few days. They are good enough for 90% of tasks. Codex and Claude still have them beat but I think you only nneed those for planning now. Execution could be MiniMax (or GLM 5.2) and you’ll find them pretty good. Caveat here is if you one-shot everything you are going to get…
Anthropic got what they deserved Stupid ideas by Anthropic: Be the arbiters of justice and virtue, piss off DoD Deal with the BIGGEST problem in LLMs - validity and hallucinations - by making Fable/Mythos DELIBERATELY inject bad info into your session if you are a (by Anthropic’s judgement) a naughty boy (and NOT TELL YOU ITS DOING IT) What a bunch of brain dead idiots Tell the world your…
NATS as C2 https://www.sysdig.com/blog/nats-as-c2-inside-a-new-technique-attackers-are-using-to-harvest-cloud-credentials-and-ai-api-keys I’m using NATS as an outbound connector/transport between my control server and pfSense firewalls - looks like they’re also leveraging this same technique. In my usecase its flawless! I’ve been telling security friends that they are sleeping on…
Shunt docs page is live I created a mkdocs page for my NATS based rule router; [shunt]. I use this extensively in my homelab. For instance, Making all my Zigbee2MQTT events available in VictoriaMetrics Notifications automations by making HTTP requests into my Knative handlers Telling me when my plants need watering Various other Some examples use cases: Telegram hooks for Jellysearr so I know that…
Zed’s new Agent first panel is good I really like Zed’s new Agent first panel. Bummer that I just spent time setting up my hotkeys to open the agent panel e.g. <leader>ccc - kind of moot now. But, this is a better change! I still prefer using JetBrains products (especially for debugging) but for pure “agentic” style work (such as project I don’t care that much about)…
Agents should use config directories properly Why do all the agents/LLM’s use ~/.$foo instead of ~/.config/$foo . Its lazy programming, teaches others that it’s okay to do this (it’s not) and basically ensures for the rest of time we have our home directories filled up with shit. Do a ls -la on your $HOME and look at home much junk there is. $XDG_CONFIG_HOME exists for a reason.…
TIL: raycast for mac file search Geez I feel like a right snapper head. I hate finder, in fact I legitimately hate most of MacOS defaults like what hell is wrong with that file explorer - utter trash. Anyway TIL that I can use Raycast to actually search like a sane person. If I could delete finder and the poor excuse for a file explorer from MacOS I would. It’s a POS and anyone who likes it…
I built a Tauri app for my home lab I’ve been leaning a lot more into AI coding lately. It’s made me rethink a couple things: I can use any language Reliability and error detection at compile time is more important than ever Rust is a trade-off between compile-time and memory safety at the cost of developer experience and cognitive load. It takes a lot longer to develop a Rust app than…
Rust, cap.so and capturing login links I recent spun up a cap instance on my Coolify instance. It’s free and open source which is great but it has some limitations: Only sends magic login/sign up links Only supports Resend as the Email provider Whilst Resend is great and has a free tier I don’t want to use it. Firstly, it only supports a single domain and it cannot be a wildcard.…
TIL: Remarkable can share to screen If you are on the same network and have the Remarkable software installed it will sync from the tablet to your app on the computer. Which is awesome for screen sharing and recording videos on OBS etc. Such a great find. Tags: #til #remarkable
Dokploy Clourdflared Tailscale and Proxmox I am pretty happy with this little experiment: Can I host Dokploy inside my LAN using Proxmox and have an application auto-deploy on git push from GitHub? Well, yes. Installing Dokploy isn’t covered here but I just following the PVE Helper Scripts and installed it into a Ubuntu LXC (and then snapshotted it). I hooked up GitHub and a particular repo…
GHA build and push faster I’ve been using the same GHA build and push for my local/private/personal projects for years and they take forever. I asked claude to make it faster and knocked a 15m build to 4m with this: name : Build and Push to GHCR on : push : branches : [ main] tags : [ 'v*.*.*' ] workflow_dispatch : env : REGISTRY : ghcr.io IMAGE_NAME : ${{ github.repository }} jobs : build :…
Remove firefox autocomplete history Because I constantly forget how to do this: Click form Press Down arrow key Should be highlighted, if so: Shift+Backspace Tags: #til
Codex has a pretty slick UI Contrasting Claude Code against Codex its plainly obvious that Codex’s rust implementation is blazingly fast . Whether its better or not is moot. In the age of AI I do not get why you would use node to build (anything..) a CLI app. Granted Claude Code kicked off the terminal AI revolution but still like…why? Really impressed by how smooth Codex works in…
I suddenly feel compelled to start a factory at home https://youtu.be/hqGFcwyXYI0 I don’t know what I’d create, build or sell but I do know that I need a homemade factory! Amazing what some cheap plywood and Arduino’s can net you. More evidence that I need to keep going with my OT learning and to keep setting up my IoT home network but with more physical controls. Some random…
Singleton row pattern in application design Anti-pattern? It depends. I’m using it in a situation where only one instance of a key can ever exist. New key? We update the existing. It is a global state mechanic. The alternative is an Entity-Attribute-Value table - also a “it depends” anti-pattern. In this case I’m creating an identifier with the same value, always. All…
SCP nats-box creds k8s Note to self, for k8s local testing a quick way to do some debugging with access to nats is via nats-box . In control plane you need creds so I just cp a creds file into the container. kubectl cp ~/ Downloads / my . creds nats - box - 664 bcb786c - 6 wt22 : / tmp / my . creds - n nats Then use it from inside the container. If you have network path to the cluster/control…
AI on the cow I’m AI exhausted. Most AI-first products/business are junk (clawdbot being an temporal example at time of writing). This on the other hand is a real, tangible use case. They’re running a tiny model on constrained embedded controllers attached to a cows neck. It runs inference on the telemetry of the cow in 7ms which (as they state) significantly reduces battery draw. If…
TIL: Go’s fnv hash A colleague introduced me to hash/fnv from the Go stdlib today. It’s a very simple and fast hashing lib when you don’t need cryptographic hashing. Some use cases for me to remember: Hash map keys Deduplication demo Tags: #til #hashing
Tailscale with pfSense I finally set up Tailscale on pfSense and what a massive improvement to my life it is! Being able to connect to Tailscale and then get instant access to everything running on my LAN is massive. Now I can do things like host apps in my public Coolify and have that container connected to TS giving it access to non-public assets running in my home network. It also doesn’t…
Github is the Microsoft of VCS And the irony of Microsoft owning Github is not lost on me. Github is the de facto, first to market hosted git repo. We all know it got market share because it was first to market, in SV and gave you free private repo’s from the get go. People equate github with git - I’m sure some even think Github created git! Anyway, after the new pricing for Github…
I miss being a sniper sometimes https://www.youtube.com/watch?v=MvvBqcWNW_s I don’t watch much of this stuff any more but they got with that thumbnail! Some times I do miss that life. Honing your craft, really getting good at something. Pushing the limits and being relied upon to make decisions that matter. Also having an absolute blast doing it too! Being paid to become world class at long…
Huma API demo repo I created and pushed a Huma demo application to GitHub. I’ve been using Huma in my personal projects for a while now and so far am very happy with it. It “just works”. Unless you are writing a trivial API I think you must have an OpenAPI specification available to your users and your future self. Huma takes a code first approach - similar to FastAPI. I really…
TIL about fmt.Appendf Turn this: request := [] byte ( fmt . Sprintf ( `{'request_id':%d}` , rand . Int63 ())) Into request := fmt . Appendf ( nil , `{'request_id':%d}` , rand . Int63 ()) I really like this; much simpler to type and quite clean in mu opinion. Another benefit is reduced allocations. It allows us to extend a byte slice instead of generating new ones. The source is quite easy to…
Ziglings is an engaging way to learn zig basics I’m learning zig (enough to get by) and it’s an engaging and simple way to get started. To learn a new language I’d typically find a blog or series of articles and follow along. This can be a little tedious because I like to type things out and run the code myself. Often I’d sick of the tedium of writing the boilerplate, or…
Claude Code update What cannot be understood will be rewritten - Bill Kennedy Okay I’ve come around on this tool a bit. Used correctly with intent and under firm guidance, it can be very powerful. It’s still a massive idiot often enough that its brilliance becomes offset to the point where its untrustworthy. I am not convinced anyone blindly accepting this code won’t be bitten in…
restish is a great API CLI tool I really like huma . I think every API no matter how small should aim to have a OpenAPI document. It future proofs you, and with tools like Huma or goa its built in. In the Huma docs the creator recommends a tool called restish - of which he is also the author. I played with it but to be honest didn’t really explore well enough to “get” it. Now I…
TIL about Go’s json.Indent and when to use it I needed to json.Unmarshal then json.MarshalIndent a large amount of JSON. In this was a set of very large numbers. I learnt that this causes precision issues because unmarshalling to an interface{} will use float64 for numbers. This caused a lot of head scratching, and all I can say is thank god for the debugger! Those who “don’t use…
ROG PG278Q Won’t start - fix This monitor is a POS. Whenever we get a power outage this thing has issues starting back up. I think the capacitors are faulty and the only way I’ve been able to semi -reliably get it back up and going is to turn it off for 30+ seconds. This seems to discharge the capacitors and then it will start. It happens infrequently enough that I forget what to do to…
Remarkable 3.22 SSH I finally got access to 3.22 which supports handwriting search! This is great because I only use it for hand writing. It also allows the (for lack of proper wording) side panel to be snapped to the top bar instead. This unlocks a little extra writing room on the edges as I like to have the panel always visible. Annoyingly, 3.22 brings a new security feature; SSH disabled over…
Disable Firefox AI summary I don’t want your summary or crappy AI force fed into my browser. To disable, navigate to about:config and paste in browser.ml.chat.enabled . Set it to false . Fixed. I’m getting AI fatigue. Tags: #ai #firefox
Working across timezones This week I’ve had meetings across several timezones, delivered a demo at 0200 (my time) and still got heaps of work done. In the lead up to the demo I’ve been chatting with colleagues in Europe and the US. Being part of a distributed global team means some times out of hours calls are required. When I explain that I’m talking to someone at 2100 or…
This is a list of software, tools, and stuff that I use on a regular basis. Development Editors GoLand - I write a lot of Go PyCharm - I used to write a lot of Python Webstorm - I write typescript because I have to Zed for light scripting/reading code NeoVim or just Vim for everything else Terminal & Shell Ghostty - For my Mac WezTerm - On Linux ddterm - Dropdown terminal for linux Zsh with Oh My…
Ghostty quick-terminal makes Mac terminals useful again A while back I whinged hard about terminals on Mac. At the time I was unaware, or it didn’t exist - not sure - of Ghostty’s “quick terminal”. This for my interests works exactly the same as how I’ve setup iTerm to dropdown using F12. Which is/was the only way to achieve what many linux terminals offer out of the…
Claude Code findings After using it for a few days, some initial thoughts and observations. It uses *.bak files despite having git. Obviously it’s learnt this practice from us, failed humans. Often it forgets to clean them up. Sometimes you really have to fight it to get it to do what you want no matter how much “planning” or “context engineering” you do. E.g. using…
NATS, ADS-B and my blog With the help of Claude Code, I (mostly) “vibed” a new page on my static Hugo blog. The page connects to a server over websockets and that server is connected to Synadia Cloud over NATS. At my house I have a Raspberry Pi 2 with an RTL-SDR configured to listen for ADS-B beacons 1090Mhz. The program running on the Pi is called dump1090 (created by the Antirez who…
What you are seeing here is live ADS-B data from a sensor located at my house. It is connected to a server which then connects to Synadia Cloud . The server proxies data to and from NATS over a websocket. Usage Clicking on Watch Aircraft will start a live tail of aircraft seen in the last 30 minutes. There may be times when no aircraft are flying due to noise, typically 0000-0500 AEST. There are…
Ollama on the plane I was doing some work offline on a flight today and (sadly) reached for AI only to realise my usual wasn’t available whilst offline. Then I remembered I setup ollama with qwen3 the other day. Well it worked really well in helping me figure out how to use a library. I haven’t used ollama in a long time and found the local models quite inferior to online but qwen3 was…
NATS and Fly Gateway proxy Woodpecker CI, NATS and Fly.io This was posted in my work chat today. It’s a simple but easy to understand and briefly touches on some of the power of NATS. NATS small footprint, and ability to use leaf nodes really blows up the possibilities for the tool. The fact that John is leveraging Synadia Cloud with his home leaf node is really powerful. I love reading…
Go vendor for debugging dependencies TIL how to debug dependencies in Go easily. One of my deps have a client timeout of 2 * time.Second which meant debugging the connections was nearly impossible. I ran go mod vendor and I was then able to make changes to the vendored code. I increased the timeout to something reasonable and was able to find the issue. I could use the replace directive in my…
Github UI needs vimium extension to be useful <rant> Long issues/PR’s etc in Github UI are a real PITA to navigate around. For instance, if I want to see the status of the branches actions I have to go all the way to the bottom of the page. If you don’t have vimium installed I don’t know what you do here except scroll like a maniac (I’m sure there’s other hotkeys).…
Went to my local SecTalks today In an effort to be more involved in the tech community I ventured off the local SecTalks chapter for a talk on application security. The talk was pretty good, covered a lot of ground from basic defensive programming to supply chain management. The target audience was not software developers but security folk and I think Lochie did a good job from that regard. In my…
Go: errors.As versus type assertions I prefer to use error unwrapping via errors.As and here is my reasoning. Examples Type assertion: // fails if error is wrapped if newErr , ok := err .( * new . Error ); ok { // only works for direct new.Error instances } Error unwrapping // works with wrapped errors like fmt.Errorf('foo: %w', newErr) var newErr * new . Error if errors . As ( err , & newErr ) {…
NATS Micro example NATS Micro is a super simple way to create microservices using NATS as the communication layer. We’re using them a lot at Synadia internally but I’d never used them before. It only takes about 5 minutes to go from an empty file to running service that is handling load. It’s really impressive. Over the weekend I wrote a small (imperfect) example application to…
check-redirects.com A web application to help find out where your short links are taking you. Entering a URL will return each hop’s status code, response headers, and the entire redirect chain. Written in Go, with react and sqlite embedded using PocketBase. tars.run A dead simple, hobbyist, no guarantees URL shortener. Written in Go, rendered with Next.js and persisted with SQLite through…