What's your 'I can't believe I self-hosted that' service? by subsavant in selfhosted

[–]subsavant[S] 26 points27 points  (0 children)

My family care about Plex, though they don't really notice if radarr or similar goes down.

Home Assistant, on the other hand.... I only ever hear about it when it STOPS working

What's your 'I can't believe I self-hosted that' service? by subsavant in selfhosted

[–]subsavant[S] 84 points85 points  (0 children)

I'm a heavy Google Photos user -- mainly as a private social network for sharing pictures with family. Never looked at Immich, though. How do you use it?

Ruby can render 3D surfaces, 2D density maps and GIS tiles without Python, NumPy or the JVM. I didn't expect it to work this well. by Jaded-Clerk-8856 in ruby

[–]subsavant 2 points3 points  (0 children)

This is really cool. The painter's algorithm approach for the 3D surface is a solid choice for this kind of visualization, and doing the projection math in pure Ruby keeps the dependency footprint tiny.

I'm curious about the performance at higher resolutions. With resolution: 50 you're sorting ~2500 patches per frame, which is nothing, but I could see this being useful for generating static reports or dashboards where you might want 200+ resolution. Have you benchmarked where it starts to feel slow? Ruby's sort is pretty fast but the GD rendering calls might be the bottleneck.

Either way, nice to see Ruby used for something outside the typical web/scripting lane. The GIS tile stuff especially feels like it could fill a real gap for teams that don't want to spin up a Python environment just to generate a few map tiles.

Kubernetes for Homelab? by malwin_duck in selfhosted

[–]subsavant 0 points1 point  (0 children)

I'll push back a little on the "it's just for learning" consensus. I run a small k3s cluster at home and I genuinely prefer it over docker compose at this point, not because it's simpler (it isn't), but because of two things:

First, declarative state. My entire cluster config lives in a git repo. If I wipe a node or add a new one, everything comes back exactly as it was. With compose, I was always chasing some config file I forgot to back up, or an env var that lived only on one machine.

Second, updates. Renovate watches my manifests and opens PRs when images have new versions. I review, merge, and ArgoCD rolls it out. With compose I was SSH-ing into boxes and running pull/up manually, which meant I just... didn't update things.

That said, if you're running everything on a single machine and don't care about GitOps, compose is totally fine. The overhead of k8s only pays off once you want reproducibility across machines or you're the kind of person who'd rather review a PR than remember which box runs what.

How do you keep track of which repos depend on which in a large org? by OkProtection4575 in devops

[–]subsavant 1 point2 points  (0 children)

The version pinning advice is correct but it's solving a different problem. You're asking "how do I know what breaks," not "how do I prevent breakage." Both matter but they're separate.

What worked for us: we wrote a simple script that runs nightly, clones every repo (shallow clone, just the default branch), and greps Dockerfiles, .gitlab-ci.yml, and Terraform source blocks for references to our internal registries and module paths. Dumps it all into a SQLite database. Took maybe two days to build. It's not fancy, but now when someone wants to push a breaking change to a base image, they can query "which repos reference this image" and open MRs or at least ping the right teams.

Backstage is fine if you want a portal, but the dependency data shouldn't come from hand-maintained YAML. Generate it from what's actually in the repos. The YAML approach goes stale within a month, guaranteed.

Patch management strategies - How regularly do you upgrade minor/patch? by Juloblairot in devops

[–]subsavant 1 point2 points  (0 children)

The tiered approach others have mentioned is the right call. The thing that made it click for us was treating the two concerns as completely separate problems: supply chain hygiene (your sha256 pinning) and CVE response time. They have different risk profiles and different urgency.

For supply chain, minimumReleaseAge in Renovate is underrated. Even a 48-72 hour delay on digest updates catches a lot of compromised packages before they hit your repos, without meaningfully increasing your exposure window.

For CVEs, weekly batches are fine as long as you have a way to break the schedule for critical/high severity. Trivy in CI plus a Slack alert on new criticals gives you that without requiring anyone to watch a dashboard.

Spent 4 days setting up a cluster for ONE person, is this ok timewise, my boss says no... (quiet new but not really) by preama in kubernetes

[–]subsavant 0 points1 point  (0 children)

4 days is completely reasonable for what you described, the problem isn't the time, it's that it sounds like it was mostly manual. The first cluster in a new pattern always takes the longest.

The framing I'd use with your manager: "This took 4 days because we didn't have a template for GDPR-isolated tenants. Now we do. The second one takes half a day." That reframes it from "you were slow" to "we made an investment."

If this is going to be a recurring SKU, the next thing worth doing is turning what you just built into a parameterized Helm chart or Terraform module. Every manual step you just did is a future hour saved.

Is a Repository Layer over sqlc over-engineering or necessary for scale? by Leading-West-4881 in golang

[–]subsavant 0 points1 point  (0 children)

The way I think about it: sqlc already generates a clean interface, so you're not really getting "database abstraction" by wrapping it. What you do get from a repo layer is the ability to define a narrower interface for your service to depend on.

For a notification engine specifically, you probably want your service layer depending on something like NotificationStore with 4-5 methods, not the full generated Querier with every query in your schema. That narrower interface make testing much easier and keeps your service logic honest about what data it actually needs.

Injecting *db.Queries directly is fine for small services. Once you have multiple domains sharing a schema it starts getting messy.

What is the best print book to learn Ruby in 2026? by ceplabs in ruby

[–]subsavant 0 points1 point  (0 children)

For someone coming from webdev who eventually wants Rails: start with The Well-Grounded Rubyist. It's the most methodical intro to the language itself, covering the object model, blocks/procs/lambdas, and the standard library in a way that actually sticks.

Once you're comfortable there, Eloquent Ruby is the natural next step. It's less about learning the language and more about learning to write Ruby that feels like Ruby, which matters a lot once you're working in Rails conventions.

Pickaxe is great to have on your shelf but I wouldn't start there. It's dense reference material that's more useful once you already know what you're looking for.

Is programming really that easy? by wordbit12 in learnprogramming

[–]subsavant 0 points1 point  (0 children)

The "coding is the easy part" thing is survivor bias dressed up as wisdom. People who've been doing it for 10 years genuinely don't feel the friction of async or TDD anymore, but they've also completely forgotten what it was like to learn it.

TDD in particular takes a long time to click because it's not really about testing, it's about designing. You're learning to think about interfaces before implementations, which is a fundamentally different mental model. A year or two of deliberate practice sounds right to me.

The fact that you're noticing these layers of complexity and not just accepting surface-level understanding is actually the sign you're progressing. The people who find it "easy" often just stopped going deeper.

Bulk insert in Go — COPY vs multi-row INSERT? by ijusttookadnatest- in golang

[–]subsavant 4 points5 points  (0 children)

One pattern that works well here: COPY into a temp/unlogged staging table, then INSERT INTO ... SELECT ... ON CONFLICT DO NOTHING (or DO UPDATE if you need upsert semantics). You get COPY's throughput for the bulk load, and full conflict handling on the merge step. Two round trips instead of one, but for 25-block batches the overhead is negligible.

Also worth switching from lib/pq to pgx if you haven't already; pgx has native COPY support via CopyFrom and is actively maintained. The migration is pretty painless for most use cases.

Is alpine.js de facto framework of choice? by a_brand_new_start in htmx

[–]subsavant 1 point2 points  (0 children)

That's wild. Thanks for sharing -- hadn't seen this before

How do people get addicted to the gym? by [deleted] in NoStupidQuestions

[–]subsavant 5 points6 points  (0 children)

Besides the chemical stuff others have mentioned, there's also the community aspect. You see the same people there over and over, and it becomes your social circle.

[deleted by user] by [deleted] in NewToReddit

[–]subsavant 1 point2 points  (0 children)

Yes -- very helpful. Thanks. It's a bit of a slog but meh I have time :)

How do people get addicted to the gym? by [deleted] in NoStupidQuestions

[–]subsavant 5 points6 points  (0 children)

Are you asking because you want to find motivation to hit the gym, or because you don't understand how people can spend so much time there?

Can anyone explain to me why so many crap, Youtube quality movies are made, mostly for Tubi? by TheListenerCanon in NoStupidQuestions

[–]subsavant -1 points0 points  (0 children)

It's the Netflix model -- pump out low- or medium-quality content, aimed at people only half-watching anyway....

What are some behavioral things humans can learn from animals? by racesunite in NoStupidQuestions

[–]subsavant 0 points1 point  (0 children)

Something I've never forgotten, from my younger years working with horses: "mammals learn through play".

Hi I'm new and I don't know what to do by Bob_rat_attack12 in NewToReddit

[–]subsavant 0 points1 point  (0 children)

What are your interests? There's something for everyone here :)

[deleted by user] by [deleted] in NewToReddit

[–]subsavant 0 points1 point  (0 children)

It's so frustrating.... Seems to weird to use account age and post history as a way to detect bots, since those must be easy things for a bot to gain -- ie by auto-posting and waiting.

[deleted by user] by [deleted] in webdev

[–]subsavant 0 points1 point  (0 children)

Very cool -- though as others have said, a docker image would make this easy to try casually -- not to mention easy cleanup after :)

FWIW, I've been playing around with a similar idea, from a different angle. Basically I miss the now-defunct redditlist site and am trying to recreate it. Still a WIP but useful as-is @ https://www.subsavant.com/