Hacker News

Top stories

Live mirror
30 storiesupdated just nowView source snapshot
  1. An Empirical Study of Harness Design for Coding Agents(arxiv.org ↗)
    15comments
  2. I Vibed a Proof of Conway's Conjecture(overreacted.io ↗)
    17comments
  3. AI Protest in Montreal(montrealgazette.com ↗)
    1comments
  4. C++26: Trivial infinite loops are no longer undefined behaviour(sandordargo.com ↗)
    2comments
  5. Bend 2 and the Vibe-Coding Trap(liampwll.com ↗)
    177comments
  6. OpenJev(openjev.com ↗)
    184comments
  7. North Korean nuclear test sets off years of earthquakes – Science – AAAS(science.org ↗)
    discuss
  8. The Shadows Lurking in the Equations – Underwater Islands(gods.art ↗)
    4comments
  9. I don't like passkeys(hawksley.dev ↗)
    312comments
  10. Subnormal floating-point numbers are expensive on Intel processors(lemire.me ↗)
    36comments
  11. Warren Buffett Steps Down as Berkshire Chairman, Names Son to Replace Him(nytimes.com ↗)
    109comments
  12. Cekura (YC F24) Is Hiring(ycombinator.com ↗)
    discuss
  13. Jemalloc 5.4.0(github.com/jemalloc ↗)
    62comments
  14. NATS publishes preliminary report on technical incident of 8 September(nats.aero ↗)
    2comments
  15. Mathematicians Build Long-Awaited Graph Sandwich(quantamagazine.org ↗)
    discuss
  16. The scourge of x86 emulation(fex-emu.com ↗)
    57comments
  17. Bonsai 2 27B: Near-Lossless Compression in a 9x Smaller Footprint(prismml.com ↗)
    170comments
  18. Microsoft exec called AI scraping 'the largest theft of labor in human history'(techcrunch.com ↗)
    482comments
  19. Astra for Law(openai.com ↗)
    645comments
  20. Bend – A language that blocks AI mistakes via proof, on CPU and GPU(bend-lang.com ↗)
    272comments
  21. BeanShell3 in Development(beanshell.github.io ↗)
    1comments
  22. Cloudflare Quick Tunnels(cloudflare.com ↗)
    1comments
  23. Second Circuit Allows Government to Search Electronic Devices at the Border(knightcolumbia.org ↗)
    10comments
  24. ZCode, the GLM coding agent, silently uploads your Git history(tokenstead.ai ↗)
    49comments
  25. Hister: A private search engine for the pages you visit and the files you keep(github.com/asciimoo ↗)
    179comments
  26. Qwen 3.8 Omni Flash(qwen.ai ↗)
    102comments
  27. Wax motor(wikipedia.org ↗)
    89comments
  28. Replacing Pull Requests with Delta(zed.dev ↗)
    50comments
  29. NATS Major Incident Preliminary Investigation Report [pdf](nats.aero ↗)
    1comments
  30. Fujitsu launches made-in-Japan next-generation CPU FUJITSU-MONAKA(global.fujitsu ↗)
    242comments

Source of the recent outagelet

68 pointsby 12y ago
47 comments
We have a list of phrases that get replaced in titles and their replacements (which can be the empty string if we simply want to remove something). A moderator accidentally added an identical pair to it.
12y agoHN ↗

Probably used "while" instead of "for each" when matching.

12y agoHN ↗

Presumably a hit on any of the "before" keys triggers not just a replacement with the corresponding "after", but another pass through either a subset of the replacement list starting from the key that matched, or the entire replacement list from the top down; otherwise an identical pair wouldn't have a chance to be pathological.

12y agoHN ↗

i wonder whether other cycles would cause the same problem.

12y agoHN ↗

I spent entirely too much time trying to parse 'outagelet'.

12y agoHN ↗

Maybe this term "outagelet" should be added to list of terms to automatically replace in article titles.

12y agoHN ↗

For some reason my brain insists on adding an extra 'l' so it reads as "outlagelet" every time.

12y agoHN ↗

yup. It took me literally several minutes before I saw the word "outage" in there for some reason. For some reason the non-word "gelet" overwhelmed my brain so I kept seeing out-a-gelet. Kind of like port-a-potty. Then I migrated to outa-gelet->ou-tage-let->o-utage-let->(I skipped ou-tagel-et because that looked like a german word sandwiched between two french words)->outage-let---eureka, where's my bath tub!

12y agoHN ↗

I read "outragelet" which is something else that occasionally happens around here.

12y agoHN ↗

I guess "outagelet" is a replacement for "downtime".

12y agoHN ↗

It wasn't straight downtime. For a while we were up but you couldn't submit stories or comments.

12y agoHN ↗

Ill get my team to incorporate this in their lexicon and include it in post mortems.

Minimizes perceived downtime.

12y agoHN ↗

I've seen this called badtime. Outagelet seems too cute, when I think of downtime as serious business.

(TBF, that is when I am a paying consumer or a paid developer. I'm upset about neither the HN badtime nor the phrase outagelet.)

12y agoHN ↗

That is hilarious. That one will be hard to resist.

12y agoHN ↗

That's why, have tests and a staging environment.

12y agoHN ↗

This is HackerNews. It's not called PerfectSoftwareDevelopmentPracticesInActionNews.

Just saying.

12y agoHN ↗

I was able to keep a 10k/min request website up and running when I was 15. I feel sorry about who's taking care of this website.

12y agoHN ↗

Right ... websites with tests and a staging environment never experience downtime.

12y agoHN ↗

Hmm, that sounds like quite n0nsense to me. Maybe it's because "less downtime" is better than "more downtime"?

12y agoHN ↗

Why none of us should quit our day jobs...

12y agoHN ↗

But that's exactly what pg/YC wants you to do!

12y agoHN ↗

Out of curiosity, what are some of those phrases?

12y agoHN ↗

Don't know about phrases, but exclamation points are automatically removed, so "!" -> "" in this case. The problem arose because someone replaced an unidentified X with X, resulting in an infinite recursion.

12y agoHN ↗

Things like "Top 10 Reasons X is Y" becomes "Reasons X is Y" I believe.

12y agoHN ↗

For a hardcoded list that is manually edited frequently, maybe a duplicate-safe data structure would be preferably. It might require an extra line to parse out duplicates, but at least a page won't fail if something like this happens again.

12y agoHN ↗

I'd assume that they've added a check for that now, but it's hard to predict beforehand what things will break.

12y agoHN ↗

We have a list of phrases that get replaced in titles and their replacements (which can be the empty string if we simply want to remove something). A moderator accidentally added an identical pair to it.

This should prove once and forever that tail recursion is dangerous and does not help with real world problems. Clearly, blowing up the stack would have been the appropriate and safer response here.

12y agoHN ↗

I think you mean that TCO is dangerous. Besides, this is probably more of an implementation problem. Do you really want to be applying a filter like this multiple times?

If I had to implement this, I would just imagine that just taking your mapping, and for each key,value , do a title.replace(key,value). I would be a "good enough" solution , and in the worst case you still have human editors on HN.

12y agoHN ↗

If you have one wordfilter to map "!"->"" and another to replace "cunt"->"asdf" and you got the input "cu!nt" what should the output be?

12y agoHN ↗

good point. I understood this to be more of a counter to non-malicious intent than otherwise.

12y agoHN ↗

Interestingly, distinguishing between "non-loopy" and "potentially loopy" sets of rewrite rules seems to be equivalent to the halting problem :-( The key phrase would be "tag systems".

12y agoHN ↗

I'm not sure I particularly care so long as it produces some output before the heat death of the universe.

12y agoHN ↗

Yeah, that would replace an infinite loop with a stack overflow in that specific case, but I'm not sure that all infinite loop bugs can be converted to stack overflow bugs in the general case. Another commenter's suggestion to "have tests and a staging environment" makes more sense to me.

12y agoHN ↗

Sorry, this is uneducated bullshit. There was a infinite loop and that was a error in programming logic. Limiting loops a certain number of iterations is absolute bogus. Ever though how stupid it sounds to demand c to forbid while(1)?

12y agoHN ↗

issue: code 403 (Forbidden).

I think you should do your best to always return an appropriate HTTP status header, and in this case it is status 503 (Service Temporarily Unavailable). You really want to reserve 403's for those pesky w00t w00ts :) , ' aNd 1=1 and the likes.

Getting 403's with my personal account, but gaining (slow) access through another browser, I was convinced that the issue had to do with my account being blocked.

12y agoHN ↗

In this case using nginx allow and deny statements was much easier than doing bit fiddling in Lua and returning 503s. Any time spent researching other options would have been time not spent determining the problem.

Often getting to the root of the problem as quickly as possible while simultaneously keeping the site up (practical) wins over always using correct HTTP response codes (pedantic).

12y agoHN ↗

Serving 403s to w00tw00ts is for casuals. Face those leet haxors!

12y agoHN ↗

You just need enough cores so the infinite loop completes in a finite amount of time.