HNHacker News
TopNewBestAskShowJobs

zadikian

243 karma · joined February 11, 2026

Alec
submissionscomments
zadikian··on Turn an old junk phone into a Talking Jack-O-Lantern
This app would work with a Bluetooth speaker that has a mic in it, right?
zadikian··on Turn an old junk phone into a Talking Jack-O-Lantern
Was about to guess
zadikian··on AI boosted homework scores, then exam scores dropped: study
You do sometimes get to unlock it by being allowed to use calculators in more advanced classes
zadikian··on What ORMs have taught me: just learn SQL (2014)
And then the 100 lines of JS/Py ends up being way slower than the manual SQL, plus the autogen'd SQL part of it is slow, plus you can't even get the SQL query to profile without running the actual thing with prints.
zadikian··on What ORMs have taught me: just learn SQL (2014)
I never use ORMs. But slightly before 2014, there was still kind of a reason to use them, getting/setting a whole nested bag of fields at once that you don't care about individually. Json/jsonb now handles that better.
zadikian··on Postgres transactions are a distributed systems superpower
The part about durable workflows is technically correct, but it's focusing on different things than what I've ever run into in practice. Any mildly complex system will have side effects outside your DB, then you want idempotency. If you have no side effects, you probably don't need a durable workflow in the first place? Maybe there's a more concrete example.

I have rolled my own little durable workflows in Postgres before, in fact before I even knew durable workflows were a thing with solutions like Temporal. That's fine for many cases where you aren't doing enough steps for it to be tedious, and/or you want permanent records. Would do it again, but not for atomicity reasons.

Other comments have already discussed the issue with the outbox UDF, your external system has to poll and retry either way. It works though. Maybe I'm misunderstanding this?

zadikian··on crustc: entirety of `rustc`, translated to C
So the author made a Rust to C transpiler and immediately used it to transpile... the Rust compiler. I love it.
zadikian··on Google Hits 50% IPv6
They have an AAAA for v6 as of right now, but it wasn't always there https://www.nslookup.io/domains/news.ycombinator.com/dns-rec...
zadikian··on Google Hits 50% IPv6
Almost all mobile carriers use v6, but not exclusively. They also hand out a v4 to every customer. The v6-only part is their internal network.
zadikian··on Prefer duplication over the wrong abstraction (2016)
The saying is you build better abstractions if you don't build them too early.
zadikian··on Prefer duplication over the wrong abstraction (2016)
Yep. Keyword "tried," as in they did it for a while then hit a point where it's impossible to faithfully follow the abstractions because they're wrong.
zadikian··on Prefer duplication over the wrong abstraction (2016)
I always felt like I abstract and modularize things way less eagerly than other programmers. Was pleasantly surprised to find that LLMs do it mostly my way by default, then again they're also bad at abstracting when it's actually needed.
zadikian··on Google Hits 50% IPv6
Not necessarily. I've gone down this rabbit hole in another thread, tldr there are alternatives that would've been easier initially but with the downside of leaving the routes fragmented.
zadikian··on I hate compilers
I agree, also making it do useful work could detract from how well it works as bot-prevention. Recaptcha suffered from its own success eventually, having to ask people to read nearly impossible things, and now many sites are instead asking me to solve puzzles with no practical use.

P.S. Great to see you, omoikane

zadikian··on PgDog is funded and coming to a database near you
This is exciting. INSERT (SELECT ...) doesn't work though, right? The docs only mention VALUES inserts.
zadikian··on Do we fear the serializable isolation level more than we fear subtle bugs (2024)
The "transaction safety" part is confusing. What they mean is if you use SERIALIZABLE, transactions need to be retried, so your code inside the xact should be idempotent. I guess this is safer in Haskell because there are no variables, but that doesn't stop your code from having other side effects.
zadikian··on Do we fear the serializable isolation level more than we fear subtle bugs (2024)
Oh I misremembered, yeah just tested and the second INSERT errors.
zadikian··on Do we fear the serializable isolation level more than we fear subtle bugs (2024)
> TBH I think I've seen more database use than not specifically because it serves as the central race-resolver in a system

But you usually don't need serializable for this, cause READ COMMITTED locks the rows during updates.

zadikian··on Do we fear the serializable isolation level more than we fear subtle bugs (2024)
Cause I want relations and SQL. But also I kinda get what you mean and would not use serializable in Postgres.
zadikian··on Do we fear the serializable isolation level more than we fear subtle bugs (2024)
In my experience, the performance hit is so bad that it's not feasible to use that way. It's also not strictly safer behavior-wise because retries can trip people up.
zadikian··on Do we fear the serializable isolation level more than we fear subtle bugs (2024)
Tbh I always forget the specifics soon after reading them. Basically you can do an atomic UPDATE WHERE if there are no subqueries involved. 90% of the time that's good enough, and for anything else I end up refreshing on features like SELECT FOR UPDATE.

Well also I know Postgres UNIQUE indexes provide additional locking. Like you can do an INSERT... WHERE NOT EXISTS or INSERT... ON CONFLICT that is guaranteed to succeed.

zadikian··on Do we fear the serializable isolation level more than we fear subtle bugs (2024)
Was curious about the Flexcoin hack, but the article wasn't loading, so here's an archive: https://web.archive.org/web/20240423000007/https://hackingdi... Supposedly it was this simple:

  mybalance = database.read("account-number")
  newbalance = mybalance - amount
  database.write("account-number", newbalance)
  dispense_cash(amount)   // or send bitcoins to customer
and MongoDB didn't even have a way to do this atomically? An RDBMS with read-committed would handle this fine if you did "read for update" on that row.
zadikian··on LLMs Are Not a Higher Level of Abstraction
Even if it were reproducible, realistically most people are using some service like Claude that makes no guarantee that the model or hardware didn't change. Which is fine, it doesn't need reproducibility.

This is interesting though, I didn't know PyTorch had a debug mode for reproducibility.

zadikian··on LLMs Are Not a Higher Level of Abstraction
This is sorta how I've felt working the past ~7 years.

Simple example, we've been striving for 90% unit test coverage and thorough code review when there's 0% integration test coverage. I blame the metrics only looking at unit tests, but also many people think unit tests should come first. I would prioritize integration. There are some small pieces that need to work reliably, but if your system relies so hard on all of them working right, it's a bad system. That, and too many things will work in pieces but not overall.

Broadly I'm gonna assume that the team will later hire solid SWEs who don't necessarily know how our stuff works, and aren't going to read 100 docs about it. If this is a backend+DB combo, get your DB right and there won't be too many wrong ways to code against it in the future, get it wrong and it becomes a black hole for SWE-time. Or if someone on their first day can't run a system locally for debugging, no matter how elegant the code is, don't count on that system getting fixed quickly during an outage.

zadikian··on Why IPv6 is so complicated
Want to add, it's not too late to do this on top of the ipv6 we have today.
zadikian··on LLMs Are Not a Higher Level of Abstraction
If you throw away the code then yeah, but I've never seen anyone do this.
zadikian··on Why IPv6 is so complicated
The home solution is supposed to be mDNS. I just checked right now, my mDNS isn't working on my LAN, idk why.
zadikian··on LLMs Are Not a Higher Level of Abstraction
I'm fine with that. The part that makes it not really an abstraction is, you still deliver code in the end. It'd be different if your deliverable were prompt+conversation, and the code were merely an intermediate build artifact. Usually people throw away the convo. Some have tried making markdown files the deliverable instead, so far that doesn't really work.

It makes even less sense when people compare an LLM to a compiler. Imagine making a pull request that's just adding a binary because you threw the source code away.

zadikian··on Why IPv6 is so complicated
Yeah, so you still reach the user, it's just probably less efficient than the all-v6 route.

Edit: Oh, you mean if they want unsolicited inbound traffic? Sure, but that's only a thing for services. I mean you can have a default-allow firewall to home devices but really shouldn't.

zadikian··on Why IPv6 is so complicated
That's a legit concern. If that's not interesting enough to the kind of user that wants all-new v6, instead start from today where some users are on the new v6 network, and say they added the 4:: prefix as a way to pick up the kind of user that doesn't want to change much. They'd still be compatible eventually. Though the reason I was thinking 4:: from the start would've been attractive enough is, a lot of people did use 6to4 and other halfway measures despite having no immediate gain.

Today's DNS6 DHCP6 etc are totally incompatible with v4. 4:: buys backwards-compatibility. Each can be updated to support longer addrs without caring whether you use it with v4 or v6.

Page 1 of 10Next →