Hacker News

Top stories

Live mirror
30 storiesupdated just nowView source snapshot
  1. Android 17 is the first since 3.x to add new APIs without releasing to the AOSP(grapheneos.social ↗)
    279comments
  2. Science Is Open Software(jepedersen.dk ↗)
    6comments
  3. Cloudflare Quick Tunnels(cloudflare.com ↗)
    256comments
  4. Saving another 100TB of RAM(cloudflare.com ↗)
    49comments
  5. Why building a Rust LSP is hard(rust-glancer.github.io ↗)
    discuss
  6. How to Write with an LLM(sockpuppet.org ↗)
    281comments
  7. SDCC – Small Device C Compiler(sourceforge.net ↗)
    discuss
  8. Xcode 27.1 Beta Release Notes(developer.apple.com ↗)
    70comments
  9. The Farnese letter(simonklee.dk ↗)
    5comments
  10. Photon-Emission-Guided Laser Fault Injection Enables RP2350 Secure Debug(ledger.com ↗)
    58comments
  11. Show HN: Cactus Needle 3: 8-29MB automation models can match DeepSeek V4 Flash(cactuscompute.com ↗)
    78comments
  12. The first new cat species discovered in 100 years(nationalgeographic.com ↗)
    66comments
  13. Show HN: LiveWorld – Every 24/7 YouTube live camera on one globe(liveworld.info ↗)
    13comments
  14. Cache-to-Cache: Direct Semantic Communication Between LLMs (2025)(arxiv.org ↗)
    12comments
  15. OpenJev(openjev.com ↗)
    247comments
  16. How OpenAI Used Its Own LLMs to Design Its Jalapeño Chip(ieee.org ↗)
    61comments
  17. Claude Code now reads AGENTS.md if there is no Claude.md(claude.com ↗)
    195comments
  18. LispBM is a concurrent Lisp for microcontrollers with message passing(lispbm.com ↗)
    1comments
  19. Cyclomatic Complexity in C#(ndepend.com ↗)
    15comments
  20. Minimal Phone 2(minimalcompany.com ↗)
    189comments
  21. Warez: The Infrastructure and Aesthetics of Piracy (2021)(archive.org ↗)
    31comments
  22. Two parallel neural ectoderm progenitors contribute to the developing brain(newscientist.com ↗)
    59comments
  23. Inside ZCode: Silently uploading your Git history to the cloud(ferstar.org ↗)
    93comments
  24. Alibaba open-sources AI model that can detect cancer and nearly 150 conditions(scmp.com ↗)
    6comments
  25. The Implications of Linguistic Illegibility for LLM Security(arxiv.org ↗)
    20comments
  26. C++26: Trivial infinite loops are no longer undefined behaviour(sandordargo.com ↗)
    208comments
  27. How SpaceX streamlined the Raptor engine(construction-physics.com ↗)
    44comments
  28. Gemini hacked three companies in first known breakout by Google's AI(reuters.com ↗)
    8comments
  29. Column built an issuer processor from scratch(column.com ↗)
    6comments
  30. A search-and-inference database from scratch in pure Zig(antfly.io ↗)
    16comments

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.