HN user

wging

2,284 karma
Posts7
Comments734
View on HN

I'm sure the record standing so long is partially down to the fact the mile isn't run at major championships

I'm not so sure about that. The 1500 is the equivalent race run at major championships (and most paced time trials). But that record (3:26.00 by Hicham El Guerrouj) has stood one year longer, and is generally considered a stronger record. This is possibly the closest anyone's ever come to an equivalent performance to the 1500 record, in either the mile or the 1500. The second-fastest 1500m time ever is 3:26.34 by Bernard Lagat in 2001. The World Athletics scoring tables value a 3:42.66 at about 3:26.3, eyeballing the midpoint of given values. (Or taking the WA point values on the top lists, Josh Kerr's new mile record is 1298, Lagat's second-best 1500m is 1297, and El Guerrouj's 3:26.00 is 1302.)

I don't know whether the WA points or other conversion methods actually have small enough error bars to distinguish between the Lagat and Kerr performances, but the 1500 record beats the mile record by a big enough margin that I don't think we need to worry about that.

https://worldathletics.org/records/all-time-toplists/middlel...

https://worldathletics.org/records/all-time-toplists/middlel...

It's his first marathon ever, but he's a very experienced runner. It would be hard to find a better prospect for a good first marathon. He's a multiple (former) world record holder and medalist at shorter distances from the mile up to half marathon. His half marathon is still 2nd all time.

I wouldn't have predicted this out of nowhere, but if you told me a marathon debut went this well and asked me to guess whose it was, I like to think I'd have come up with Kejelcha in my top few picks.

That said, great 5000/10000 athletes don't always have great marathon careers. An example from this race is the world record holder at both those distances, Joshua Cheptegei. He's run several marathons but none spectacular by his standards. He was in this race too but 7 minutes back.

I've read that even if you absorb it all, there's some question about whether it's useful. This Alex Hutchinson article suggests, among other things, that it may spare your fat stores rather than your muscle glycogen:

Even if you can absorb 120 grams per hour, it might not make you faster. In Podlogar’s study, cyclists burned more exogenous carbs when they consumed 120 rather than 90 grams per hour, but that didn’t reduce their rate of endogenous carb-burning—that is, they were still depleting the glycogen stores in their muscles just as quickly.

https://www.outsideonline.com/health/training-performance/en...

https://archive.ph/Vpk0h

https://pmc.ncbi.nlm.nih.gov/articles/PMC9560939/

Why I forked httpx 4 months ago

These days node supports the fetch API, which is much simpler. (It wasn't there in 2020, it seems to have been added around 2022-2023.)

But there are no citations on any of the edits claiming this, and there were two incompatible dates claimed (March 5, March 8).

Regarding the noise you mention, I wonder if memento's use of the git 'notes' feature is an acceptable way to contain or quarantine that noise. It might still not add much value, but at least it would live in a separate place that is easily filtered out when the user judges it irrelevant. Per the README of the linked repo,

It runs a commit and then stores a cleaned markdown conversation as a git note on the new commit.

So it doesn't seem that normal commit history is affected - git stores notes specially, outside of the commit (https://git-scm.com/docs/git-notes).

In fact github doesn't even display them, according to some (two-year-old) blog posts I'm seeing. Not sure about other interfaces to git (magit, other forges), but git log is definitely able to ignore them (https://git-scm.com/docs/git-log#Documentation/git-log.txt--...).

This doesn't mean the saved artifacts would necessarily be valuable - just that, unlike a more naive solution (saving in commit messages or in some directory of tracked files) they may not get in the way of ordinary workflows aside from maybe bloating the repo to some degree.

One nice way to do things, if you can get away with it, is to model the actions your application takes explicitly, and pass them to a central thing that actually handles them. Then there can be one place in your code that actually needs to understand whether it's doing a dry run or not. Ideally this would be just returning them from your core logic, "functional core, imperative shell" style.

There is some prior work on mitigating the performance cost of immutability that you might be interested in. For example, Clojure's persistent vectors allow fast modifications without destroying the original vector, because internally they're wide trees rather than just linear arrays of memory. This allows for assignments to be implemented without a copy of the full vector. https://hypirion.com/musings/understanding-persistent-vector...

It's certainly possible that what I encountered, labeled as an 'icicle graph', is a nonstandard usage of the term. But if so, that's a shame. I don't think inverting the y-axis is useful by itself, the different bucketing is what makes for an actually useful change.

I also like icicle graphs for this. They're flamegraphs, but aggregated in the reverse order. (I.e. if you have calls A->B->C and D->E->C, then both calls to C are aggregated together, rather than being stacked on top of B and E respectively. It can make it easier to see what's wrong when you have a bunch of distinct codepaths that all invoke a common library where you're spending too much time.)

Regular flamegraphs are good too, icicle graphs are just another tool in the toolbox.

A more common alternative to counting divs would be CSS classnames or (for unique elements on the page) IDs. You'd do `document.querySelector('.my-class')` to locate `<div class="my-class">` or similar, rather than using the fact that e.g. something is nested 3 divs inside <body>.

Even if this custom element trick didn't work, I don't see why one would need to count divs (at least if you control the markup, but if not then made-up tags aren't an option anyway). The article even mentions using class names as an option.

How uv got so fast 7 months ago

uv supports PyPI, which still has packages that are Python-2-only. So even if you're running python 3.8, it seems possible to try to declare a dependency on some <3.0 code from PyPI. That means it's an error they should detect.

How uv got so fast 7 months ago

I think the article is being careful not to say uv ignores _all_ upper bound checks, but specifically 4.0 upper bound checks. If a package says it requires python < 3.0, that's still super relevant, and I'd hope for uv to still notice and prevent you from trying to import code that won't work on python 3. Not sure what it actually does.

The beginning of that article is slightly wrong: the compiler should compute N(N-1)/2 (and does), because the original code adds up all the numbers from 0 to N excluding N. The usual formulation in math includes the upper bound: the sum of integers from 1 to N, including N, is N(N+1)/2, so you have to replace N by (N-1) if you want a formula for the sum where the last number is N-1.

But in go you can just _err and never touch it.

You can do that in Rust too. This code doesn't warn:

    let _ = File::create("foo.txt");
(though if you want code that uses the File struct returned from the happy path of File::create, you can't do that without writing code that deals somehow with the possibility of the create() call failing, whether it is a panic, propagating the error upwards, or actual error handling code. Still, if you're just calling create() for side effects, ignoring the error is this easy.)
Advent of Code 2025 8 months ago

Yes (or so I thought too!), but apparently no: https://blog.vero.site/post/noulith

(post title: "Designing a Programming Language to Speedrun Advent of Code", but starts off "The title is clickbait. I did not design and implement a programming language for the sole or even primary purpose of leaderboarding on Advent of Code. It just turned out that the programming language I was working on fit the task remarkably well.")