Field note · May 27, 2026
Why the datasets are seeded
Every dataset on this site is generated at build time from a fixed seed. Rebuild the site and the CSVs come out byte-identical.
Every dataset on this site is generated at build time from a fixed seed. Rebuild the site and the CSVs come out byte-identical.
That is not an optimisation. It is what lets a lesson say "the row with a zero distance and a non-zero fare" and still be correct a year later. Random-at-build-time datasets would mean every deploy churns megabytes of CSV, every example needs hedging, and the git history becomes noise.
def make_rng(seed_text):
h = 2166136261
for ch in seed_text:
h = ((h ^ ord(ch)) * 16777619) & 0xFFFFFFFF
...A hash of the dataset name seeds a small PRNG. Same name, same numbers, forever.
The constraint this imposes is that every generator has to draw its randomness in a fixed order. Add a column in the middle of a spec and every subsequent draw shifts, which changes every row — so new columns go on the end, and a genuine change to a dataset gets a new seed and a note on the dataset page rather than a silent rewrite.
That is a real cost and it is worth paying. The alternative is a dataset library where every example needs hedging and no lesson can point at a specific row.
Reproducibility is cheaper to build in than to retrofit.