HNHacker News
TopNewBestAskShowJobs

zrail

9,010 karma · joined May 9, 2010

Pete Keen, Software Developer and Consultant, ex-Stripe

Author of Mastering Modern Payments: Using Stripe with Rails https://www.masteringmodernpayments.com

Author of Handle Your Business: The Succinct Guide to Money and Business for the Self Employed https://www.petekeen.net/handle-your-business

Email: pete@petekeen.com Blog: http://www.petekeen.com Resume: http://www.petekeen.com/resume

submissionscomments
zrail··on Nobody Has Actually Built a Software Factory
I think that's orthogonal to testing/ci/hooks and depends on what you're building and what stage you're at. Personally I would not run anything with real users without PRs and branch protection.
zrail··on Nobody Has Actually Built a Software Factory
1. Make your tests as fast as practicable

2. Split out "syntactically correct" fast checks like linters into a standalone script and call it along with the slower checks in a full-check script

3. Set the fast-check script as a pre-commit hook and the full-check script as a pre-push hook.

4. Give the model instructions that it needs to run the fast-check script after every change and the full-check script when it thinks it's done.

5. Run full-check in CI.

Then you're good as long as the model doesn't bypass the pre-push hook, and even then CI will catch it.

zrail··on Tailcat – Like netcat, but over Tailscale’s data plane
I dug into it a bit because I had the same question. The network layer here is wrapping around the Tailscale daemon's magicsock, which is the thing that does all the DERPing and NAT hole punching. Tailcat builds sort of a fake control plane that does a one way key exchange over DERP (the Meow message type) between client and server, then both sides do the normal CallMeMaybe dance to connect.
zrail··on Bookshelf – Self-hosted eBook library that runs on object storage
VersityGW is very handy.
zrail··on Homelab Ingress with Deterministic IPv6
Hey folks, author here. I wrote in depth about web ingress, one of the more complicated bits in my homelab. The discussion about my previous homelab piece was pretty interesting if you'd like some context: https://news.ycombinator.com/item?id=48872031
zrail··on The Valley of Webhooks
I dunno about "old timey", I wrote a system that does exactly this like six months ago. Granted, it's a money tracking system.

It's always surprising to me how much of the real world runs on CSV and EDI files sent back and forth over SFTP.

zrail··on The Valley of Webhooks
Webhooks are a painful problem. To clarify, Stripe's events API definitely ships a cursor and polling it has been the method preferred by large consumers for a long time.
zrail··on Pi's Minimalism Is Its Advantage
Thanks!
zrail··on Pi's Minimalism Is Its Advantage
Out of curiosity, do you use the pi-xmpp[1] extension or do you have your own?

[1]: https://pi.dev/packages/pi-xmpp

zrail··on Ask HN: Who wants to be hired? (August 2026)
Location: Michigan, US (EST)

Remote: Yes

Willing to relocate: No

Technologies: Ruby, Rails, MySQL, PostgreSQL, Redis, Sidekiq, Docker, Kubernetes, AWS, Python, Go, Fintech, SFTP, CSV

Résumé/CV: https://www.petekeen.net/resume

Email: hi@petekeen.net

Backend engineer with 18+ years of experience going deep on complex systems to find the highest-leverage improvements. Led greenfield projects from design through deployment at fintechs you've heard of; built payment and accounting systems processing billions of dollars. Wrote the book on integrating Stripe with Rails.

ex-Stripe, ex-Gusto.

zrail··on AI financial advice is surprisingly good, especially if you ask right questions
I spun up a simplefin sync tool recently and they made some surprising errors with some of my accounts (incorrect sign, completely missing some transactions). Also they don't do investments, which is problematic when our primary "checking" is actually a brokerage account.

I found SnapTrade[1] which gives away a free personal account with up to 20 brokerage connections (i.e. logins, not accounts).

I'm using simplefin for credit cards and loans and SnapTrade for investment accounts. Seems to be working well so far.

[1]: https://snaptrade.com

zrail··on AI financial advice is surprisingly good, especially if you ask right questions
That's not really DCA, at least how I understand it. DCA is something like "I have $520,000 in cash right now today sitting in checking, I'm going to buy $10,000 a week of VTSAX for the next 52 weeks" which on average is a bad strategy.

What you're describing is better analyzed as a continuing series of lump sum investments. You're investing as soon as you have cash available, not unnecessarily holding onto cash.

zrail··on The Glass Famine
It comes out mid-August according to https://www.amazon.com/gp/aw/d/0593467426/
zrail··on My security camera shipped a GitHub admin token in its login page
(Pedantically) Maximum prefix length of /64 is only required if you want/need SLAAC. If you're assigning static addresses or using DHCPv6 for assignment you can go as small as you want. It's not weird to see /127 for tunnel subnets, for example.
zrail··on Show HN: I replaced a $120k bowling center system with $1,600 in ESP32s
Having grown up in a small midwest town in an R&R desert, I think the canonical answer is a liquor license.
zrail··on Rebuilding My Homelab with Compose, Ruby, IPv6, and No Kubernetes
> I'd expect you to want this

The thing is, I don't want any of that. At least, I don't want any of it to be dynamic. For my purposes the more I can determine at deploy time and make static the better.

K8s is a stack of dozens-to-hundreds of control loops that are built around the idiosyncrasies of a particular distributed key-value store that is only moderately fit for purpose. This is all great fun if you want to learn about it (I did!) and/or if you get to be a user rather than an operator.

zrail··on Rebuilding My Homelab with Compose, Ruby, IPv6, and No Kubernetes
Sure! That's the setup I was running before all of this. My problems are likely entirely my own making, tbh, as described in the article.

IME K8s in general and longhorn especially behaved poorly in the face of heterogeneous hardware where the largest node is flaky and has more cores and memory than the rest of the nodes combined.

My point is that, for me, in my setup, with my own idiosyncratic constrains, trying to keep up with Talos + longhorn + fluxcd expended way too many spoons in any given month.

zrail··on Rebuilding My Homelab with Compose, Ruby, IPv6, and No Kubernetes
Hey thanks! That's my favorite recent addition.

The host machines resolve a GUA from an ISP-provided prefix like normal. On top of that, I l33t'd my way to a fun ULA prefix. Each host's prefix, the stack network prefixes, and container addresses are deterministically derived from hashes of each component's name.

As of today I haven't made any of the ULA stuff routable, although that was the original impetus for it. Clients see each host's GUA in DNS and generally route traffic through Caddy. Cross-host traffic is almost entirely through Tailscale. I run DNS refreshes at deploy time and hourly, but I haven't dealt with Comcast rotating my PD assignment yet. It's been stable for a couple years so I'm probably due.

zrail··on Rebuilding My Homelab with Compose, Ruby, IPv6, and No Kubernetes
Agree! There are a ton of people out there that are happily running k8s on their homelab and there is absolutely nothing wrong with that. I tried it and found it was just too much for me.
zrail··on Rebuilding My Homelab with Compose, Ruby, IPv6, and No Kubernetes
I haven't, mostly for personal reasons rather than technical ones.
zrail··on Rebuilding My Homelab with Compose, Ruby, IPv6, and No Kubernetes
Hey, author here. This is a piece about moving away from kubernetes and toward something that I can actually maintain as a solo person who has a life outside of k9s. It's not really intended to be "anti-kubernetes", more like "kubernetes really is too hard for my purposes".

IMO the best change that I've made has been to give deterministic IPv6 addresses to every container and then using those for ingress.

I'm curious to hear where y'all think the line is between docker compose with Ruby glue and "Dear friend, you have built a Kubernetes".

zrail··on Ask HN: Who wants to be hired? (July 2026)

    Location: Michigan, US
    Remote: Yes
    Willing to relocate: No
    Technologies: Ruby, Rails, Go, MySQL, PostgreSQL, Redis, Docker, Kubernetes, Finance, Banking
    Résumé/CV: https://www.petekeen.net/resume
    Email: hi@petekeen.net
Looking for a place where I can have real impact both on the product as well as helping to level up more junior team members in this brave new AI driven world. I've been at or near fintechs and regtechs for the past 7 of my almost 20 years of experience and would love to continue that or try something new.
zrail··on The 2-Year Apartment Rule
Mold growth is a moisture problem which can either be because of condensation or because of leaks. I agree with the contractors, properly framing out and insulating the interior would probably help a lot with condensation on the inside of the aluminum, as would double pane windows. Ventilation is also important for stopping mold growth.
zrail··on Why thinking out loud with someone beats thinking alone
"Density of cliches" is a great way of putting it. It's exhausting to write that way and unpleasant to read back in the edit process which is why that kind of thing doesn't happen (often) in human-led pieces. LLMs don't get exhausted.
zrail··on The 2-Year Apartment Rule
I think this depends on the construction of the rest of the house. A typical stack built house in the US will have extensive insulation in the exterior walls, but it's paired with a number of different layers intended to expel moisture.

As a retrofit without those things I guess I can see it being problematic.

zrail··on Building a custom mount for a telescoping webcam
Does this work? https://imgbox.com/p2O8aADv
zrail··on Ask HN: What are tools you have made for yourself since the advent of AI?
I've thought about doing this a couple times but haven't followed through yet. What makes yours different/unique compared to, say, pi?
zrail··on Building a custom mount for a telescoping webcam
Nice! I built something along these lines but far more janky. My setup is a clamp-mount mic boom arm and an L-shaped bracket, along with a mic-to-1/4" adapter. Boom clamps to the monitor arm, reaches over the monitor, then the short end of the L is attached to the arm via the adapter. My webcam has a 1/4" screw built in, so that attaches to the long side of the L.

I've been using it for years, works great to get the camera down for calls and back up out of the way when not needed. Only problem is that it's not super stable so I have a small spirit level insert glued to the top of the camera to make adjustments easier.

Edit: somewhat recent photo of my setup, including the webcam: https://imgur.com/a/ip3ff4F

zrail··on SQLite is all you need for durable workflows
Same. The prompt was essentially, every checkbox in this PLAN.md should be task in SQLite.
zrail··on MCP Hello Page
Excellent. Tiny affordances like this should be more commonplace, IMO.

I think this probably also helps when truly clueless users drop the link into an agent directly, because then the agent will relay the message to the user.

← PreviousPage 2 of 34Next →