Top all-time · #1360
Evan Jones
Personal blog · evanjones.caprogrammingsystems
Evan Jones's personal blog at evanjones.ca covers programming and systems. Since 2009, 54 different Hacker News readers have linked it 97 times, most often “How both TCP and Ethernet checksums fail (2015)”. The last post was in 2023, but the archive is still widely read.
Most-linked posts?
- How both TCP and Ethernet checksums fail (2015)5 people · 6 mentions · first linked 2015-10-09
- Setenv Is Not Thread Safe and C Doesn't Want to Fix It5 people · 5 mentions · first linked 2023-11-20
- Huge Pages Are a Good Idea4 people · 4 mentions · first linked 2023-01-19
- Advice on looking for a new software engineering job3 people · 5 mentions · first linked 2021-03-01
- Why databases use ordered indexes but programming uses hash tables3 people · 3 mentions · first linked 2019-12-08
- Network Latencies in the Data Center2 people · 5 mentions · first linked 2021-10-12
- JVM statistics cause garbage collection pauses (2015)2 people · 4 mentions · first linked 2023-03-21
- Durability: Linux File APIs2 people · 3 mentions · first linked 2020-10-12
- Random Load Balancing Is Unevenly Distributed2 people · 2 mentions · first linked 2023-08-29
- Finding the Four Month Bug: A Debugging Story (2015)2 people · 2 mentions · first linked 2019-07-02
What Hacker News says?
A few links gathered from a quick google search as a primer: http://stevehanov.ca/blog/?id=97 https://www.evanjones.ca/portable-linux-binaries.html https://insanecoding.blogspot.com/2012/07/creating-portable-... https://rpg.hamsterrepublic.com/ohrrpgce/Portable_GNU-Linux_... https://github.com/wheybags/glibc_version_header In other words: there are a lot of steps and a lot of gotchyas to doing this that you're gloss…
Comment linking /portable-linux-binaries.html
on “Thank You, Valve”Submitted Why databases use ordered indexes but programming uses hash tables as a story · 429 points
HN discussionTCP checksums are notoriously weak: https://www.evanjones.ca/tcp-checksums.html With enough packets passing the dodgy RAM a noticeable number will manage to get mangled in such a way that the checksum is still correct.
Comment linking /tcp-checksums.html
on “AT&T Fiber in the SF Bay Area is flipping bits”Submitted Durability: NVMe Disks as a story · 159 points
HN discussionI'm glad you've at least looked into this, but you have a number of things wrong: First of all, it is not a single algorithm, it is a family of algorithms This argument holds for SHA1, but all modern cryptographic hash functions are also families. The SHA3 family has SHA3-224, SHA3-256, SHA3-384, SHA3-512, SHAKE128, and SHAKE256 For a CRC of size N, you have to also choose a N-bit polynomial, N-bit starting value, a…
Comment linking /crc32c.html
on “Linus on Git and SHA-1”Submitted Preventing server overload: limit requests being processed as a story · 151 points
HN discussionobligatory link: https://www.evanjones.ca/linear-search.html
Comment linking /linear-search.html
on “Go is not an easy language”Submitted gRPC Is Easy to Misconfigure as a story · 140 points
HN discussionPerhaps related: "Setenv Is Not Thread Safe and C Doesn't Want to Fix It" (2023) -- https://www.evanjones.ca/setenv-is-not-thread-safe.html and HN comments regarding how rust was affected: https://news.ycombinator.com/item?id=38342642 Decades old footguns - aaargh!
Comment linking /setenv-is-not-thread-safe.html
on “Improving Steam Client Stability on Linux”Submitted Farewell to MIT as a story · 132 points
HN discussionIt's a long standing bug, setenv and unsetenv are not thread-safe https://www.evanjones.ca/setenv-is-not-thread-safe.html
Comment linking /setenv-is-not-thread-safe.html
on “Rust’s dependencies are starting to worry me”Submitted The Four Month Bug: JVM statistics cause garbage collection pauses as a story · 131 points
HN discussionGalactica is useless. It can only generate answers. (Pablo Picasso, see https://www.evanjones.ca/picasso.html )
Comment linking /picasso.html
on “Galactica: an AI trained on humanity's scientific knowledge (by Meta)”Submitted Fork() without exec() is dangerous in large programs (2016) as a story · 128 points
HN discussionAnyone with enough hardware can observe this sort of problem: http://www.evanjones.ca/tcp-and-ethernet-checksums-fail.html When The CRC and TCP Checksum Disagree: http://conferences.sigcomm.org/sigcomm/2000/conf/paper/sigco... Alternately, just look at "netstat -s" for any machine on the Internet talking to a bunch of others. Here's the score for the main web host of the Internet Archive Wayback Machine: 3088864840…
Comment linking /tcp-and-ethernet-checksums-fail.html
on “A ZFS developer’s analysis of Apple’s new APFS file system”Submitted How both TCP and Ethernet checksums fail (2015) as a story · 107 points
HN discussionI plan to cover CPython's memory management in the future posts. In a nutshell, an object gets destroyed when its reference count hits 0. In this case, CPython calls `tp_dealloc` [1] of the object's type. The `tp_dealloc` slot releases all the resources the object owns and frees the memory. The implementation of `tp_dealloc` differs for different types. Eventually, the `free` function of the memory allocator is call…
Comment linking /memoryallocator/
on “How the Python object system works”Submitted Durability: Linux File APIs as a story · 97 points
HN discussionPreviously on setenv being a terrible thing: https://www.evanjones.ca/setenv-is-not-thread-safe.html (discussion: https://news.ycombinator.com/item?id=38342642 first comment is even about it causing issues in Rust)
Comment linking /setenv-is-not-thread-safe.html
on “C stdlib isn't threadsafe and even safe Rust didn't save us”Submitted Fork() without exec() is dangerous in large programs as a story · 84 points
HN discussionIt's time to move beyond this attitude and make things safe by default. For example, Solaris has a safer version of setenv(). "It is ridiculous that this has been a known problem for so long. It has wasted thousands of hours of people's time, either debugging the problems, or debating what to do about it. We know how to fix the problem." https://www.evanjones.ca/setenv-is-not-thread-safe.html
Comment linking /setenv-is-not-thread-safe.html
on “C stdlib isn't threadsafe and even safe Rust didn't save us”Submitted Go: Functional Options Are Slow as a story · 80 points
HN discussionYou need ECC /and/ pervasive checksumming. There are too many stages of processing where errors can occur. For example, disk controllers or networks. The TCP checksum is a bit of a joke at 16 bits (it will fail to detect 1 in 65000 errors), and even the Ethernet CRC can fail - you need end to end checksums. http://www.evanjones.ca/tcp-and-ethernet-checksums-fail.html
Comment linking /tcp-and-ethernet-checksums-fail.html
on “Should I buy ECC memory? (2015)”Submitted JVM statistics cause garbage collection pauses (2015) as a story · 79 points
HN discussionI can see where my statement was ambiguous, I'd intended to say that the GC developers spend tons of time tuning their implementations to fit their users' workloads. I will say that "government project which serves the whole country now" doesn't really specify how many requests you're doing or what kind of pauses are acceptable. If it's a traditional website, a 300ms GC pause might be invisible. A 2s pause might eve…
Comment linking /jvm-mmap-pause.html
on “Rust is more than safety”Submitted Using floating-point numbers for money as a story · 77 points
HN discussion> I really don't get what people mean when they say they're against frameworks. Your app that you're making with no framework...how are things structured? Do you just repeat yourself everywhere? So, there are frameworks and there are libraries. With a framework, you use the structure provided by the framework, and hook pieces of your code into it; with a library, you structure your code to your problem, and use libr…
Comment linking /frameworks-necessary-for-large-scale-software.html
on “I won't be using Angular for my next project”Submitted Networked games: Playing in the past or future as a story · 62 points
HN discussionIts actually very useful, although very weak. The link layer check, at least in the case of Ethernet, really only protects your data "on the wire". It doesn't protect it inside the switches. It turns out there are failure modes, such as the one that caused this issue, where the packets get corrupted inside the switch (probably due to bad RAM). Details about how this can happen: http://www.evanjones.ca/tcp-and-ethern…
Comment linking /tcp-and-ethernet-checksums-fail.html
on “Linux kernel bug delivers corrupt TCP/IP data”Submitted How to Use UTF-8 with Python as a story · 57 points
HN discussion