Server is smoking, trying to figure out why
twitter.com
twitter.com
> Welp, figured out why - because I am idiot. Routine code change exploded performance. Only took me 2 hours to think of reverting it. Sorry!
https://mobile.twitter.com/HNStatus/status/14020112741043609...
- the relative timestamps would go up to days, so you'd see e.g. "3121 days ago", and now they're replaced with dates at some point.
- we're now able to escape * in comments. It used to be impossible (?) to use asterisks with consecutive characters, so you'd either have to put spaces around it or substitute with something like <asterisk>. This was unfortunate for inline code.
- code blocks no longer scroll horizontally and wrap instead. This is my favorite change because many code blocks were actually indented bullet paragraphs.
- the "past" link in the navbar was added
- the subthread collapse link [-] used to use a - (ASCII 0x2d) and now it uses – (Unicode U+2013). This is my least favorite change because I used to use that for keyboard navigation. It was pretty convenient to Ctrl+F [- <Enter>... to navigate between comments then <Esc> <Enter> to collapse a thread and Ctrl+F <Enter>... to keep navigating.
These are relatively recent changes.
Hasn't been a problem for me (my browser (Firefox on Linux) matches ASCII dashes against en dashes and em dashes too), but you could try using a Compose key shortcut? On Linux at least, the Compose key shortcuts[1] for en dash and em dash are easy: minus-minus-period and minus-minus-minus respectively.
Huh, you're right. I could've sworn that didn't work. I wouldn't have even noticed the character change otherwise. Maybe it started working again when Firefox added the ability to ignore diacritics. I guess that goes further than diacritics and works by general transliteration to ASCII.
https://news.ycombinator.com/pool
Doesn't seem to be linked anywhere, though. I wonder if there are other pages like that.
Others have added more here in 2009 that aren't in either place: https://news.ycombinator.com/item?id=1024293
To each their own, but yours was to me a fun practical example of that famous xkcd strip called "workflows" that is sometimes linked in HN, about how every possible change is seemingly always able to break someone's way of using your product :)
This just means the breakers have to be more clever. My favorites are taking a global lock in Postgres (all reads and writes instantly stop, and someone has to figure out how to kill the session that holds the lock), and installing a service worker that blocked traffic to our domain. (You can roll back, but the service worker is still there!)
It's not a bug per se, it's a concession to conserve server resources, which will be removed once some optimization work has been completed.
You might respond "well why is HN so resource-hungry?" Answer: it's not! HN is run off a single core of a single CPU.
https://news.ycombinator.com/item?id=23187455
> The software for both HN and YC was just a single Arc program (and not a large one) for the first 9 years of their existence, during which they went from nothing to massively successful to industry-changing. Written by one person, programming part-time. That is a staggering achievement. The power of using the right language for your project goes far further than most people dream. Our imagination about this is crippled by path dependence, social proof, and the conditioning that comes from only ever doing things the same few ways, like those fish in experiments (which may be urban legends?) who stick to their corner of the aquarium even after a glass barrier has been removed. The solution space of software and programming is so much larger than most of us want to imagine that it is. Sad.
The practical difference between running on one server with one core and five servers with four cores is nothing—to YC it's a rounding error either way. If there's a meaningful problem (e.g., comments being computationally expensive to paginate well) that the language/runtime/system/etc cannot solve easily enough for it to be remedied in O(months), it does call into question whether the choice of language is the right one. Yes, it can be patched over by a human moderator. But it still highlights a significant weakness in the technology's core function.
Perhaps ironically, most YC companies (and by consequence, YC) would fail miserably if they chose purism and principle over pragmatism when it came to technology decisions.
I could be wrong, but I get the sense that HN doesn't have any full-time developers. In fact, I think it might be entirely dang—he's talked before about how moderating HN leaves him with very little HN development time.
If you wanted a highly scalable HN and nothing more, you’d let Postgres or some graph database do the heavy lifting, add a Racket or Clojure frontend, and call it a day. But that’s pretty boring plumbing work, and doesn’t get you closer to the hundred-year language he’s aiming for.
A problem with pagination as implemented on HN is that the algorithm to display page N seems to be functionally (no pun intended!) equivalent to this:
Render all the comments as one long virtual page
Split it into smaller pages
Render the Nth page from that set of smaller pages
Note! I'm not saying that is how it works. Just that it produces the same result as that.So you read page 1 of an active discussion. You get to the end of the page and hit "more". But while you were reading page 1, other people were commenting, and other people were voting. Now, when it goes to render page 2 for you other comments have moved to the top, pushing the stuff you already read on page 1 down to page 2.
Or maybe what was just after page 1 when you were reading page 1 has moved up due to voting, and when you go to page 2 you end up past it.
It's like if you had a book that went through several editions, with significant changes between editions (including rearranging the order of chapters), and someone put together a printing by taking the first 10 pages from the first edition, the second 10 pages from the second edition, and so on.
This could be fixed while retaining pagination by saving a timestamp when you go to page 1, and then when you go to subsequent pages use a snapshot of the comment database from that timestamp instead of the current comments. If you want to update to the current comments you'd have to hit refresh or go back to page 1.
Another approach while retaining pagination would be keep track of what top level comments you've seen. If when rendering page N it sees that due to comment order changes one of the comments that is going to end on the page is one you've already seen it could omit it. Or maybe omit it unless the tree starting at that comment has changed since you last saw it. (If going this route, I'd also suggesting adding something to the UI to highlight what has changed in the tree and/or dehighlight what you've already seen).
That second approach could still be annoying. You could still get stuck on a single comment that is getting a lot of relies. That could be fixed, but then you are getting into probably needing to add new controls or settings.
I'm sure they have thought of both of those approaches and more, but probably want to keep the interface clean and simple and retain minimal state, hence the plan to someday make it handle very long comment threads on a single page.
Reddit pagination works the same way. When you click the next page link the order may have moved things around and you might see entries you have already seen.
LOL
Amusingly enough I smelled it weeks ago and it finally shut off a few days ago.
(On the other hand there's moderate complexity but low page sizes and nothing like modern websites with hundreds of cookies, heavy js, etc)
Seems like Twitter isn't doing much better.
I use a text-only browser and all comments are left-justified. A flat view, no hidden comments. Looks very different than in a browser that runs Javascript. Seeing "[2 more]" seemed unusual.
> Something went wrong. Try reloading.