Skip to main content
This page was machine-translated and may contain errors or omissions.

Life and Science Tools

Formulas, rhythms, balancing, and significance tests

Tue Aug 18 2026
13780 words · 69 minutes

Algorithms Behind Life and Science Tools

The site’s tools section holds dozens of small machines — calculators, a Pomodoro timer, an equation balancer, a t-test — spanning four kinds: life calculators, focus rhythms, chemistry balancing, and statistical tests. This post walks through each kind and its design: where the formulas come from, why the rhythms work, how conservation becomes an equation, and why significance keeps getting misread. What they share is putting one formula and one boundary of applicability into the same interface.

The Formulas and Boundaries of Life Calculators

The formula is explicit; the boundary is usually implicit. It hides in the range of input validation, in the thresholds that bucket the result, in the “estimate for reference only” disclaimer. Formulas and boundaries each take half the space, because in an honest calculator the second sentence matters as much as the first.

Hands-on versions: BMI Calculator, BAC Estimator, Math Lab, Finance Toolkit, Fitness Toolkit, Ovulation Tracker, FX Toolkit.

One formula and one boundary

Sort the site’s calculators by where their formulas come from and you get three kinds.

Definitional. Metrics like BMI and body-fat conversion hold by convention, so there is no “computed wrong”, only “the definition doesn’t apply”.

Empirical regression. The Deurenberg body-fat formula, the Widmark blood-alcohol formula, the maximum heart rate formula. Statistical fits to a population, bound to be off for any individual.

Institutional parameter. The annuity monthly payment, personal income tax. The parameters are set by contract or policy, the formula itself is exact, and all the error sits at the input end.

Boundaries come in three spellings.

The first is input validation. Height capped at 300cm, weight capped at 500kg — guards against typos, not against real physiological possibility.

The second is threshold bucketing. Cut points like 18.5, 24, 28 slice a continuous output into named bands, and those cut points are the hardest part of the boundary.

The third is the disclaimer. Under the blood-alcohol output hangs a line: “an estimate only, don’t drive”. That is the last line of defense a formula’s author has.

Three kinds of formula times three kinds of boundary is the map of this whole section.

BMI

BMI is probably one of the most computed indices in the world. BMI=w/h2BMI = w/h^2 — weight in kilograms over height in meters squared.

In the 19th century the statistician Quetelet noticed, across masses of human measurements, that adult weight is roughly proportional to the square of height.

Note the “roughly”. If the body were a geometrically scaled solid, weight should grow with the cube of height. But growing taller is mostly the skeleton lengthening, and the cross-section expands slower than linearly.

The best empirical exponent sits between 2 and 3, closest to 2, so h2h^2 is a compromise.

The direct consequence of that compromise: BMI is systematically distorted for the very tall and the very short, and for extreme heights the more sensible version is the cubed Ponderal index. But h2h^2 fits well enough across the common range and is simple enough to do in your head, so it became the world’s shared language.

In the source, h2h^2 is used in two directions.

Forward is the routine move: plug in height and weight, get the index.

The reverse is more interesting: turn the bucket thresholds back into weight ranges. Ideal weight is the range from 18.5×h218.5 \times h^2 to 24×h224 \times h^2 kilograms, stretching with the square of height.

That is cleaner than any “standard weight table”. A table is a few hundred discrete numbers; a formula is every height.

The basic version sets its gauge range at 10 to 40, which just about covers every combination of human height and weight.

The bucket thresholds 18.5 / 24 / 28 are the overweight and obesity cut points of the Chinese adult standard (WS/T 428), stricter than the WHO’s 25 / 30.

The same body, a different threshold table, a different diagnosis. This is the most naked boundary of a definitional formula: cut points are not natural constants, they are policy parameters handed down by epidemiology.

They depend on the population sampled, on the insurance budget, on some committee’s vote about where the “risk inflection” sits.

Body fat in the BMI+ sub-tool takes another road. Empirical regression.

The Deurenberg formula writes body-fat percentage as bf=1.2×BMI+0.23×age−10.8(male)−5.4bf = 1.2 \times BMI + 0.23 \times \text{age} - 10.8(\text{male}) - 5.4 (no 10.8 subtracted for women).

Look at its independent variable: body fat is expressed as a function of BMI. It is not an independent measurement, just BMI translated into the language of body fat.

Every distortion of BMI is inherited intact. For a muscular person (high BMI, low body fat) it must overestimate. For an elderly person (muscle lost, unremarkable BMI, body fat not low) it must underestimate.

When the formula was published in 1991 it was fitted to a white population, and ethnic differences in body composition are one more undeclared boundary.

The nutrition tab of the same toolbox carries the empirical chain onward. Mifflin–St Jeor basal metabolism 10w+6.25h−5a+510w + 6.25h - 5a + 5 (men; women subtract 161), times an activity factor of 1.2 to 1.9 for daily expenditure, then split 30/40/30 into protein, carbs and fat.

Three regressions joined head to tail, each passing its error to the next, and every link deserves a mental 10% discount.

Statistically, a BMI threshold is a percentile cut on a population distribution.

Height and weight are a pair of correlated random variables, and “overweight” cuts at the inflection of a risk curve, not at an individual’s truth.

The mechanism of “many small factors summing into a bell curve” is demonstrated vividly by the site’s Galton board post with three point-dropping experiments.

The argument over BMI’s buckets is, at bottom, an argument over where to cut that same distribution curve.

The Widmark formula

The blood-alcohol estimate comes from the Swedish chemist Widmark in the 1920s and 30s, and it is still the ancestor of every BAC calculator.

In the source it is one line:

bac = (alcohol / (weight * r)) / 10 - 0.015 * hours

Unpacked, the first term is dilution. AA grams of pure alcohol spread through r×Wr \times W kilograms of body fluid (WW is weight in kilograms), divided by 10 for a percentage concentration (grams per hundred milliliters).

rr is the distribution ratio, physically “the fraction of body weight that is fluid the alcohol can reach”. Alcohol barely dissolves in fat, only in water, so men take 0.68 and women 0.55, the whole sex difference compressed into one parameter.

The second term is elimination. The liver metabolizes alcohol at a near-constant rate, about 0.015% an hour. For a 70kg man that is roughly 7 grams of pure alcohol.

Constant-rate elimination is the signature of zero-order kinetics, and at ordinary concentrations alcohol metabolism really does behave that way. That is why a formula from the 1920s has not aged.

A full example. A 70kg man drinks 50 grams of pure alcohol: about two and a half 500ml bottles of beer, or 125ml of 52% baijiu.

Peak concentration 50/(0.68×70)/10≈0.105%50 / (0.68 \times 70) / 10 \approx 0.105\%. Two hours later subtract 0.030.03: roughly 0.075%0.075\%.

Compare the three thresholds in the source, 0.02 / 0.05 / 0.08. Slightly tipsy, clearly impaired, over the legal line.

Those three numbers line up exactly with statute. The US drunk-driving limit is 0.08%, China’s DUI threshold of 80mg/100ml is 0.08%, and its drink-driving threshold of 20mg/100ml is 0.02%.

The calculator’s buckets quote the law directly, which gives the formula legal consequences.

This formula’s boundaries are written where it does not model.

It assumes alcohol enters the blood all at once. No absorption curve, no food in the stomach, no drinking duration. The peak lands at hour zero; in the real world it usually arrives half an hour to two hours later.

It assumes the metabolic rate is the population mean. Individual variation reaches a factor of two or three, and a slow metabolizer needs far longer to get back to zero on the same intake.

So that line under the output, “an estimate only, don’t drive”, is the most honest part of the formula. Its most dangerous use is exactly when it is most accurate: the user looks at a “safe” 0.079 and starts the car.

Deriving the monthly payment

The loan calculator is the archetype of the institutional-parameter formula: exact math, parameters written into the contract.

The annuity monthly payment deserves a full derivation, because it is nothing but a geometric series.

Let the principal be PP, the monthly rate rr (annual rate over 12), and the term nn periods. A fixed amount mm is paid each month; the present value of the kk-th payment is m(1+r)−km(1+r)^{-k}.

“Paid off” is defined as the sum of the present values of all payments equaling the principal:

m∑k=1n(1+r)−k=m⋅1−(1+r)−nr=Pm \sum_{k=1}^{n} (1+r)^{-k} = m \cdot \frac{1-(1+r)^{-n}}{r} = P

Solving:

m=P⋅r(1+r)n(1+r)n−1m = P \cdot \frac{r(1+r)^n}{(1+r)^n - 1}

The source copies it in one line, and total interest is mn−Pmn - P.

Equal-principal repayment is another cash-flow arrangement. Fixed principal P/nP/n each month, interest charged on the current balance, the kk-th payment being P/n+(P−(k−1)P/n)⋅rP/n + (P - (k-1)P/n) \cdot r, falling by Pr/nPr/n every month.

Total interest is the arithmetic sum Pr(n+1)2\frac{Pr(n+1)}{2}.

Plug in the source’s defaults: 1,000,000 at 3.1% over 30 years (n=360n = 360, r≈0.002583r \approx 0.002583).

Annuity runs about 4271 yuan a month with 538,000 in total interest. Equal principal opens at about 5361 yuan, drops about 7.2 yuan a month, and totals about 466,000.

The 70,000 gap is not magic that makes equal principal the better deal. Equal principal retires more principal early, so the average capital tied up is lower; the difference is a cash-flow schedule.

Invest the monthly difference between the two plans and the comparison becomes investment return versus loan rate. 3.1% is a risk-free benchmark, and any arrangement that reliably beats 3.1% turns the interest-saving equal-principal plan into the loser.

The source also emits a 360-row amortization schedule. Each period’s interest is the balance times the monthly rate, principal is payment minus interest, and the balance falls monotonically.

The popular line “early mortgage payments are all interest” deserves a correction. Interest is large because the balance is large, every period is charged exactly on the balance, and no ordering was designed in. That monotonically falling balance column in the schedule is more convincing than any explanation.

The same geometric series has a mirror image in the finance toolbox. The DCA formula computes the future value of an annuity:

FV=m⋅(1+r)n−1rFV = m \cdot \frac{(1+r)^n - 1}{r}

The payment formula answers “how much per period retires a present value PP”; the DCA formula answers “how much per period grows into FVFV”.

∑(1+r)−k\sum (1+r)^{-k} and ∑(1+r)k\sum (1+r)^k are reciprocals, one present value and one future value, the same geometric series read forward and backward.

The source catches the zero-rate case with i || 1e-9, so the degenerate FV=mnFV = mn never divides by zero.

The income tax tab of the same toolbox is the other extreme of the institutional type.

A seven-bracket progressive rate table, each bracket with a quick-deduction constant: tax = taxable income × rate − quick deduction.

The quick deduction is not a policy favor but a precomputation of “full-bracket progression minus excess-bracket progression”. Bracket by bracket takes seven additions, one table lookup finishes it, and mathematically it folds the piecewise sum into a constant.

The source expands all of it into inputs: the 60,000 yuan basic deduction, the social insurance and housing fund deduction, nine categories of itemized deductions (child education 2,000 a month; mortgage interest 1,000 a month, mutually exclusive with the rent deduction; major medical expenses above 15,000 out of pocket capped at 80,000…).

The boundaries of an institutional-parameter formula all live in policy text. Thresholds, itemized deductions, quick deductions — every number carries a policy document number, and the code merely transcribes it faithfully. Which is also why it goes stale faster than any regression.

The finance toolbox

The finance toolbox has twenty-three tabs; three of them here.

The first is DCA and FIRE.

The FIRE calculator’s core is one division: financial independence number = annual spending ÷ withdrawal rate, 4% by default. The famous 4% rule, from a 1998 retrospective at Trinity University in the US on the survival of historical stock-bond portfolios.

Its boundary list is the longest here. It retrodicts the survival rate of thirty-year portfolios in one market at one moment in time, and its guarantee about the future is close to zero.

The implementation deliberately uses a year-by-year while loop. bal = bal × (1 + i) + annual contribution, until the FI line is crossed.

A closed form exists, of course, but the loop lets you change assumptions and add mid-stream contributions at any time. Engineering flexibility bought with theoretical elegance.

The second is currency conversion.

The fx tab’s table is six hard-coded numbers: CNY 1, USD 7.12, EUR 7.75, JPY 0.047, GBP 9.0, HKD 0.91. Each currency’s rate is quoted against the yuan (static sample data, no live updates).

Conversion between any two currencies takes one fixed path:

result = amount * rate[from] / rate[to]

Fold the amount into the anchor currency CNY first, then unfold it into the target.

This is the simplest form of the cross-rate mechanism: anchor one base and N currencies need only N−1 numbers, every other rate is endogenous. EUR against USD is just 7.75 ÷ 7.12.

Real central bank mid-rates add a weighted average of market-maker quotes, published at a fixed time each day, but the structure — one anchor, endogenous crosses — is the same. Bank counter rates add a bid-ask spread on top, a commercial layer on the same structure.

Read this table and you have read why almost every quote in the global FX market is against the dollar. Anchoring is a storage-efficiency choice.

The third is the purchasing power parity tab, the counter-example to currency conversion.

The table is replaced by PPP factors. For the same basket of goods, 4.2 yuan and 1 dollar “fit into the same basket” (sample parameters, same idea as the Economist’s Big Mac index), and conversion again anchors first and converts out.

Market rates are priced by tradables and capital flows, PPP by cost of living. The gap between the two numbers is a crude measure of how differently the same money lives in two countries.

1000 yuan of purchasing power is 140 dollars at the market rate and about 238 dollars at the PPP factor.

The exchange rate is not wrong and PPP is not wrong; they were never measuring the same thing.

A side note: the simulation tabs (fund NAV, candlesticks, bull-bear cycles) drive a random walk with a linear congruential generator, s = (s × 1103515245 + 12345) mod 2^31.

A “fake market” grown from a deterministic seed demonstrates exactly the hardest thing about a real one: sample paths differ wildly, and only the statistical properties are up for discussion.

The fitness toolbox

The fitness toolbox is the densest concentration of empirical regressions on the site; nearly all of its twenty-four tabs are a fit to some population. Four of them, for their shape.

Epley 1RM. 1RM=w×(1+reps30)\text{1RM} = w \times (1 + \frac{reps}{30}). Extrapolate a one-rep max from a submaximal weight ww and a rep count repsreps.

The source inverts it into an nRM table: wn=1RM/(1+n/30)w_n = \text{1RM} / (1 + n/30), one measurement giving every rep range.

The boundary is in the shape. reps sits in the numerator as a linear term, and extrapolation degrades fast past 10 reps. An endurance-dominant light set and a strength-dominant heavy set are not the same physiological system.

The US Navy body-fat formula. For men, 495/(1.0324−0.19077lg⁡(waist−neck)+0.15456lg⁡(height))−450495 / (1.0324 - 0.19077 \lg(\text{waist} - \text{neck}) + 0.15456 \lg(\text{height})) - 450.

Its structure is “cylinder model plus Siri equation”. Approximate the body as a cylinder: the waist gives the circumference, the height gives the length, and the log of the length-to-diameter ratio enters the density term. The denominator yields body density DD, and Siri’s 495/D−450495/D - 450 turns density into body-fat percentage.

The two seemingly arbitrary constants, 450 and 495, are the fingerprint of the Siri equation.

The female version swaps “waist − neck” for “waist + hip − neck”, encoding the sex difference in fat distribution into the measurement term.

The boundary is just as visible: three girths only, so it skews for abdominal obesity and for the muscular.

The MET calorie formula. kcal=MET×weight×hourskcal = MET \times \text{weight} \times \text{hours}.

MET is the dimensionless ratio of active metabolic rate to resting metabolic rate: running 9.8, jump rope 11, yoga 2.5. The table comes from group measurements in exercise science handbooks.

The formula treats everyone as an average person; heart rate, body composition, movement economy are all absent. On the same MET value, a trained athlete and a beginner can differ by thirty percent in calories burned.

Karvonen heart rate zones. Target heart rate = resting heart rate + (max heart rate − resting heart rate) × intensity%.

It subtracts one resting value more than the usual “percentage of max heart rate”. Reserve heart rate is what reflects the heart’s mobilizable range, and that is Karvonen’s correction to the simple proportional method.

But max heart rate is itself an empirical formula. The source estimates it with 220−age220 - \text{age}, the most widespread formula of all, which is really a crude regression from a 1971 literature review. The more accurate Tanaka form, 208−0.7×age208 - 0.7 \times \text{age}, has existed for years and never won against first impressions.

Reach and accuracy are two different things. An empirical formula of an empirical formula, error stacked on error, which is why the fitness toolbox needs boundary awareness most. Every output should be read as “for someone roughly like you, about this much”.

Two of the tabs are not regressions at all.

The plate calculator uses greed. Target weight minus the 20kg bar, halved, then filled with 25/20/15/10/5/2.5/1.25 from largest down.

Greedy fails in a general denomination system, but this set happens to be canonical. Every large plate can be made exactly from smaller ones (25 = 20 + 2.5 + 1.25×2, and so on), so greedy always returns the fewest plates and never misses.

The cycling power calculator is the only first-principles formula on the site. P=v×(Froll+Fgrade+Fdrag)P = v \times (F_{\text{roll}} + F_{\text{grade}} + F_{\text{drag}}), with rolling resistance 0.005mg0.005mg, grade resistance mg×grademg \times \text{grade}, drag 0.5×1.2×0.3×v20.5 \times 1.2 \times 0.3 \times v^2 (air density 1.2 kg/m³, rider-plus-bike frontal area about 0.3 m², and 8kg of bike added to body weight).

No fit to anybody, only physics.

Only one boundary left: the parameters are typical values, so if your bike is heavier than 8kg the watts come out high.

The ovulation calendar

The ovulation tracker is one of the shortest calculators on the site, and its core is one line: ovulation day = first day of the last period + (cycle − 14).

The fertile window runs from 4 days before ovulation to 1 day after. Next period = last period + cycle.

That is the whole mathematics of the calendar method (the Ogino method), in use since the 1930s.

The “−14” is the heart of the formula. Ovulation happens about 14 days before the next period. The luteal phase, the interval from ovulation to bleeding, is relatively constant within a person, about 12 to 16 days.

The cleverness of the calendar method is trading an unobservable ovulation day for a traceable period start. The price is an assumption chain of three links: regular cycles, constant luteal phase, an accurately remembered last period.

Every link adds error, and the errors point the same way. A 3-day cycle swing shifts the whole window by 3 days.

The formula is not wrong; the fault is compressing three assumptions into the simplicity of one subtraction.

The window width, −4 to +1, has a physiological basis. Sperm survive up to about 5 days in the female tract, an egg lives less than 24 hours after release, and together the fertile window is roughly 5 days before ovulation to 1 day after.

The source gives six days, −4 to +1, landing in the core of the physiological range.

The output is not “a day” but an interval.

Which makes an interesting contrast with Widmark. Both take population-mean parameters (0.015% an hour, a 14-day luteal phase), but the blood-alcohol formula outputs a point estimate with a disclaimer while the calendar outputs an interval that is wide by construction.

There are two kinds of honesty in calculator design: write the uncertainty into the disclaimer, or compute the uncertainty into the output.

The FX toolkit

A name needs fixing first. The fxtoolkit slug has nothing to do with the foreign exchange section above. This fx is effects, that fx is foreign exchange; one letter apart, two species.

FX Toolkit is thirty-four tabs of Canvas particle effects and Web Audio synths, representing the other way a “formula” exists on this site: not computing one number, but computing tens of thousands of times per frame, playing a formula in real time.

The fireworks tab is Euler integration taught live. Each click bursts 60 particles, each particle each frame runs vy += 0.04, position accumulates velocity, life decays.

No differential equation is solved; projectile motion is simply “played”, gravity is a hard-coded per-frame constant.

Snow, falling leaves, water flows, the same. Snowflakes sway on a sine phase; the flow direction of water particles is the field sin⁡(y×0.02)+cos⁡(x×0.02)\sin(y \times 0.02) + \cos(x \times 0.02).

The equations you were asked to solve in physics class all degenerate into per-frame iteration in real-time graphics, because nobody needs the exact solution, only something that looks right.

Two more refined formulas hide on the audio side.

The noise floor under the fire and the rain comes from a brown noise generator: last = (last + 0.02 * w) / 1.02. A first-order low-pass over white noise.

White noise has a flat power spectrum; integrate it once (which is what this two-line formula does mathematically, a gentle random walk) and the energy piles up in the low band. The low rumble of a fire is just white noise in its low band.

Pitch detection uses autocorrelation. Over the microphone buffer it computes c[i]=∑jb[j]⋅b[j+i]c[i] = \sum_j b[j] \cdot b[j+i]; a periodic signal’s autocorrelation peaks at whole periods, and the peak lag dd becomes a frequency f=sampleRate/df = \text{sampleRate}/d, then a note name via midi=69+12log⁡2(f/440)midi = 69 + 12\log_2(f/440).

From a physical signal to twelve-tone equal temperament, two formulas in relay.

The BPM tab is the plainest: record the tap timestamps, divide 60000 by the average interval in milliseconds.

The skeleton of all these animations is still the frame loop of read input, update, render.

The start of this section said a calculator is “one formula computed once”; the FX toolkit is “one formula computed until the heat death of the universe”.

The timestep and frame rate questions discussed in The Game Loop apply here too, only nobody cares about the speed difference of fireworks on a 60Hz versus a 144Hz screen.

Once a formula’s output changes from “a number” to “an atmosphere”, the demand for precision degrades along with the context.

Back to that skeleton from the start of this section: a formula, a set of defaults, a boundary.

Defaults are design too. BMI remembers 170cm and 65kg, the loan calculator sits at 200,000, 4.9%, 30 years, the mortgage at 1,000,000, 3.1%, 30 years; each one paints a portrait of the most typical user.

The formula turns input into a number, the boundary reminds you the number is not the truth.

All the honesty of a life calculator hides in the seam between them.

Beyond static one-shot formulas, another family of tools turns the boundary into time: how long you may work, and what the body should do when it stops.

The Rhythm Design of Focus and Rest

“Rest when you’re tired” sounds like common sense, and almost nobody gets it right in practice. Either you push through until your attention falls apart, or you take a break and scroll your phone until you forget to come back.

Truly sustainable focus isn’t a continuous output of willpower but a set of designed rhythms. How long to work, how to stop, how long to stay stopped, and what the body does while it’s stopped.

Hands-on versions: Pomodoro, White Noise Generator, Meditation, 20-20-20 Eye Rest.

Timeboxing

Everyone knows the Pomodoro rules: focus 25 minutes, rest 5, and a 15-minute long break after every four completed rounds.

The rhythm Francesco Cirillo fixed in the 1980s with a tomato-shaped kitchen timer survives to this day because it dismantles three walls on the road to focus at once.

The first wall is startup cost.

People resist “finish this report” far more than they resist “focus for 25 minutes first”. The former’s endpoint is out of sight; the latter’s endpoint is a bell you can count on.

Timeboxing’s essence is shrinking the commitment to a scale that carries no psychological weight. You aren’t finishing the task, just filling a box.

And behavioral economics’ goal-gradient effect says motivation per unit of effort rises as you approach the goal, which explains why the back half of a 25-minute box is usually easier to endure than the front: every notch the progress ring advances adds a measure of pull toward the finish.

The site’s Pomodoro turns this visible progress into an SVG ring, remaining time and completion ratio displayed on the same circle — the visual feedback the goal gradient needs, permanently on screen.

The second wall is interruption management.

Interruptions come in two kinds: external (someone comes to you) and internal (a thought that surfaces on its own).

The Pomodoro’s handling of internal interruptions is especially neat. The 25 minutes aren’t “focus for at least this long” but “focus for at most this long”, which gives a sudden stray thought a respectable place to wait: this can wait for the bell.

In practice most stray thoughts don’t survive 25 minutes. By the time the bell actually rings, more than half of them aren’t worth doing anymore.

For external interruptions, Cirillo’s original rule is “inform — negotiate — call back”: tell the person you’re mid-Pomodoro, negotiate a later time, and honor it when it comes. Turn the interruption into an appointment.

The third wall is the compound interest of fatigue.

Two hours of continuous work often yields less than four 25-minute blocks, because fatigue isn’t linear — past some point it eats the error rate exponentially.

Rest inserted on a schedule cuts the fatigue curve off at the waist and keeps it out of compound territory.

Sleep research offers an adjacent observation that backs “work blocks shouldn’t be too long”. Human physiology runs a roughly 90-minute ultradian cycle, with alertness during waking rising and falling on a period of about an hour and a half.

Four 25-minute boxes plus one long break come to about two hours. Four short boxes, three short breaks, one long break — this 4+1 structure sits on the same scale as the ultradian cycle: putting the long break at the body’s alertness trough suits physiology better than pushing through evenly.

25 Minutes Is Not a Magic Number

The site implementation exposes all three durations as settings: 25 focus, 5 short break, 15 long break by default, clamped to 1–120, 1–30 and 1–60 minutes respectively.

That flexibility matters. 25/5 is a historical accident — the gradations one kitchen timer happened to turn out — not a physiological constant. Some people need 50 minutes to get into gear; some hit the wall at 15.

A rhythm works because it is fixed and observed, not because of the specific numbers.

What genuinely shouldn’t change is the structure: work segment, short-break segment, and a long break every four rounds, three layers nested.

The program follows this strictly: after the fourth focus segment it switches to the long break by itself, otherwise to a short one, and back to focus when the break ends. The switch needs no human decision, because the moment “should I rest a bit longer” is handed to a person, the answer is almost always the wrong one.

What sounds at zero is a short Web Audio synthesized rising arpeggio — C5–E5–G5–C6, four sine oscillators entering in sequence. Gentler than an alarm, and not so quiet you’d ignore it.

Pomodoros completed that day are recorded locally by date and reset the next morning. Stats that show only today are a deliberate design: the tool’s goal is sustaining a rhythm, not accumulating a report card.

One usage rule as well: a break segment is still a segment — don’t fill it with tasks.

Five minutes of scrolling a feed restores nothing; it stuffs a new input queue into your attention instead. A real short break should be low-input: stand up for a glass of water, look out the window, stretch, give working memory a chance to flush its cache.

The bell’s only job is pulling you out of the work. Where you go from there is on you.

It also has a “cooking timer” tab that holds several named timers at once. The same countdown kernel, another kind of timebox: parallel tasks in a kitchen just happen to take the “many independent small boxes” shape — whichever rings first gets handled first.

White Noise

Why noise rather than music?

For purely physical or highly practiced repetitive work, music is fine. For language-dense work, music with lyrics is a liability: the brain’s language circuitry can’t process lyrics and text at the same time. It’s the same phenomenon as “a sudden voice in a quiet room is the hardest thing to ignore”, which cognitive psychology calls the irrelevant speech effect — any sound carrying meaning automatically occupies working memory.

Pure noise has no semantics, no structure, no expectations. You never wonder what the next beat is, and that is why it is the only background that costs almost nothing on the attention ledger.

It’s also why so many focus playlists converge on film scores or Lo-fi: no vocals, no surprises.

White noise pushes both of those to the extreme.

What damages focus most in a workplace isn’t loud sound but abrupt sound. A door slamming next door, a chair dragged across the floor upstairs.

The attention system has a built-in orienting reflex toward new sounds and toward sudden changes in location or character. It’s an alarm mechanism evolution left behind, and it can’t be switched off.

White noise’s strategy is therefore very clear: it doesn’t remove noise, it raises the noise floor so sudden sounds lose their contrast. Once a stable, spectrally flat wall is standing, a shut door’s energy no longer stands out from the background, and the alarm has no reason to fire.

That is auditory masking: the broader-band and steadier the masking sound, the more effectively it suppresses transient interference.

“Spectrally flat” is meant literally.

White Noise Generator offers white, pink and brown noise; in the source their difference is a few lines of filter formula.

White noise is the simplest: each sample takes an independent uniform random number, energy spread evenly across all frequencies. Like rain of uniform density.

Pink noise is white noise through a first-order low-pass filter:

pink[i] = (pink[i-1] + 0.02 × white[i]) / 1.02

For every octave you climb toward higher frequencies, energy falls about 3 decibels. The listening impression shifts from rustle to rush, closer to nature’s steady-state sounds.

Brown noise goes further, integrating the white noise — the same first-order accumulation, scaled 3.5× to compensate the amplitude. Energy falls 6 decibels per octave, low frequencies dominate further, and it sounds deep like a distant sea.

The three colors are essentially three spectral shapings of the same random process. More high frequencies reads brighter and masks high-frequency voices better; more low frequencies reads duller and grabs less attention.

There’s no right answer about which to pick. Masking depends on what you need to cover: commuter rumble takes brown, chattering voices take pink or white. The only hard criterion is that you stop noticing it.

The implementation holds one more detail worth recording: the noise buffer is generated for only two seconds, then looped forever.

A two-second loop is fatal for music. The seam and the repetition are audible immediately. For noise it’s imperceptible, because a random signal has no memorable structure: the brain can’t build the expectation “I’ve heard this stretch”, so the loop’s periodicity has nothing to catch.

Trading a minimal stretch of memory for an unending supply of “new” sound is a dividend unique to random signals: their unpredictability is their cover.

The volume slider defaults to 0.2 with a ceiling of 0.6 — the band where it just covers the environment without demanding effort to ignore. Masking is making the interference disappear, not making noise the star.

When one monochrome wall is enough, one wall is enough.

The “white noise mix” tab in Meditation is more like a small mixing room: three channels — rain, waves, wind — each with its own fader, mixed live on demand.

The three channels’ synthesis recipes differ. Rain has the widest band (low-pass left at 8000 Hz, keeping the fine high-frequency grain), while waves and wind both pass a 600 Hz low-pass and keep only the low-frequency swell.

Any combination of the three faders holds the masking baseline of steady, event-free sound, because each channel on its own is already stationary noise — the mix introduces no new sudden structure, only different proportions.

Acoustically that’s spectral proportioning; experientially it answers another fact: real-world calm is never a single sound but a stable combination of several low-intensity sounds. Rain on a window, waves on a shore — beyond the masking, each carries a bit of the “safety signal” quality that soundscape research keeps returning to.

Breathing

Heart rate, blood pressure, digestion — visceral activity answers to the autonomic nervous system and normally stays beyond conscious control. But breathing is the one exception channel in that system: it runs automatically, yet consciousness can take it over at any moment, and taking it over feeds back through neural reflexes into the whole system.

The key to the mechanism is exhalation. On inhale the heart rate rises and the sympathetic branch dominates; on exhale the heart rate slows and the parasympathetic (vagal) branch dominates. That’s the intrinsic rhythm of the baroreflex.

“Lengthening the exhale” therefore becomes the most direct way to press the parasympathetic brake by hand. Heart-rate variability (HRV) rises with slow breathing and stress levels fall with it — one of the best-evidenced non-pharmacological relaxation methods available.

The site’s two breathing tools are two wrappings of the same principle.

The breathing guide inside Meditation turns these rhythms into a follow-along animated circle: built-in box breathing (inhale, hold, exhale, hold — 4 s each) and 4-7-8 patterns, with the circle swelling and shrinking by phase and a touch of easing inertia so it is not jerky to follow.

The figure of five breaths a minute wasn’t picked at random. The human baroreflex’s resonant frequency sits near 5 to 6 breaths per minute, about 0.1 Hz. Breathe at that rate and the respiratory rhythm superimposes in phase on the cardiovascular system’s intrinsic oscillation, pushing HRV to the individual’s maximum.

Which is to say the 12-second cycle isn’t arbitrary either — it lands exactly on the physiological resonance point. That is the step that turns “slow breathing raises HRV” from a qualitative claim into a quantitative prescription.

The breathing tab in Meditation ships two classic prescriptions.

Box breathing, 4-4-4-4: inhale, hold, exhale, hold, four seconds each, named for its square trace. Special forces and snipers use it for composure on the spot. Four equal segments also land in the resonance zone, and the hold phases give intrathoracic pressure an orderly rise and fall.

4-7-8 breathing: inhale 4, hold 7, exhale 8.

Note the shape of 4-7-8: the exhale is twice the inhale. This is an exhale-dominant pattern — 19 seconds a round, about three a minute, slower than the resonant frequency, parasympathetic stimulation deliberately maxed out. Suited to before sleep, not before a meeting. For arousal before focus, invert the ratio: short exhale, long inhale.

Visual guidance earns its place too. Counting breaths, you will drift by the third round; a swelling circle outsources the “inhale now or exhale now” judgment to vision. The lower the cognitive load, the longer the rhythm holds.

That’s the same design principle as the Pomodoro outsourcing “when to rest” to the bell: a rhythm sustained by willpower collapses at the first fatigue, and only one outsourced to an external signal outruns it.

The Eyes’ Bill

During focus, the most overloaded organ in the body isn’t the brain — it’s the eyes. Two entries on the bill are plain to see.

The first is accommodation fatigue. Looking at something near keeps the ciliary muscle contracted to change the lens’s curvature, and screen work locks that posture in for hours at a stretch. Sustained contraction makes muscle ache, and the ciliary muscle is no exception — its ache shows up as blurred vision and eye strain.

The second entry is stealthier: blinking.

Normally a person blinks 15 to 20 times a minute, each blink re-laying a tear film over the cornea. During intense screen fixation the blink rate drops to about a third of that; the tear film evaporates with no replenishment, and dryness, foreign-body sensation and burning follow one after another.

Video terminal syndrome’s two main sources: one locks the accommodation muscle in place, the other drains the lubrication.

20-20-20 Eye Rest maps to exactly that rule: every 20 minutes, look at something 20 feet (about 6 meters) away for 20 seconds.

Each of the three numbers has a job. Six meters is the distance threshold at which the ciliary muscle releases accommodation — only at optical infinity does it fully unload. Twenty seconds is the minimum for the tear film to re-cover and the accommodation system to complete its switch. Twenty minutes caps how much fatigue accumulates in one stretch: let go before it aches.

The implementation is restrained: a 20-minute countdown as the main loop; at zero a 20-second break alert pops up, its digits enlarged; when it ends, back to the next round automatically. Start, pause, reset — nothing extra.

Its entire value is that reminder. 20-20-20 fails almost a hundred percent of the time at “forgot”, not at “did it and it didn’t help”.

The Pomodoro is a 25-minute work rhythm and eye care a 20-minute eye rhythm; the two periods are naturally offset, so an hour at the screen gets two or three “stand up and look into the distance” chances slipped into the gaps between work.

The nesting and offsetting of rhythms comes closer to the real body’s multiple needs than any single rhythm. Focus, metabolism and vision each run their own cycle, and a good work environment lets them each keep their own clock.

Two more zero-cost companion moves for eye care, recorded here as well.

One is screen distance and angle. Push the monitor beyond arm’s length (50–70 cm) with its top edge level with your line of sight. With the gaze angled slightly down, the eye’s exposed area is smaller and the tear film evaporates more slowly — posture design that presses the damage of “fewer blinks” down another notch.

Two is ambient light. The wider the gap between screen brightness and background light, the higher the cost of the pupil and accommodation systems switching back and forth. A phone in a dark room is extra tiring not because the screen hurts the eyes but because the high contrast forces the accommodation and pupil systems into continuous extreme exercise.

Stack all three — rhythm tools, posture, lighting — and visual fatigue has nowhere left to land.

Guidance, Scanning, and Reappraisal

The first four sections were all about the clock of rhythm. This last one is about what you do once the bell rings.

The quality of rest depends on what you do while resting, and doing takes a procedure.

Meditation is a ten-tab toolbox, and four things in it are worth expanding on.

Guided meditation splits a 105-second mini-meditation into four auto-advancing steps. Settle in (20 s): find a comfortable position and close your eyes gently. Notice the breath (30 s): put attention on the air moving in and out. Body scan (40 s): relax from crown to toes in order. Return to the present (15 s): slowly bring attention back into the room.

Each step is one line of guidance plus a countdown; nobody has to memorize the sequence, just follow along.

Progressive relaxation is a more structured bodily version. Following Jacobson’s progressive muscle relaxation, it advances through six muscle groups: hands and arms (10 s), shoulders (10 s), face (8 s), abdomen (8 s), legs (10 s), whole-body release (15 s).

Each group’s gist is tense, hold, release: create tension deliberately, then let it go abruptly, and the slack at the moment of release forms a sharp contrast — far more effective than a bare “relax” instruction. Telling the absence of tension apart is easier than manufacturing the presence of relaxation.

Mindfulness practice asks for thirty seconds of attention gathering. Take one deep breath, then record three items each under “I saw / I heard / I felt”.

This 3×3 move forcibly pulls drifting attention back to the sensory present — essentially a “home” signpost for a wandering brain. Entries stay local, and paging back later you find three different worlds at the same desk at different hours.

The adjacent gratitude journal is the same idea at half speed. One prompt — “Today, I am grateful for…” — write it and it’s saved, listed newest first, deletable anytime.

Directing the day’s attention toward what you already have rather than what you still lack has a stack of positive-psychology literature behind its effect on the emotional baseline. Yet the implementation is as plain as a single input box: the point isn’t the record but the daily habit of actively retrieving something good.

The toolbox also has a meditation timer tab, 10 minutes by default, settable from 1 to 180. It leaves a bare timer for old hands who don’t follow guidance: sometimes all you need is a stretch of time promised protection.

Cognitive reappraisal and the ABC model are for the brain that can’t rest. Some people can’t settle because their head loops the day’s events: the message unanswered, the thing said wrong, the party you weren’t invited to.

The tool ships those three scenarios, each with a reference perspective (“not replying isn’t a rejection of you”, “one slip won’t change the overall assessment”, “it may just be a scheduling oversight — asking directly beats guessing alone”).

The ABC model tab then structures that logic: between the activating event A and the emotional consequence C sits the belief B, and B is the part you can actually operate on. Examine the evidence, find counterexamples, switch to a friend’s perspective — cognitive behavioral therapy’s most basic home edition.

Putting these in a rest toolbox is apt: un-cleared mental rumination is the most expensive rest tax there is.

Rhythms govern time; chemistry tools govern matter, where the floor is harder — not one atom or one unit of charge may appear or vanish.

Conservation and Balancing in Chemistry

The algorithmic content of school chemistry has been underestimated for a long time. The mole is a unit conversion, balancing is solving a linear system, the half-reaction method is electron bookkeeping, and the periodic table is a structured data table.

Hand these jobs to a computer and the code often tells the truth more plainly than the textbook. Every formula’s range of validity, every input a parser cannot swallow, is written in the source.

Hands-on versions: Chemistry Toolkit, Mole Calculator, Equation Balancer, Periodic Table, Scientific Calculator.

The mole as a conversion hub

The mole is not the name of a heap of stuff, it is a unit of quantity. Just as “a dozen” is twelve, a mole is 6.022×10236.022 \times 10^{23}.

Chemistry picked this strange number as its unit for one reason: the mass in grams of one mole of any element is exactly its relative atomic mass.

Carbon is 12.011, so 12.011 grams of carbon is one mole of carbon atoms.

That alignment gives an exact conversion chain between the macroscopic balance (grams) and the microscopic count (atoms):

n=mM=NNAn = \frac{m}{M} = \frac{N}{N_A}

Mass mm divided by molar mass MM gives the number of moles nn, which times Avogadro’s constant NAN_A gives the number of particles.

Every stoichiometric calculation starts from this chain. The coefficients in a chemical equation are a ratio of particle counts, that is, a ratio of moles. Grams read off a balance must first be converted to moles before they are allowed into the equation.

Why is the conversion unavoidable? Look at hydrogen burning: the coefficients of 2H2+O2→2H2O2H_2 + O_2 \rightarrow 2H_2O are 2 to 1 to 2, but the mass ratio is 4 grams to 32 grams to 36 grams. The coefficient ratio leaves no trace in the world of mass, because one oxygen atom weighs sixteen times a hydrogen atom.

An equation describes the ledger of particles, a balance weighs the ledger of mass, and the mole is the exchange rate between the two books.

98 grams of pure sulfuric acid holds 0.999 mol of molecules; hydrogen atoms are twice that by the formula, 1.998 mol, about 1.2×10241.2 \times 10^{24}. To jump from grams to atoms in one step there has to be a stop in between, and that stop is the mole.

The Mole Calculator is the first segment of this chain.

The formula parser in the source is one line of regex: ([A-Z][a-z]?)(\d*). An uppercase letter, an optional lowercase letter, then digits, accumulated segment by segment.

The default input is H2SO4H_2SO_4, and the nine built-in elements (H, C, N, O, Na, S, Cl, Ca, Fe) are summed from the table: 2×1.008+32.06+4×16=98.082 \times 1.008 + 32.06 + 4 \times 16 = 98.08 g/mol. The mass field defaults to 98 grams, giving an output of 0.999 mol. The defaults were picked to match the molar mass of sulfuric acid, so the page opens on an answer that is almost exactly one.

The parser’s boundary deserves a look too: the regex knows nothing about parentheses.

Enter Ca(OH)2Ca(OH)_2 and you get 58.09. The 40.078 of CaCa plus one OO plus H2H_2. But the parentheses should multiply the 2 across oxygen and hydrogen, and the correct answer is 74.09. The missing 16 grams is the second oxygen that got dropped.

Nested structures like parentheses and hydrates have to wait for the balancer in the next section. A nine-line tool draws its boundary at nine elements and no parentheses, and then honestly works only inside that boundary. That is the difference between it and a “universal chemistry calculator” marketing page.

Balancing is solving equations

Balancing a chemical equation is taught in textbooks as fiddling. Balance the most complex species first, then adjust atom counts, and when that fails, switch to fractions and multiply through.

Fiddling is enough for simple equations, but it conceals a fact: balancing is a solving problem with a strict algebraic structure.

Set the coefficient of each species as an unknown, and write one conservation equation per element: the atom count of that element is equal on both sides.

Take hydrogen burning: let the coefficients of H2H_2, O2O_2, H2OH_2O be x1,x2,x3x_1, x_2, x_3:

{2x1−x3=0(hydrogen conservation)2x2−x3=0(oxygen conservation)\begin{cases} 2x_1 - x_3 = 0 & \text{(hydrogen conservation)} \\ 2x_2 - x_3 = 0 & \text{(oxygen conservation)} \end{cases}

Coefficients on the right-hand side take a negative sign, and the two conservation statements merge into one homogeneous linear system Ax=0A\mathbf{x} = 0.

The matrix AA has two rows (two elements) and three columns (three species), rank 2, a one-dimensional null space spanned by (1,12,1)(1, \tfrac{1}{2}, 1). Clearing denominators gives (2,1,2)(2, 1, 2), that is 2H2+O2→2H2O2H_2 + O_2 \rightarrow 2H_2O.

The entire mathematics of balancing is finding the smallest positive integer vector in that null space. The fact that coefficients may all be multiplied by a constant corresponds to the null space being a ray rather than a point.

The Equation Balancer implements this solution verbatim, and does it with some care. Three points of care, each deeper than the last.

The first is formula parsing.

Nested parentheses like Fe2(SO4)3 need more than regex, so the source uses a stack. On an element, the symbol and count are accumulated into the table on top of the stack; on an opening parenthesis a new table is pushed; on a closing parenthesis one layer is popped, multiplied by the number after the bracket, and merged into the layer above.

Fe2(SO4)3Fe_2(SO_4)_3 through this stack gives Fe:2, S:3, O:12. Matching the hand calculation.

What the stack does here is what it does in expression evaluation: translate nested structure into flat accumulation. This trick of one stack swallowing one level of nesting came up from another direction in Tower of Hanoi and recursive thinking. Recursion is syntactic sugar for the stack, and the stack is the general solution to nesting.

The second is exact arithmetic.

Elimination produces fractional coefficients (say 12\tfrac{1}{2}, 37\tfrac{3}{7}). With floating point, the final rounding step faces the dilemma of 1.9999999998 against 2.0000000001. Slightly more complex equations and the error pushes those numbers far enough from the integer that rounding gets it wrong.

The source’s answer is blunt: implement a rational type yourself, numerator and denominator both BigInt, and carry out addition, subtraction, multiplication and division exactly by fraction rules, so no rounding exists anywhere along the way.

Elimination uses Gaussian elimination with column pivoting (pick the row with the largest absolute value in each column as the pivot, keeping things numerically stable, though under exact arithmetic this is more habit than necessity), reducing to row echelon form and then back-substituting.

The third is a validity check on the solution, and this step shows the most judgment.

The null space must be exactly one-dimensional. When there is more than one free variable, the source gives up outright and reports “cannot balance (please check the formulas)”.

Why is giving up the right call? Consider H2+O2→H2O+H2O2H_2 + O_2 \rightarrow H_2O + H_2O_2: two elements, four species, rank at most 2, null space at least two-dimensional. Hydrogen can go to water or to hydrogen peroxide, oxygen likewise, so the balancing schemes form a whole family rather than one.

Chemically this is a parallel reaction: two independent reactions stuffed into one equation, which never should have had a unique balance.

The tool’s refusal is loyalty to the algebra: “one equation, one balance” is conditional, and the condition is that the null space is exactly one-dimensional.

After the one-dimensional solution there are two more passes. Clear denominators by the least common multiple of all denominators, then divide by the overall greatest common divisor to reduce to the smallest. If the solution contains a non-positive number (which in theory cannot happen), the check fails just the same. A zero coefficient means some species does not participate at all, which means the equation was written wrong.

The whole flow is worth walking once with an equation that has parentheses: Fe2(SO4)3+NaOH→Fe(OH)3+Na2SO4Fe_2(SO_4)_3 + NaOH \rightarrow Fe(OH)_3 + Na_2SO_4.

Four species, five elements, so five equations and only four unknowns. Overdetermined? Actually not: two of the five equations are consequences of the others, the rank is exactly 3, 4−3=14 - 3 = 1, the null space is one-dimensional, and the solution is (1,6,2,3)(1, 6, 2, 3).

Fe2(SO4)3+6NaOH→2Fe(OH)3+3Na2SO4Fe_2(SO_4)_3 + 6NaOH \rightarrow 2Fe(OH)_3 + 3Na_2SO_4.

Overdetermined but consistent is the normal state of a conservation system. With many elements and few species the constraints necessarily interlock, and the rank collapses to exactly the point that leaves a one-dimensional solution. Once species outnumber what the constraints can police (parallel reactions), the rank falls short again.

The dimension of the null space is a gauge: read it and you know which class the equation in your hand belongs to.

One boundary deserves to be stated plainly: this balancer is aimed at molecular equations and knows nothing about ionic charge.

The parser reads only element symbols and digits, so Fe2+Fe^{2+} is understood as two iron atoms. Charge conservation is simply absent from the overall balance.

It was moved to the half-reaction tool in the next section. There the electron is the unit of account, and every charge discrepancy is settled with electron change. The two tools each guard half of the conservation laws, and together they make the complete picture of balancing.

The chemistry toolkit

The Chemistry Toolkit is a composite of five tabs, each one formula plus a set of defaults; three of the most representative are worth walking through.

pH calculation. pH=−lg⁡[H+]pH = -\lg[H^+], and the ion product of water Kw=10−14K_w = 10^{-14} (25 °C) supplies the other leg: pH+pOH=14pH + pOH = 14.

Input comes in three kinds. Give the hydrogen ion concentration directly. Give a strong acid concentration plus the volumes before and after dilution. A strong acid dissociates completely, [H+]=C⋅V1/V2[H^+] = C \cdot V_1 / V_2, and the dilution formula C1V1=C2V2C_1V_1 = C_2V_2 shows its bottom here: it is mole conservation (the amount of solute does not change on dilution), the same conservation law as n=m/Mn = m/M in the previous section under a different notation. Give a strong base concentration and you must first get [OH−][OH^-], then back out [H+][H^+] through KwK_w.

The default, 0.1 mol/L hydrochloric acid diluted from 1 L to 10 L, drops the concentration to 0.01 and takes pH from 1 to 2. The first bodily sense of a logarithmic scale: dilute tenfold, and pH moves one notch.

Buffer solutions. One Henderson–Hasselbalch: pH=pKa+lg⁡[A−][HA]pH = pK_a + \lg \frac{[A^-]}{[HA]}.

The default parameters are acetic acid’s pKa=4.76pK_a = 4.76 with equal concentrations of conjugate base and acid. The ratio is one, the logarithm term vanishes, and pH equals pKapK_a exactly — which is where the name “half-neutralization point” comes from.

The depth of this formula is that [A−][HA]\frac{[A^-]}{[HA]} is a ratio. Dilute with water and numerator and denominator are divided by the same number, the ratio does not move, pH does not change. A buffer’s resistance to dilution becomes obvious the moment you read the shape of the formula, no experiment needed.

Every tenfold flip of the ratio shifts pH by one notch, which is why the buffering range is naturally the stretch around pKa±1pK_a \pm 1.

Redox balancing. This is the most algorithmic page in the toolkit, implementing the half-reaction method.

Split a redox reaction into an oxidation half-reaction and a reduction half-reaction, balance each on its own, then stitch them back together by electron conservation.

The source ships five oxidation half-reactions (Fe2+→Fe3+Fe^{2+} \rightarrow Fe^{3+}, I−→I2I^- \rightarrow I_2, Cl−→Cl2Cl^- \rightarrow Cl_2, oxalate losing electrons, H2O2H_2O_2 decomposition) and five reduction half-reactions (permanganate, dichromate, Fe3+Fe^{3+}, oxygen, hydrogen peroxide), with the medium selectable as acidic or basic.

Balancing each half-reaction follows a fixed order: balance the main element, then make up oxygen (add one water per missing oxygen), then make up hydrogen (add one H+H^+ per missing hydrogen), and finally even out charge with electrons (for a charge gap of n, add n electrons to the more positive side).

The electron is this step’s small change. Whatever debt remains after atom conservation is booked against the electron.

Stitching the two half-reactions back into the overall equation relies on electron conservation. The electrons released by the oxidation half must equal the electrons consumed by the reduction half; if not, take the least common multiple of the two electron counts, scale both halves up to match, and add so the electrons cancel.

Take the classic permanganate oxidising ferrous iron: the MnO4−MnO_4^- side takes 5 electrons, the Fe2+Fe^{2+} side gives 1, least common multiple 5. Five ferrous ions to one permanganate:

MnO4−+5Fe2++8H+→Mn2++5Fe3++4H2OMnO_4^- + 5Fe^{2+} + 8H^+ \rightarrow Mn^{2+} + 5Fe^{3+} + 4H_2O

When electron counts are coprime the least common multiple does nothing clever; its power shows when the counts share a factor. Oxalate C2O42−→2CO2+2e−C_2O_4^{2-} \rightarrow 2CO_2 + 2e^- against permanganate’s 5 electrons gives a least common multiple of 10. Two permanganates to five oxalates:

2MnO4−+5C2O42−+16H+→2Mn2++8H2O+10CO22MnO_4^- + 5C_2O_4^{2-} + 16H^+ \rightarrow 2Mn^{2+} + 8H_2O + 10CO_2, charges add to 4 on both sides, the books balance to the last electron.

The least common multiple plays exactly the role it plays in clearing denominators: two ledgers kept in different multiples can only be added and canceled once brought to the smallest common multiple.

The interface shows both half-reactions (electrons included) together with the overall equation, and in basic medium swaps H+H^+ and water for OH−OH^- on the other side. The whole flow is the textbook “valence-change method” programmed, except the valence method relies on observation and this relies on algebra.

A half-reaction is itself a miniature linear system: element conservation plus charge conservation, five constraints over five kinds of unknowns. “Balancing is solving equations” makes its second appearance on this page of the toolkit.

The toolkit’s two remaining tabs each have a small but complete skeleton.

The molarity page handles dilution: C1V1=C2V2C_1V_1 = C_2V_2. Any one of the four quantities can be designated the unknown, and the selected input is disabled and backfilled with the computed value live. One formula solved in four directions shows up in the interface as four buttons; the equation’s directional symmetry is translated into four clicks.

The Lewis structure page is visual. Six preset molecules (H2OH_2O, CO2CO_2, NH3NH_3, CH4CH_4, O2O_2, NaCl), with SVG drawing bonds (one line single, two double, three triple) and lone pairs (paired dots); NaCl is drawn separately as an ion pair with charge labels, no covalent lines.

It is closer to a graph: atoms are vertices, bonds are edges with an order. A structural formula has always been a graph-theoretic object in a mathematician’s eyes.

The periodic table

The Periodic Table is implemented so plainly it is almost candid. 118 elements, five fields each (atomic number, symbol, English name, relative atomic mass, category), hard-coded into one array, then CSS grid places each element in the cell given by its (x, y) coordinates.

No data endpoint, no lazy generation; one table is one database with layout information attached.

What is genuinely worth looking at is the coordinates themselves. The main table is 18 columns by 7 rows, but all 15 lanthanides are moved to row 9 and the actinides to row 10. It is a typographic decision every periodic table makes and almost nobody asks about.

The answer hides in electron configuration. Period 6 should have 32 slots, and 14 of them are f-block elements whose electrons fill the 4f orbitals. Drawn honestly into the main table, periods 6 and 7 would each take 32 columns and the whole thing would become long and hard to read.

Folding the f-block down into a footnote sacrifices the immediacy of periodicity (trends like the lanthanide contraction break at the fold) and buys back the readability of the main structure.

Layout is knowledge representation. The shape of the table is the shape of the quantum numbers: two columns on the left fill s orbitals, six on the right fill p, ten in the middle fill d, fifteen folded fill f. The four blocks are exactly the capacities of the four orbitals.

The three things the interactive layer does also each have a clear design reason.

Categories are partitioned with 11 background colors (alkali metals, alkaline earth metals, transition metals, post-transition metals, metalloids, nonmetals, halogens, noble gases, lanthanides, actinides, unknown). The text color on a cell is not assigned by hand but decided by a luminance formula. 0.299R+0.587G+0.114B0.299R + 0.587G + 0.114B, above 0.6 gets dark text, otherwise white. Those three coefficients are a legacy of the old television era (ITU-R BT.601 luma weighting): the human eye is most sensitive to green, and the green channel carries nearly sixty percent of the weight.

The search box does substring matching on symbol or English name; hits stay as they are and misses drop to 15% opacity rather than being hidden. Remembering positions is worth more than a clean picture: a filtered-out element still holds its cell, and the table’s topology does not move.

Clicking any element pops a detail card: number, mass, category, Esc to close. The restraint a lookup tool ought to have, more or less.

Two classification systems on the table also need to be kept apart.

The 11 categories are a chemical-property partition: metallic character, bonding tendency, reactivity. The s/p/d/f blocks mentioned above are an electron-configuration partition.

The two overlap heavily without coinciding. Metalloids run between metals and nonmetals, cutting a diagonal transition band through the middle of the p block. Post-transition metals live alongside transition metals on either side of the d/p boundary.

Categories answer “how does this kind of element behave”, blocks answer “where do the electrons go”. One table carrying two orthogonal bodies of knowledge at once is exactly why it is printed on every classroom wall: it is not a list, it is an index in two dimensions.

The numbers in the mass column are a hard-coded snapshot of IUPAC values, not updated from the network. For teaching that is more reliable than a live endpoint. Element masses have not changed in billions of years; the only expiry risk is IUPAC refining a few decimals, and that does not affect a single school calculation problem.

The scientific calculator

The Scientific Calculator is the smallest of the five: one expression field, one button, one line of result.

It supports nine functions (sin, cos, tan, sqrt, log, ln, abs, pow, exp) and two constants (pi, e); the default expression sin(0.5) + sqrt(9) evaluates to about 3.479.

The function names hide a convention: log is the common logarithm (base 10, Math.log10), and ln is the natural one. Consistent with a mathematical handbook, opposite to most programming languages’ log — the place where people switching tools trip most easily.

The implementation deserves a section of its own, because it is a carefully designed shortcut.

The textbook approach is to write an expression evaluator: lex into tokens, build a syntax tree by precedence, evaluate by recursive descent. Two or three hundred lines to start.

This source only goes halfway: a regex rewrites the known function names and constants in the expression into prefixed forms, then the whole expression is thrown at the Function constructor and the JavaScript engine does the parsing and evaluation itself. Any unknown letter sequence is left untouched, naturally raises a reference error at evaluation time, gets caught by try/catch and shown as a line of error text.

Safety does not come from a parser but from a whitelist: only names on the list get rewritten and referenced, everything else is treated as invalid input.

This shortcut is a reasonable engineering judgment in a scenario with clear features and bounded input. It trades two or three hundred lines of syntax-tree code for two lines of rewriting, at the cost of blunt error messages (whatever the engine says is what you see) and no support for custom operators.

The shortcut’s value and its boundary are both written into that trade.

Two more conventions are easy to trip over in use.

First, trigonometric functions always take radians. sin(30) computes the sine of 30 radians, not 30°; for degrees you convert by hand to sin(pi/6). The pi constant exists to serve this step.

Second, exponentiation has two routes: the function form pow(2, 10) and the language’s own ** operator. Since Function does the evaluation, the latter works too. Write 2**10 and you get 1024; unlike a real expression evaluator, operator precedence and parenthesisation are all handled by the JavaScript engine per the language spec, which is a fringe benefit of borrowing the shortcut.

One further boundary is floating point itself. sin(pi/6) should equal 0.5 and computes to 0.49999999999999994. Because pi is a finite-precision approximation, π/6\pi/6 already carries error, and the sine amplifies it nonlinearly.

The output of a calculator-type tool is never mathematical truth, it is the best approximation IEEE 754 double precision can offer. Taking the sixteenth significant digit as gospel is a trap every calculator shares.

The generic skeleton of this kind of tool (one formula, one set of defaults, one boundary) was taken apart in the The Formulas and Boundaries of Life Calculators section earlier in this post. The scientific calculator is the smallest instance of that skeleton: its formula is evaluation itself, its boundary is floating point and the whitelist.

Conservation: one thread

Run back through the five tools and there is only one thread: conservation laws. The mole conversion cashes out mass conservation, balancing cashes out atom conservation (charge conservation joins in half-reactions), pH and buffers cash out ionisation equilibrium, the periodic table’s block structure is a projection of electron configuration, and the scientific calculator lands every formula on one floating-point evaluation.

This is also where chemistry comes closest to programming among the sciences: most of its laws are constraints rather than processes. Matter is not destroyed, charge is not destroyed, equilibrium constants do not drift — solving a chemistry problem is nearly the same activity as solving a constraint satisfaction problem. There are only a few conservation laws; everything else is their conversion and combination.

Conservation laws turn chemistry problems into solves; statistical testing does something else again: it turns data into verdicts.

Statistical Testing and Its p-Value Red Lines

Statistical testing is the most cited and most misread link in the scientific method.

When a line reading “p < 0.05” shows up in the news, nearly every reader (a fair number of authors included) takes it to mean “the conclusion has a 95% probability of being right”. That reading is backwards in direction.

Hands-on versions: T-Test / CI, the Z-Table, the Plot Tool.

Null Hypothesis and p-Value

The entire logic of statistical testing rests on one deliberately contrarian move: assume nothing happened, then look at how outrageous the data is.

That “nothing happened” is the null hypothesis, written H0H_0: the two drugs do not differ, this batch of parts averages exactly the nominal value, this coin is fair.

Note that H0H_0 is never what you hope to prove. It is the target you intend to knock down.

The p-value’s definition in this framework is remarkably restrained:

p=P(observing data this extreme∣H0 is true)p = P(\text{observing data this extreme} \mid H_0 \text{ is true})

Whatever follows the vertical bar is fixed. It assumes the null is true, then asks: on that premise, how likely is the data at hand (or something more extreme)?

A small p-value means “if nothing had happened, this batch of data would be an awfully big coincidence”. So we reject H0H_0.

Nowhere in the procedure is there a statement about “the probability that the alternative is true”, let alone “the probability that the conclusion is correct”. Flip a conditional probability’s direction and P(D∣H0)P(D|H_0) becomes P(H0∣D)P(H_0|D), and between those two lies an entire Bayes’ theorem bridge that the test itself does not build.

So a p-value measures not the strength of a conclusion but how surprised the data is by the null. That sentence is the crux of this whole post, and the three red lines for reading p-values below come back to pry it open.

The Test Statistic

Computing “surprise” directly over a whole batch of data is not tractable; something has to be compressed. Squeeze n samples into one test statistic, then look up that statistic’s distribution under H0H_0.

For a test of the mean, that is:

t=xˉ−μ0s/nt = \frac{\bar{x} - \mu_0}{s / \sqrt{n}}

The numerator is the deviation of the sample mean from the null mean μ0\mu_0; the denominator converts that deviation into units of standard error.

The fraction reads easily. The bigger the deviation, the tighter the data (ss small), the more samples (n\sqrt{n} large), the more extreme t becomes — and the weaker the “just a coincidence” defense.

Constructing the t Statistic

The ss in the formula deserves its own section.

If the population standard deviation σ\sigma were known, the statistic z=(xˉ−μ0)/(σ/n)z = (\bar{x}-\mu_0)/(\sigma/\sqrt{n}) would follow the standard normal, and a z-table would give the p-value. That was standard statistical practice in the early twentieth century.

But in reality σ\sigma is almost never known, so the sample standard deviation ss has to stand in:

s=1n−1∑i=1n(xi−xˉ)2s = \sqrt{\frac{1}{n-1}\sum_{i=1}^{n}(x_i - \bar{x})^2}

The denominator uses n−1n-1 rather than nn, which is called Bessel’s correction.

The sample variance is computed around xˉ\bar{x}, and xˉ\bar{x} is itself a concession to this batch of data. The data are pulled by their own mean, so the spread always comes out a little smaller than the true σ\sigma demands; dividing by n−1n-1 puts exactly that shortfall back, so that E[s2]=σ2E[s^2] = \sigma^2.

That n−1n-1 is also the t distribution’s degrees of freedom. One degree of freedom out of n was spent estimating the mean; only the remaining n−1n-1 are free to contribute information about spread.

The price of substituting ss for σ\sigma is a change in the shape of the distribution.

σ\sigma is a constant; ss is a random variable. In small samples ss itself jitters badly, and when it happens to come out small, t is pushed artificially high.

To keep that from turning into a disaster, the t distribution fattens both tails a little, leaving room for the accident of “s underestimated”.

How much fatter depends on the degrees of freedom. The smaller n, the fatter the tails; as n → ∞ the t distribution degenerates back to the standard normal.

Numbers make it concrete. For a two-sided 5% critical value the normal gives 1.96, while t with 7 degrees of freedom gives 2.365. Same word “significant”, but the bar a small sample must clear is a good deal higher.

This theory was born in a brewery.

In the early twentieth century the Guinness brewery in Dublin wanted to judge yield differences between barley varieties from very few samples — a dozen or so, far too few for the normal approximation to hold.

The brewery’s chemist William Gosset derived the exact distribution of the mean for small samples. The brewery, fearing leaks of trade secrets, forbade employees from publishing under their real names, so Gosset signed himself “Student”.

Hence the distribution is still called Student’s t distribution — the most successful pseudonym in statistics textbooks.

A quality-control problem in the food industry ended up supplying the statistical foundation for the whole of science. The most moving part of the story is how plain the motive was: samples are expensive, so every sample must be squeezed for all the information it holds.

A hundred years later the motive has not changed. Clinical trials, A/B tests, user research — wherever data are priced per unit, the t distribution is still on duty.

The site’s T-Test / CI runs this whole construction chain end to end.

Paste a comma-separated column of samples (the default set is 12,15,14,10,13,16,11,14) and it outputs n, mean, sample standard deviation, and standard error in turn, then gives t=xˉ/SEt = \bar{x}/\mathrm{SE} and the two-sided p-value.

For the default data the mean is 13.125, the standard deviation about 2.031, the standard error about 0.718, giving t ≈ 18.3. Since the null is fixed at μ0=0\mu_0 = 0 and this data sits awfully far from 0, the p-value simply reads 0.0000.

To test whether the mean is some other number, subtract that number from every sample and paste again — the standard move for changing μ0\mu_0 in a one-sample test.

One comment in the tool’s source deserves quoting here: the p-value is computed with a normal approximation, and the comment says in so many words “fine while n > 30, coarser otherwise”.

That is not laziness but a deliberate teaching trade-off. The normal approximation underestimates the p-value in small samples (t tails are fatter, so the true tail probability is larger), which means the tool’s significance is optimistic for small samples.

The rigorous approach is to compare the computed t against the critical value of a t distribution with n−1n-1 degrees of freedom. At n=8, for instance, the reference is 2.365 rather than 1.96.

Knowing where your tool approximates, and which way the approximation leans, is far safer than trusting it as a black box.

While we are here, walk the whole computation against the default data and watch what each step does.

The eight numbers sum to 105, so xˉ=105/8=13.125\bar{x} = 105/8 = 13.125. Take each deviation xi−xˉx_i - \bar{x}, square and add: 28.875. Divide by the degrees of freedom n−1=7n-1=7 for a variance of 4.125, and the square root gives s≈2.031s \approx 2.031. The standard error is SE=s/8≈0.718\mathrm{SE} = s/\sqrt{8} \approx 0.718. Finally t=13.125/0.718≈18.3t = 13.125/0.718 \approx 18.3.

Notice that not one step in this chain is mysterious. The mean is a center of gravity, the standard deviation an average radius around it, the standard error an estimate of “how much the mean would wobble if we sampled again”, and t the ratio of deviation to wobble.

Many people fear the t-test because textbooks dump all four quantities at once. Taken apart, each one is a sentence in plain language.

Confidence Intervals

“Confidence interval” hangs in the title of the t-test tool, and that is no coincidence. Interval estimation and hypothesis testing are two uses of one formula.

The test asks “is μ0\mu_0 far enough from xˉ\bar{x}”; interval estimation simply circles every μ0\mu_0 that is not far enough:

xˉ±t0.975, n−1×sn\bar{x} \pm t_{0.975,\,n-1} \times \frac{s}{\sqrt{n}}

Run the default data: 13.125±2.365×0.71813.125 \pm 2.365 \times 0.718, roughly [11.43, 14.82][11.43,\ 14.82].

Reading that interval has a famous trap: it is not “there is a 95% probability that the true mean lies in this interval”.

For a frequentist, the true mean is a fixed number; it does not roll dice, so probability does not apply.

The strict reading is procedural: “if we sampled repeatedly and built such intervals repeatedly, in the long run about 95% of them would cover the true value”.

The single interval you are handed either covers it or does not; you can never know which.

The relation between interval and test is obvious at a glance. A null μ0\mu_0 falling outside the 95% interval is equivalent to a two-sided test being significant at the 0.05 level; falling inside is equivalent to not significant.

So “p = 0.049” and “p = 0.051” differ in no essential way — the former’s μ0\mu_0 simply lands a millimeter outside the interval. Yet papers only honor the former, which is exactly the absurdity of threshold thinking, and the subject of the three red lines below.

Compared with staring at a p-value, drawing the confidence interval carries far more information. A narrower interval means a more precise estimate; an interval sitting off to one side means the direction is clear. And the most insidious trap of all — “significant, but the interval spans every practically irrelevant value” — is only visible once the interval is on the page.

The z-Table

Today’s Z-Table takes a z value (default 1.96) and instantly returns Φ(z)\Phi(z) and the right-tail probability.

But before calculators were everywhere, Φ(z)\Phi(z) had no closed form and numerical integration was unaffordable, so statisticians the world over leaned on printed tables.

The standard normal distribution function was precomputed at z = 0.00, 0.01, 0.02, …, typeset, and bound into every textbook. Solving a hypothesis-testing exercise went: compute z, open the book, and run a finger along row and column to read off the tail probability.

The table was not an auxiliary tool; the table was the discipline’s computing engine.

The number 1.96 became a totem of statistics precisely as a legacy of the table era. Φ(1.96)=0.975\Phi(1.96) = 0.975: 2.5% cut off on each side, 5% two-sided in total.

It works in reverse as a mnemonic too. Under the normal, about 68% of data falls within ±1 standard deviation, 95% within ±1.96, and 99.7% within ±3. That “68–95–99.7” rule of thumb survives today in control charts and exam questions.

The layout of an old z-table is worth a look as well, because it explains the entire information structure of the act of “looking something up”.

The primary key is the integer part and first decimal of z (row labels 0.0 to 3.9); the column labels are the second decimal (0 to 9); the cell at the intersection holds Φ(z)\Phi(z).

Look up 1.96 = walk along the 1.9 row, align on the 0.06 column, read 0.9750.

Tables usually stop dead around z ≈ 4, because Φ(4)≈0.99997\Phi(4) \approx 0.99997 — everything to the right is a wall of 0.9999, and the page has no room for information.

Tail probabilities smaller than print precision became, later on, the “table blind spot”. Some fields care exactly about tail probabilities on the order of 10⁻⁸, which no table covers, so other numerical methods had to be found.

Today’s z-table tool has no such ceiling: any z can be computed, because its table is a function computed on demand rather than a printed object.

The table’s historical role has two layers.

The first is trading budget for time. When computing a function value is expensive, pay once and consult many times.

The same move is everywhere. The constants page of the Science Toolkit pins the speed of light, Planck’s constant, and Avogadro’s number into one table for copying. The speed of light line reads 299,792,458 — a number with no measurement error at all, because since 1983 the meter is defined by it, so that cell is a definition, not a measurement.

z-tables, physical constant tables, logarithm tables — all the same kind of object: an expensive one-off computation frozen into public property that can be consumed repeatedly.

The second layer is more interesting. The handwork that once patched Φ(z)\Phi(z) together from polynomial approximations plus ln⁡\ln tables now fits into one line of browser code.

The z-table tool and the t-test tool share one normal distribution implementation: a classic Abramowitz–Stegun polynomial approximation (the coefficient 0.2316419 is instantly recognizable), with a maximum error on the order of 10−710^{-7}. Ample for any table-lookup need.

History comes full circle here: humans first invented tables to escape computation, then invented computation to abolish the tables. The act of “looking it up” today actually executes an ad-hoc numerical approximation.

Three Red Lines for Reading p-Values

Back to the crux. “p < 0.05” invites three epidemic misreadings, each worth dismantling head-on.

Red line one: a p-value is not “the probability that H0H_0 is true”.

P(D∣H0)P(D|H_0) and P(H0∣D)P(H_0|D) are conditional probabilities pointing in opposite directions. Saying “p = 0.03, so the null has only a 3% chance of holding” is reading “many people carry umbrellas when it rains” as “umbrellas cause rain”.

To talk about P(H0∣D)P(H_0|D) you must bring in a prior, which is Bayesian territory; a frequentist test never enters it from beginning to end.

Red line two: “not significant” does not mean “no difference”.

p = 0.3 says only that “this batch of data is not surprising under H0H_0”. It may be that there is genuinely no difference, or that the sample is too small and noise drowned a medium-sized effect.

A test’s statistical power (the probability of catching an effect when it truly exists) grows with n. Between “did not detect significance” and “detected that it does not exist” lies an entire power analysis’s worth of work.

Red line three: significant is not important — sample size will lie for you.

The numerator of the t statistic is the effect size; n\sqrt{n} squats in the denominator, so once n is maxed out, even a trivial deviation turns into an astronomical t.

A concrete example. A test scored out of 100 with a standard deviation of 15; some teaching method raises the average by a mere 0.5 points. Run it on n = 10000 people: standard error = 15/100 = 0.15, t = 0.5/0.15 ≈ 3.3, p < 0.001, “highly significant”.

But 0.5 points means nothing in any real classroom.

Conversely, in an experiment with n = 20, a large 5-point effect may not even reach the 2.09 critical value.

A p-value answers “does an effect exist”; an effect size answers “how big is it” — and the two must be read together. Reporting only the former and not the latter is the universal cosmetics of papers and press releases.

One more practical caveat: a p-value holds only for a single test.

Slice the same data twenty ways and test each one, and one of them will have p below 0.05. That is not a discovery, it is arithmetic: the probability of at least one false positive across 20 independent tests is about 1−0.9520≈64%1 - 0.95^{20} \approx 64\%.

Multiple comparisons call for a correction like Bonferroni to tighten the threshold. “p-hacking” — slicing data from different angles until something turns significant — is a hotbed of academic misconduct, and this is its mathematical root.

The origin of the 0.05 threshold itself does not deserve its status either.

Fisher picked 0.05 in the 1920s more or less casually as a bar for “worth stopping to look at”; his intent was to tell readers “this result might be worth another experiment”, not to promulgate a pass line.

A hundred years later, that casual number is a paper’s life or death.

The field’s self-correction peaked in 2016. The American Statistical Association issued a rare formal statement, cautioning point by point that p-values must not be used this way. Some more radical journals simply announced they would no longer accept null-hypothesis-testing papers whose main evidence is a p-value, requiring effect sizes and intervals instead.

The gist of the whole affair is the same as this section’s title: significance is a threshold property, not a scale of strength. Treating 0.049 and 0.051 as two different worlds is the crudest possible discretization of a continuous quantity.

Look at the Shape Before Testing

Every test of a mean assumes the data are roughly symmetric and free of outrageous outliers.

The t-test’s normality requirement can be covered by the central limit theorem in large samples (the rule of thumb being that once n ≥ 30 the distribution of xˉ\bar{x} is already quite normal), but in small samples a single outlier can drag the mean anywhere.

So in any serious workflow, a low-tech step always stands in front of “the test”: plot the data and take a look.

Seeing the shape needs no statistical software; expression plotting in the Plot Tool is enough.

Type into the function field:

exp(-x*x/2)/sqrt(2*PI)

Set the x range from −4 to 4 and the standard normal bell appears at once; the tool scales the y axis automatically.

To see the effect of a larger σ, switch the expression to 0.5*exp(-x*x/8)/sqrt(2*PI) (the normal density with σ = 2): the peak halves and the waist widens.

The mean sets the bell’s position, the standard deviation its girth — stare at the plot for ten seconds and you will never need to memorize that again.

For your own data, subtract the mean from each column and divide by the standard deviation, then overlay a histogram on that bell. The expression field accepts sin, exp, log, sqrt, abs and other standard functions, so sketching a reference line costs nothing.

Why should “the mean is approximately normal once n ≥ 30” be believed? The core is the additivity of variance.

Each sample xix_i is distributed like the mean with variance σ2\sigma^2; average n independent samples and the variance becomes σ2/n\sigma^2/n. The divisor is nn, not n2n^2, so the mean’s standard deviation shrinks only as n\sqrt{n}.

That is also where the n\sqrt{n} in the t statistic’s denominator comes from. Doubling the precision of a mean estimate takes four times the samples; one more accurate digit takes a hundred times.

This √n contraction law is the most expensive tax rate in all of statistics. The phenomenon from the third red line — “once n grows, tiny effects turn significant” — has its root right here. Noise fades as √n while the effect stays put, so the balance eventually tips toward “significant”.

The value of this step goes beyond checking assumptions.

Visualization often exposes the shape of a problem before any test does. Bimodality means the sample mixes two populations; a right tail suggests taking logarithms first; a lone outlier deserves the question “was that a typo?”.

What primes look like in two dimensions told the other side of the same story: rearrange the data into a different geometric posture and a silent pattern surfaces on its own, and only then does mathematics step in to turn it into a falsifiable proposition.

Graphics discovers; the test adjudicates. Reverse the order and the test degenerates into a rubber stamp for preconceptions.

By the way, several small machines in the Science Toolkit share the same way of thinking as statistics.

The Karnaugh map page reduces a truth table to a minimal logic expression; the base conversion page throws random problems for 2/8/10/16 conversion practice.

They belong to the same lineage as the z-table: freeze the part where human labor is expensive and the result can be pre-made, freeing the brain for the part only a brain can do — judgment.

Summary

Statistical testing is a machine that quantifies surprise.

The null hypothesis gives it a stage, the t statistic compresses the data into a score in units of standard error, the z-table (or t distribution) translates that into a probability, and the p-value is the translation.

The machine does not produce truth; it produces a verdict on whether this batch of data deserves to be taken seriously. How large the effect is, whether it matters, whether to believe it — those are for the people outside the machine.

Next time you see “studies show, p < 0.05” anywhere, ask three questions in order: compared to what (effect size), how large was the sample (that √n in the denominator), and how many angles were tested (multiple comparisons).


Thanks for reading! Follow me if you'd like~

Life and Science Tools

Tue Aug 18 2026
13780 words · 69 minutes