HNHacker News
TopNewBestAskShowJobs

sgarland

5,521 karma · joined May 18, 2020

[ my public key: https://keybase.io/sgarland; my proof: https://keybase.io/sgarland/sigs/L3NDZjRkwP104qhB6b-hPvZp-S1y6AmlcolanYS8Vnw ]

email: <stephan@{username}.dev>

meet.hn/city/us-Charlotte

Socials: - github.com/stephanGarland

Interests: DevOps, Hardware, Databases, Open Source, Linux

---

submissionscomments
sgarland··on Deus Ex
My favorite game when I was a kid. It was the first shooter I’d played where it really felt like you could do anything from pure stealth through IDGAF tanking, and the game would respect your choices.
sgarland··on Discord is ditching Electron and its new app uses less RAM
Eh, it’s still pretty annoying. I have a small voice chat app, and it easily takes a couple of minutes to build releases for all three platforms (MacOS, Linux, Windows) on a MBP.
sgarland··on Discord is ditching Electron and its new app uses less RAM
This has to be hyperbole. I built (with Claude) a P2P LAN voice-only chat app in Rust recently, using native frameworks for each platform (Swift, GTK, Win32), and it weighs in at about 5-6 MB depending on the platform. I have spent an enormous amount of time looking for places to squeeze it further. It has ephemeral channels and password protection, but that’s about it: no text chat, no video, no friends, no blocklists, no concept of servers, etc. I can’t imagine everything else Discord has squeezes into another 5 MB.
sgarland··on Ask HN: What's your current AI agentic setup?
1. Personal Claude Max $100 tier; Work Claude Team, and ChatGPT Team. I use almost exclusively Claude Opus 5.5 Medium for everything. ChatGPT seems to miss a lot that Claude doesn’t; I’ll occasionally ask it to do an adversarial review where it finds something, but that’s about it.

2. No.

3. Claude CLI and Codex, but I rarely use the latter, and just call its review function from within Claude. If Anthropic didn’t require API usage for external tooling, I’d be interested in trying a lighter harness, but it’s not that big of a deal for me.

4. No.

5. No.

sgarland··on Kitty 0.50
I like and appreciate both, though I grew up as a Windows power user, and hated vi/vim for many years when I got into *nix. It wasn’t until I saw my boss teleport a block of code elsewhere in a file with a few keystrokes that I decided I needed to learn it.

IMO, Foobar2000 [0] was/is the zenith of bespoke GUI programs from that era. The UI is clean, the menus make sense, it’s infinitely configurable but the defaults are fine, it supports plugins…

0: https://www.foobar2000.org/

sgarland··on Kitty 0.50
tmux?
sgarland··on Kitty 0.50
It’s the archetypal Windows 2000-era power user tool. A million menus, every option you can imagine, and once you learn it, you are god.
sgarland··on Show HN: Bema: Work messaging built for humans
Same. It’s perhaps a little more bloated, but it’s nothing like what Discord has become, as a counter.
sgarland··on WTF Ubuntu?
The only recent reason I’ve managed to come up with is it far and away has the best support for Nvidia’s various drivers and utilities for running GPUs and its assorted ecosystem, like Infiniband and Spectrum-X Ethernet.

If there’s another option I’m unaware of, I’d love to hear it. Also to be fair, I didn’t evaluate Sid for this, only Stable.

sgarland··on Cisco gives engineer unlimited AI tokens to rewrite legacy code
I should check to see if SimCity runs on Windows 11.
sgarland··on Cisco gives engineer unlimited AI tokens to rewrite legacy code
And yet somehow, Windows 11 remains a steaming pile of incoherent garbage.
sgarland··on Cisco gives engineer unlimited AI tokens to rewrite legacy code
> to the speed, reliability, and assurance requirements your market segment expects.

I suspect that the average Cisco customer expects a bit more stability than $RANDOM_SAAS.

sgarland··on Python's experimental JIT to be removed
I posted it as well before scrolling down and seeing yours. Deleted mine, as your post goes into much more detail.

I don’t know how people who’ve worked with Python and been frustrated with its performance don’t know about Numba.

sgarland··on Remove pgrust: the entry is cheating (per-query kernels and result caching)
Tbf, the author (prompter?) went on Postgres.fm [0] recently to discuss it, and while it didn’t make me entirely confident in it, it did at least seem like it was several steps above the average vibe project.

0: https://postgres.fm/episodes/pgrust

sgarland··on PHP2Shell: AI uncovers critical RCE in PHP
Hack (Meta) is presumably contributing somewhat to PHP’s continued existence.
sgarland··on Setting Up SSH Keys on macOS with Touch ID
Thank you for raising this, as it predates TFA by a year, and also correctly cites their source.
sgarland··on Security advisory: Critical remote code execution vulnerabilities, update now
Not who you’re replying to, but Rust lacks things I assumed were basics in any modern language, like random number generation, JSON handling, and regex. I understood the reasoning once I looked into why, but it was still startling at first.

In contrast (I know this is apples to oranges), Python’s stdlib is incredibly broad. colorsys lets you convert between color spaces. plistlib lets you read and write Apple’s property list files. graphlib has a topological sorter, which can lead to hilariously short interview questions when the interviewer isn’t familiar with Python’s stdlib.

sgarland··on How Postgres DELETE can actually scale
Postgres can absolutely saturate an NVMe drive on its own.

> Additionally, think resource constrained devices like mobile phones.

SQLite will saturate the phone’s I/O before you saturate SQLite.

> Or an aggressive cost reduction mentality where each cpu cycle shouldn't be unnecessarily wasted without feeling guilty.

> Our database Dip stores raw binary as well as json as first class citizens.

These two statements are in conflict. If you want to minimize CPU cycles, parsing JSON is a terrible idea, and you should be pushing everything into bitfields, operating on it with bitwise manipulations.

> If you come from a systems engineering background like that, you wouldn't be much impressed with many traditional databases at all. I am generally not much interested in SQL databases anyway.

I would love to see a Jepsen analysis of your DB. Then a benchmark of it vs. Postgres, or MySQL, or SQLite.

sgarland··on How Postgres DELETE can actually scale
Disclaimer: I have never worked at Uber. This is all armchair speculation, and I could of course be wrong.

IMO, if you read the later post on Docstore [0], you can see that they spent an enormous amount of time building back everything that they gave up with Schemaless - the enforcement of a schema (the irony...), transactions, serializability, etc.

They needed to create secondary indices as tables because they were storing everything in JSON blobs, which is difficult to directly index now, let alone in the 2010s. You can of course argue that they needed to use JSON blobs because they kept needing schema changes, and online DDL back then was difficult. I would counter that if you keep needing schema changes, you haven't done a good job modeling.

Everywhere I have worked that has DBs they claim are too large, I have been able to prove (typically by cloning one and remodeling it) that the reason they're suffering from performance issues is because they've made a series of decisions which were fighting against their RDBMS: UUIDv4 PKs, strings for low-cardinality data, excessive secondary indices, poor query plans from the ORM, massive JSON blobs that's duplicating already-present data, etc. At my last job, I showed a 30% speedup purely from changing to a PK that made sense for the table's usage.

0: https://www.uber.com/us/en/blog/schemaless-sql-database/

sgarland··on How Postgres DELETE can actually scale
I have operated a BDR Postgres cluster spread across five global regions with hundreds of TB of data, with multiple reader nodes attached to each primary, each on instances with node-local NVMe drives; the entire cluster saw over 1 million QPS. I will grant you that there are much larger examples of scale, but they typically exist on DBs designed for that, like Spanner, Vitess, etc.

I am not asking for hand-holding, I’m asking for one single publicly-available example of this being done, because I cannot fathom it being necessary or beneficial, and you have not provided concrete proof.

sgarland··on How Postgres DELETE can actually scale
The insertion hit isn’t as bad as it’s made out to be; also, the majority of applications are heavily read-centric, something like a 98/2 split, so it’s usually a net gain.

You should, of course, test it on your own data before deciding.

sgarland··on How Postgres DELETE can actually scale
You also now have to manage your own ACID guarantees, and what amounts to cache invalidation. Not sure how this is “a simpler mental model.”

Same with locks / contention: non-locking reads don’t cause contention, or at least, none that wouldn’t also occur with a separate table acting as the index.

Do you have any examples of this being used at scale, preferably with an accompanying blog post or other form of documentation?

sgarland··on How Postgres DELETE can actually scale
I do not see how this could possibly be faster. Now you have an additional indirection.
sgarland··on How Postgres DELETE can actually scale
> Because a workflow typically performs many steps over a long period of time, those step records are widely separated on disk

Clustered indices would be so, so nice for Postgres to have. OrioleDB can’t come quickly enough.

> However, this stamp is applied only to the row itself, not to any indexes referencing the row.

Indices also hold the hint bit LP_DEAD, which is set by any query that follows the index to the heap and finds that it’s invisible to everyone.

I suspect that a combined query that uses pagination rather than LIMIT … OFFSET would be more performant here, and could skip the dead tuple problem.

    DELETE FROM step_outputs
    WHERE ctid = ANY(ARRAY(
        SELECT s.ctid
        FROM step_outputs s
        WHERE (s.created_at, s.id) > (?, ?)
            AND s.created_at < ?
            AND NOT EXISTS (
                SELECT 1 FROM workflow_status w
                WHERE w.workflow_uuid = s.workflow_uuid
            )
        ORDER BY s.created_at, s.id
        LIMIT ?
        ))
   RETURNING created_at, id;
Haven’t tested that, but something of that shape. You’d need a composite index on (created_at, id) as well.
sgarland··on How Postgres DELETE can actually scale
> Application-managed indexes

Are you suggesting that one should recreate B+trees in code?

sgarland··on How Postgres DELETE can actually scale
IME as a DBRE, it usually is rejecting simplicity. Most devs know precious little about RDBMS, and so reach for what they do know. When an experienced DBA / DBRE shows them the idiomatic way to do what they’re attempting, they often reject it and claim “flexibility,” or “keeping logic out of the database.” It’s just not wanting to do things they’re unfamiliar with, but for some reason it’s accepted for RDBMS, because it lives in the liminal space of infra and code.
sgarland··on Tmux and Claude Code: Sessions, Send-Keys, and the Ceiling
That’s the same reason I started using the Secure Enclave SSH access for HomeAssistant: I wanted to grant agentic access, but I also didn’t want my house’s automations being blown up. Everything is written offline as IaC, and gets pushed with explicit approval only.
sgarland··on Florida's HOAs and condo associations are making the housing crisis worse
Seems like an excellent way to resolve shared responsibilities.
sgarland··on Florida's HOAs and condo associations are making the housing crisis worse
Yes. I lived in an HOA neighborhood in Texas that was fine. Dues were $25/month, and from that we got a nice community pool, and a legitimately nice Christmas party: they’d rent food trucks that were pre-paid, put up a Santa village, bring in VR rides, etc. All paid for from dues. They also really did not bother you if you were making an attempt at keeping your place looking decent.

Then I moved to one in North Carolina that was god-awful. Dues started at $65/month and went up every year. They’d send out neighborhood reminders that a pressure-washing service would be in the neighborhood next week if anyone wanted to hire them; anyone who didn’t got notices a few weeks later that they needed to pressure-wash their driveway and/or house. I also had to buy a specific brand and sheen of paint to repaint my mailbox; of course, the lettering was only available from a single supplier.

I now live on an acre lot that sits between two neighborhoods. I have no HOA, and it is glorious.

sgarland··on Regex visualized as 3D marble run
You can enable extended mode for most engines, which allows you to add white space and comments.

Personally, I like regexes, in the same way that I like shell string manipulation: it looks utterly inscrutable, and performs magic. If I write one in code meant for others, I usually use extended mode with each line commented.

Page 1 of 34Next →