News for hackers. Stuff that matters.

mrkaye97

Re:What I Self-Host on Thursday October 15, 2026 @07:59PM (#50111992)
Out of curiosity, do you have any concerns about backups (especially for e.g. VaultWarden and Immich)? I've been pondering running them, but figure that I'd need to back up to The Cloud for me to feel less concerned about losing everything, at which point: what's the point? Curious what you're doing on that front!
Re:Do dentists know what they're doing? on Wednesday October 14, 2026 @07:54PM (#50097320)
This hit too close to home. After years of dentists (and orthopedic surgeons, and GI surgeons, and plumbers, and so on) selling me oodles of shit I don't need, I finally found one who strikes me as very honest. I had to stop going to her for one year when my insurance switched, and what do you know? The dentist I saw in the interim did a hard sell on Invisalign, which I happily turned down, and never went back.

I'm back at my One Trusted Dentist now, and the only way anyone's getting me out of that chair is in a body bag.

Re:QGIS bans AI assisted contributions on Monday October 12, 2026 @11:44AM (#50058097)
This has basically been the story for us at Hatchet too, and it’s been similarly challenging. A lot of the OSS PR reviews I’ve done lately from non-core contributors are basically just me going back and forth with Claude via someone else, which is frustrating when I feel like I could 1) just not or 2) do the back and forth with Claude myself and cut out the middle man.

I have a sneaking suspicion that people are having some agent check out 500 repos and just prompting with “find a bug in this repo and fix it” and submitting the results blindly.

Edit: typos, on mobile

Re:Show HN: Jev Plays Pokémon Red on Saturday September 26, 2026 @04:00AM (#49854268)
I think “significantly dumber” might include traditional RL, and thus no tokens at all
Re:Incident with Github.com on Monday August 17, 2026 @10:08AM (#49331228)
Could be - I’d also argue the time cost to the engineers to switch is pretty significant too, regardless of the monetary cost
Re:Incident with Github.com on Monday August 17, 2026 @09:52AM (#49330894)
I think the clear reason is even with their unreliability, the cost of migrating off of GitHub for _most_ places is not worth it, and so companies don't / won't (yet)
Re:Go 1.27 Interactive Tour on Sunday August 02, 2026 @10:55PM (#49150708)
Ah yep! I should’ve given a Go example. In Python we use decorators because it’s what’s in fashion, but in Go and TypeScript you just create a `NewTask()` e.g. where you pass a function (as well as other args), and it returns something with e.g. a `Result` method. And that result method, which is generic, is the thing that’s really nice to have typed.

Agreed codegen works fine here too by the way, but it feels kind of clunky to me (it’s something I don’t love about Go, although I know it’s also an important part of the ecosystem and is popular).

Re:Go 1.27 Interactive Tour on Sunday August 02, 2026 @05:22PM (#49148477)
As a bit of a counterpoint, I help maintain SDKs for Hatchet in multiple languages (largely Python and TS, but also contribute to Go a bit too) that benefit heavily from generics. It's especially useful for things where users of the SDK provide e.g. return types from functions they register, and we want those to be strongly-typed elsewhere in the codebase. A simple Python example is:

  @hatchet.task()
  async def my_task(...) -> SomeOutputType:
    return SomeOutputType(...)

  ## imagine this is an API handler:
  @api_handler("/some/path")
  async def handle() -> ...:
    result = await my_task.run(...)

    # we now know `result` is of type `SomeOutputType` without any sort of type assertion, etc.
Admittedly, I'm not a Go expert, nor am I a programming languages expert. But I do feel that this type of behavior is really only possible (with nice ergonomics) with generics, and it's always been upsetting to me that somehow Python's type system feels more complete than Go's in this arena, or at least it has until more recently.

Maybe this falls into the 1% of cases, but I'd suspect this sort of thing is more common than that.

Edit: I should have mentioned - in the Python example above, `@hatchet.task` is generic with the output type of the task it wraps.

Re:I'm sorry I didn't respond to your job application on Tuesday July 28, 2026 @11:27PM (#49093082)
For what it's worth, Work at a Startup ostensibly does give you something like this on the hiring side, although it's been far from perfect in my experience. I suspect other "platforms" for job searching might have similar, but it'd be tougher in a dedicated ATS like Greenhouse or Lever or some such, since I imagine there are data privacy laws that limit their ability to "enrich" candidate data across companies, which LinkedIn, WaaS, etc. can bypass by having you make a profile
Re:The startup's Postgres survival guide on Thursday July 23, 2026 @05:15PM (#49028145)
Indeed! Materialized views won't work here as PG doesn't support "always updated" / "auto-refreshing" materialized views natively (although you can get something similar with extensions like TimescaleDB). Left joins are the thing we're often trying to avoid though, especially when the join conditions are involved, as we've seen the planner just make poor decisions in the past at unpredictable times. That's exactly the sort of situation where you might reach for this sort of trick
Re:The startup's Postgres survival guide on Wednesday July 22, 2026 @02:32PM (#49011319)
+1 to this - I've griped pretty often that FastAPI's documentation implicitly recommends this (https://fastapi.tiangolo.com/tutorial/sql-databases/#create-...) by suggesting using dependency injection to manage database connections, only to start seeing connection pool exhausted errors as soon as the number of concurrent requests exceeds the number of allowed connections.
Re:The startup's Postgres survival guide on Wednesday July 22, 2026 @01:19PM (#49010148)
Thanks! I should have clarified - we haven't been using this pattern for selective joins. Strongly agreed that pulling down extra data into memory and then doing the filtering doesn't make much sense. We've found it useful in the case where it's hard to write a query where the planner _does_ make good decisions because of the complexity of the join conditions (e.g. joins using cases, a boolean "or", or something similar).

Also, to re-emphasize: we do this rarely, but it's been helpful the times we've done it

Re:The startup's Postgres survival guide on Wednesday July 22, 2026 @01:15PM (#49010091)
(Matt from Hatchet - Hi Ulysse :wave:)

I, at least, don't know of a perfect fix here. Re: the original comment - Postgres will also error on deadlocks after it detects them without setting your isolation level to Serializable, but I agree with you that often retrying doesn't help, and could even cause cascading / snowballing failures if you have a backlog of retries piling up because of deadlocks.

I don't know if there's a good solution, really. We've fixed deadlocks incrementally over time as we've found them, which has worked pretty well, but of course that means also needing to deal with the "finding" part, which has generally come in the form of lots of `deadlock detected` log lines and errors (and retries accompanying those).

One thing that might be worth auditing is why there are two different bits of application code that are updating the same rows in two different tables in different orders. I know it's a contrived example, but it seems like it could be a code smell to me. Maybe this is the kind of thing that arises when two different subteams are working on the same database and are largely siloed.

Alexander will likely have more thoughts here as well, just my two cents!

Re:A Second-Grade Teacher Revived a Beloved Video Game on Wednesday July 22, 2026 @11:46AM (#49008657)
agreed :)
Re:The startup's Postgres survival guide on Wednesday July 22, 2026 @11:36AM (#49008486)
(Matt from Hatchet)

One small addendum here is we've had a lot of success performing joins in memory in a few very specific situations where the alternative is a single, often overcomplicated query. I've heard / seen advice many times in the past about performing fewer round trips to the database being something to optimize for (often good advice!). Sometimes this is taken too far, resulting in overly-complex queries requiring complicated JOIN or UNION logic, CASE logic, and so on.

We have a couple of places in our codebase where we perform two or more simpler queries independently instead, and then loop through their results and use maps to match the relevant rows. Conventional wisdom often suggests this path will hurt performance because of the extra database round trip in addition to the loops needed to perform the join, but it is actually beneficial in these cases because of more predictable query planning behavior. We use this trick sparingly, but it can be helpful in a pinch.

Note that some ORMs will also do this for you in the background, which we don't necessarily endorse, and we try to use this sparingly when writing a single query on its own is not realistic.

Re:A Second-Grade Teacher Revived a Beloved Video Game on Monday July 13, 2026 @07:25PM (#48900312)
I was just going to post this, and searched first and landed here. Not much to say beyond that reading this piece made me so happy, and brought back tons of nostalgia for days I'd long forgotten.
Re:Just Use Postgres for Durable Workflows on Friday May 29, 2026 @05:10PM (#48329311)
Hello! Hatchet engineer here - just thought I'd drop a link to some discussion on this topic from last year, which is here: https://news.ycombinator.com/item?id=43574767

Happy to answer more questions beyond this!

Show HN: Call Your Loved Ones

https://cylo.mkaye.dev/

Hey HN!I've been needing to do a better job of staying in touch with the people who are important to me. So I built a little app that lets me add people to call, and tells me when I last called them. I figured some of you might find this useful in some way :)The code is here: https://github.com/mrkaye97/call-your-loved-onesIf you go to the URL linked in the post, you can use the app with all of...

( Read More... | no comments | 2 points | on HN )
Re:Advent of Code 2025 on Sunday November 30, 2025 @11:16AM (#46097864)
I've been using Elixir, which has been wonderful, mostly because of how amazing the built in `Enum` library is for working on lists and maps (since the majority of AoC problems are list / map processing problems, at least for the first while)
Re:Collaboration sucks on Tuesday November 11, 2025 @04:08PM (#45892878)
IMO this is very dependent on the risk of cutting once, so to speak. I'd imagine that at PostHog, the idea is there's little risk of cutting many times - iterating - and more damage is done by the measuring taking far too long.

Show HN: Medici, an open-source Splitwise-like app for managing expenses

https://github.com/mrkaye97/medici

Hey everyone!I've been working on this little app I'm calling Medici after getting annoyed with Splitwise only allowing me to submit a few expenses a day. It has all the main Splitwise features (debt simplification, different ways of splitting expenses, default splits, etc.)Would love feedback and just wanted to share! I'm self-hosting on my RaspberryPi and figured others might find it useful...

( Read More... | no comments | on HN )

Show HN: Medici, a minimal, open-source, dead-simple Splitwise alternative

https://github.com/mrkaye97/medici

Hey everyone!I've been a Splitwise user for a long time (sometimes paying, sometimes not), and have been rather frustrated at their new-ish policy of only allowing N (small) expenses to be submitted per day. And I was curious to write some Rust and thought the expense simplification algorithm would be fun to implement, so I built this.Thought others might find it fun or useful! It's dead simple...

( Read More... | no comments | 2 points | on HN )
Re:Ask HN: What Are You Working On? (June 2025) on Monday June 30, 2025 @10:34AM (#44423861)
I've been working on this little Splitwise clone type app I've been calling Medici: https://github.com/mrkaye97/medici

Mostly to learn some Rust and because I thought most of the features of Splitwise worth paying for would be fun to build. Been loving working in Axum and getting to implement some fun database things

Older »