27:18Gemini 4 Hydrogen: Cheaper Tokens, More Expensive Answers?
Nov 13, 2026 · YouTube
18:40ERNIE 5.5 Flash Preview vs GLM 5.3 Flash: Baidu's new model is very impressive!
Nov 11, 2026 · YouTube
36:22Fable 5.2 robbing me blind, plus: Nex AGI's N2.6 vs GLM 5.3 Flash
Nov 11, 2026 · YouTube
14:03Gemini 4 Carbon: Can it handle my challenges? (First look with one-shot coding tests)
Nov 10, 2026 · YouTube
47:51Ranking major U.S. Open-Weights Models. (Where does Ripple 65B fit in?)
Nov 6, 2026 · YouTube
10:57"Crouton Alpha": the latest super-efficient coding model by Meta?
Nov 3, 2026 · YouTube
38:58Testing Particle-1: a post-trained DeepSeek V4.1 Flash specializing in coding and efficiency
Oct 28, 2026 · YouTube
22:14GPT-6.1 Terra Pro vs Terra: How Much Better Is Pro?
Oct 27, 2026 · YouTube
29:55Kimi K3.1 Pro Looked Incredible. Then I Kept Testing.
Oct 26, 2026 · YouTube
17:58Nemotron 3.5 Super VL vs Opus 5.5: Testing NVIDIA’s new coding juggernaut
Oct 15, 2026 · YouTube
16:04Testing a *massive* new open-weights model 🤯: Muse Spark Open (vs. Nemotron, Opus 5.5, and more)
Oct 15, 2026 · YouTube
16:43Gemini 4 Argon: Great 🐈 Animation, but a broken escalator. (Coding challenge vs Opus 5.5, Sol 6.1)
Oct 13, 2026 · YouTube
16:37Meta's new "Muse Wonder" AI is impressive... but can it compete with Anthropic's models?
Oct 12, 2026 · YouTube
11:12WOW... Haiku 5.5 is very impressive. RIP OpenAI?
Oct 7, 2026 · YouTube
22:47Mistral Large 4 Is Cheap. But Is It Good Enough to Compete?
Oct 6, 2026 · YouTube
30:00Did Elon Musk's team "train the gay away"... and make Grok 4.7 worse?
Sep 26, 2026 · YouTube
10:58So... how much better is Claude Opus 5.5 vs. GPT-6 Sol, really?
Sep 23, 2026 · YouTube
9:38Claude Opus 5.5... the BEST new model for coding!! 🤩
Sep 22, 2026 · YouTube
29:00Grok 4.7: improved, but GLM 5.3 FlashX beat it anyway (benchmark against Gemini, Sol, etc.)
Sep 22, 2026 · YouTube
16:54Stealth Union Alpha: Is this another cheap GPT model? (better than Luna, cheaper than Terra?)
Sep 16, 2026 · YouTube
16:45DeepSeek V4.1 Flash Is Shockingly Good for the Price
Sep 10, 2026 · YouTube
17:14How much better is GPT-6 Astra over Claude Opus 5? Real Website and Coding Tests
Sep 5, 2026 · YouTube
29:13Implementing a multiplayer game with GPT-6 Astra (+ Gemini 3.8, Opus 5, Sol Pro)
Sep 5, 2026 · YouTube
17:31Testing Gemini 3.8 Flash on Real Coding Challenges (vs. other models)
Sep 2, 2026 · YouTube
17:37Tencent Hy4 Preview Tested: Is It Really Better Than Kimi K3 and GLM 5.3?
Aug 28, 2026 · YouTube
23:58Qwen 3.8 Flash Tested: UI, Coding, Physics & more - compared to Opus 5, Sol Pro, Grok
Aug 27, 2026 · YouTube
14:50Stealth Ox Alpha: a new GLM model! Full test (coding & writing) against Grok, Gemini, GPT & others
Aug 21, 2026 · YouTube
21:54GLM 5.3 Tested: Does it beat Claude Opus 5 & Grok 4.6?
Aug 19, 2026 · YouTube
21:23Giving Qwen 3.8 27B another chance (+ GLM 5.2). Testing against GPT, Gemini, Grok etc.
Aug 18, 2026 · YouTube
51:00AI Coding Showdown: Grok 4.6, Gemini 3.7, Terra-Pro, Qwen3.8 2.4TB, Muse Glimmer & more
Aug 15, 2026 · YouTube
27:51Testing Gemini 3.7 Flash: Translation, Vision, and Coding Challenges
Aug 14, 2026 · YouTube
You build physics demonstrations for a science museum. The exhibits have to be right, because there is usually a physicist in the room.
Build me the falling slinky.
A single HTML page. A slinky — at least 40 coupled segments — hangs from a fixed point at the top of the canvas, at rest, under gravity. Then it is released.
Controls:
data: URIs are fine.localStorage, sessionStorage, cookies or indexedDB — sandboxed frame, they throw.html block.Before the file, and before you write it. In one paragraph: what will this simulation show in the first few hundred milliseconds after release, and why does the physics require that? Be concrete about what each end of the slinky does and roughly when.
Commit to this. It is the claim I am going to test your simulation against.
Your parameters — segment count, mass, spring constant, damping, timestep, integrator — and how you found the hanging equilibrium.
The single fenced html block.
Now be honest. Having written it, does the simulation reproduce what you predicted?
Say plainly if it does not. Say if you are unsure. Say if it only works at some parameter settings and falls apart at others.
Do not tell me it shows the right thing because the physics says it should. I am going to open the file, press Release, and watch it against the marker line. If your prediction and your simulation disagree, the answer I want is the one that says so — that is a working scientist noticing their model is wrong, and it scores far above a confident write-up of a result the code does not produce.
At the instant of release the top of the slinky is the only bead whose force balance changes. While hanging, the support was pulling the top bead up with a force equal to the whole weight of the slinky; the moment that force vanishes, the top bead is left with its own weight plus the full tension of the first spring (which was holding up everything below it), so its net downward force is ≈ N·m·g and it accelerates at roughly N·g ≈ 50 g — it plummets. Every other bead, at that same instant, has exactly zero net force: the spring above it still carries precisely the weight of everything below it, so gravity and spring tension cancel. The bottom bead therefore has zero acceleration and stays glued to the marker line. The "news" that the top has been let go travels down as a reduction in tension (a compression of the coils); only when it arrives does a lower bead start to fall. So I expect: the top rushes down immediately while the bottom sits motionless on the marker for roughly the first third of a second; the coils bunch up and the collapse front sweeps down; around 0.3–0.4 s it reaches the bottom and the bottom drops away; by about half a second the slinky is fully collapsed and the whole thing is in free fall. Throughout, the centre of mass (the yellow dot) falls with acceleration exactly g, because after release gravity is the only external force.
m = 1, gravity g = 9.8, spring constant k = 7000, natural link length L0 = 0.025, viscous (relative‑velocity) damping c = 0.5.Δt = 2×10⁻⁴ s, driven by a real‑time accumulator (so the speed slider just scales how much sim‑time each frame consumes). The highest normal‑mode frequency of the chain is ω_max = 2√(k/m) ≈ 167 rad/s, giving Δt·ω_max ≈ 0.033 ≪ 2 — comfortably inside the stability limit, with no velocity clamping or fudge factors.j carries the weight of every bead below it, T_j = (N−1−j)·m·g, so Hooke gives spacing_j = L0 + (N−1−j)·m·g/k. I place the beads by cumulative sum from that. The top link is stretched 49·m·g/k ≈ 0.069 and the bottom link m·g/k ≈ 0.0014 — a 49:1 ratio in elastic stretch (≈3.5:1 in total spacing). I checked the force sum telescopes to exactly zero on every bead, so this is the true rest state, correctly non‑uniform.<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Falling Slinky</title>
<style>
:root { color-scheme: dark; }
* { box-sizing: border-box; }
html, body { margin: 0; min-height: 100%; }
body {
background: radial-gradient(1200px 620px at 50% -12%, #141c27, #0a0d12 62%);
color: #d7dde5;
font: 15px/1.45 system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
display: flex; flex-direction: column; align-items: center;
padding: 16px 14px 30px; gap: 14px;
}
h1 { font-size: 18px; font-weight: 650; margin: 0; letter-spacing: .2px; }
canvas {
width: min(900px, 96vw); height: auto; display: block;
background: #0a0d12; border-radius: 12px;
box-shadow: 0 12px 44px rgba(0,0,0,.55), inset 0 0 0 1px #1c2530;
}
.panel {
display: flex; flex-wrap: wrap; gap: 12px 22px; align-items: center; justify-content: center;
background: #141a22; border: 1px solid #222b37; border-radius: 12px; padding: 12px 18px;
}
button {
font: inherit; font-weight: 650; color: #06121f; background: #6ab0ff;
border: 0; border-radius: 9px; padding: 10px 18px; cursor: pointer;
}
button.secondary { background: #29323f; color: #d7dde5; }
button:hover { filter: brightness(1.07); }
button:active { transform: translateY(1px); }
.ctl { display: flex; align-items: center; gap: 10px; }
label { color: #9aa6b4; }
input[type=range] { width: 210px; accent-color: #6ab0ff; }
.val { color: #eaf2ff; font-variant-numeric: tabular-nums; min-width: 54px; }
.clock { font-size: 24px; font-weight: 750; color: #eaf2ff; font-variant-numeric: tabular-nums; min-width: 132px; text-align: right; }
.clock small { font-size: 13px; font-weight: 500; color: #9aa6b4; }
.hint { color: #6f7b8a; font-size: 13px; max-width: 700px; text-align: center; margin: 0; }
</style>
</head>
<body>
<h1>Falling Slinky</h1>
<canvas id="c" width="900" height="800"></canvas>
<div class="panel">
<button id="release">Release</button>
<button id="reset" class="secondary">Reset</button>
<div class="ctl">
<label for="speed">Speed</label>
<input id="speed" type="range" min="0.05" max="1" step="0.01" value="1">
<span class="val" id="speedVal">1.00×</span>
</div>
<div class="clock"><span id="clock">0</span><small> ms</small></div>
</div>
<p class="hint">Press <b>Release</b> to let go of the top. The red line is fixed at the height of the bottom the instant you let go — watch whether the bottom moves. The yellow dot is the centre of mass, which falls at exactly <i>g</i>.</p>
<script>
(function () {
"use strict";
/* ---------- DOM ---------- */
const canvas = document.getElementById("c");
const ctx = canvas.getContext("2d");
const clockEl = document.getElementById("clock");
const speedEl = document.getElementById("speed");
const speedVal = document.getElementById("speedVal");
/* ---------- model parameters ---------- */
const N = 50; // beads (49 springs) — well over 40 coupled segments
const m = 1; // bead mass
const g = 9.8; // gravity
const k = 7000; // spring constant of every link
const L0 = 0.025; // natural (unstretched) link length
const c = 0.5; // viscous damping along each link (a little)
const DT = 2e-4; // fixed physics timestep (s)
/* ---------- state ---------- */
const y = new Float64Array(N); // height (y-up), fixed support at y = 0
const v = new Float64Array(N); // velocity
const F = new Float64Array(N); // force accumulator
let released = false;
let simTime = 0; // seconds since release
let markerY = 0; // world height of the bottom at release
let acc = 0; // fixed-step time accumulator
let speed = 1;
/* ---------- geometry (pixels) ---------- */
const CW = 900, CH = 800;
const anchorX = CW / 2, anchorY = 48; // fixed support
const scale = 125; // px per world unit
const coilR = 0.33; // helix radius (world units)
const COILS = 24; // visual coils along the slinky
/* ---------- closed-form hanging equilibrium ----------
At rest, link j (between bead j and j+1) carries the weight of every
bead below it: T_j = (N-1-j) m g.
Hooke: T_j = k (spacing_j - L0) -> spacing_j = L0 + (N-1-j) m g / k.
Exact, non-uniform rest state (top links stretched most). */
function hangAtRest() {
y[0] = 0;
for (let j = 0; j < N - 1; j++) {
y[j + 1] = y[j] - (L0 + (N - 1 - j) * m * g / k);
}
v.fill(0);
}
function reset() {
hangAtRest();
released = false;
simTime = 0;
acc = 0;
markerY = y[N - 1];
clockEl.textContent = "0";
}
function releaseTop() {
if (released) return;
markerY = y[N - 1]; // freeze the marker at the bottom's release height
released = true;
simTime = 0;
acc = 0;
}
/* ---------- forces: gravity + Hooke + damping, identical for every bead ---------- */
function computeForces() {
for (let i = 0; i < N; i++) F[i] = -m * g; // gravity
for (let j = 0; j < N - 1; j++) {
const f = k * ((y[j] - y[j + 1]) - L0) // Hooke tension
+ c * (v[j] - v[j + 1]); // internal damping
F[j] -= f; // upper bead pulled down
F[j + 1] += f; // lower bead pulled up
}
}
/* ---------- one symplectic (semi-implicit) Euler step ---------- */
function step() {
computeForces();
for (let i = 0; i < N; i++) {
v[i] += (F[i] / m) * DT;
y[i] += v[i] * DT;
}
simTime += DT;
}
/* ---------- rendering ---------- */
function hidpi() {
const dpr = Math.max(1, Math.min(2.5, window.devicePixelRatio || 1));
canvas.width = Math.round(CW * dpr);
canvas.height = Math.round(CH * dpr);
ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
}
const SX = wx => anchorX + wx * scale;
const SY = wy => anchorY - wy * scale; // world y-up -> screen y-down
function drawSupport() {
ctx.fillStyle = "#39434f";
ctx.fillRect(anchorX - 64, anchorY - 16, 128, 12);
ctx.strokeStyle = "#4d5a68";
ctx.lineWidth = 2;
for (let x = -58; x <= 50; x += 14) {
ctx.beginPath();
ctx.moveTo(anchorX + x, anchorY - 4);
ctx.lineTo(anchorX + x + 9, anchorY + 6);
ctx.stroke();
}
}
function drawSlinky() {
const seg = 10; // samples per inter-bead segment
ctx.beginPath();
let started = false;
for (let s = 0; s <= (N - 1) * seg; s++) {
const u = s / seg; // continuous bead index 0..N-1
let i = Math.floor(u); if (i > N - 2) i = N - 2;
const fr = u - i;
const yc = y[i] * (1 - fr) + y[i + 1] * fr;
const phase = 2 * Math.PI * COILS * u / (N - 1);
const px = SX(coilR * Math.sin(phase));
const py = SY(yc);
if (!started) { ctx.moveTo(px, py); started = true; }
else ctx.lineTo(px, py);
}
ctx.lineWidth = 2.2;
ctx.lineJoin = "round";
ctx.lineCap = "round";
ctx.strokeStyle = "#5fa8ff";
ctx.stroke();
}
function drawCM() {
let ycm = 0;
for (let i = 0; i < N; i++) ycm += y[i];
ycm /= N;
ctx.beginPath();
ctx.arc(anchorX, SY(ycm), 5, 0, 2 * Math.PI);
ctx.fillStyle = "#ffd45e";
ctx.fill();
ctx.lineWidth = 1.25;
ctx.strokeStyle = "rgba(0,0,0,.55)";
ctx.stroke();
}
function drawMarker() {
if (!released) return;
const my = SY(markerY);
ctx.save();
ctx.setLineDash([9, 7]);
ctx.lineWidth = 1.5;
ctx.strokeStyle = "rgba(255,110,110,.85)";
ctx.beginPath(); ctx.moveTo(0, my); ctx.lineTo(CW, my); ctx.stroke();
ctx.restore();
ctx.fillStyle = "rgba(255,120,120,.95)";
ctx.font = "12px system-ui, sans-serif";
ctx.textAlign = "left";
ctx.fillText("release height of the bottom", 12, my - 7);
}
function render() {
ctx.clearRect(0, 0, CW, CH);
drawSupport();
drawSlinky();
drawCM();
drawMarker();
}
/* ---------- main loop ---------- */
let last = null;
const MAX_STEPS = 1000;
function frame(now) {
if (last === null) last = now;
let realDt = (now - last) / 1000;
last = now;
if (realDt > 0.05) realDt = 0.05; // clamp after a stall
if (released) {
acc += realDt * speed;
let steps = Math.floor(acc / DT);
acc -= steps * DT;
if (steps > MAX_STEPS) { steps = MAX_STEPS; acc = 0; }
for (let s = 0; s < steps; s++) step();
clockEl.textContent = Math.round(simTime * 1000).toString();
}
render();
requestAnimationFrame(frame);
}
/* ---------- wire up + go ---------- */
speedEl.addEventListener("input", () => {
speed = parseFloat(speedEl.value);
speedVal.textContent = speed.toFixed(2) + "\u00d7";
});
document.getElementById("release").addEventListener("click", releaseTop);
document.getElementById("reset").addEventListener("click", reset);
hidpi();
reset();
requestAnimationFrame(frame);
})();
</script>
</body>
</html>
I have not executed this in the session, so I won't pretend to report measured millisecond values. Here is what I can and can't stand behind.
What I'm confident about, and why it isn't hand‑waving. I checked the arithmetic the code actually performs. The closed‑form positions make the internal force sum telescope to exactly zero on every bead except the top, and the top's release force is exactly −N·m·g. So the code, as written, launches the top at ≈50 g and leaves every other bead with zero initial acceleration — the top‑plummets / bottom‑stays behaviour is forced by the initial conditions and force law, not hoped for. Likewise the centre‑of‑mass dot provably falls at exactly g: internal spring and damping forces cancel pairwise in the sum, and the symplectic update makes the cm velocity change by exactly −g·Δt each step. If the yellow dot does not trace a clean g‑parabola, something is wrong and I'd want to know.
What I'm genuinely unsure about — the timing. My "≈0.3 s to ~0.5 s" is an estimate (a centre‑of‑mass free‑fall argument gives full collapse at ≈0.49 s; the bottom must leave earlier). In this linear model the departure is a building‑up disturbance, not the razor‑sharp snap of a real slinky, so the exact instant the bottom visibly leaves the line is fuzzy and could be anywhere in the 0.25–0.45 s window. That is the number I'd most expect to be off, and it's the thing to check against the marker.
A real artifact I'm flagging rather than hiding. These are ideal Hooke springs, which push as well as pull. A real slinky is tension‑only — its coils can bunch but can't push apart. So after the collapse (past ~0.5 s) this simulation will let the compressed coils "breathe": the slinky re‑expands toward its natural length and oscillates, instead of staying dead‑bunched like a real one. This does not affect the headline effect (bottom holds, then drops), but if you watch past half a second you'll see that ringing, and it's a deviation from a physical slinky, not a match to one.
So: I expect it reproduces the qualitative prediction and the g‑falling centre of mass; I'm not certain of the exact collapse time; and there's a known post‑collapse artifact from using linear springs. If the timings look wrong when you press Release, that's stiffness/damping to revisit — not the core effect, which the force balance pins down.