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.
I predict that, at full speed, the top mass will begin dropping immediately and the upper coils will visibly collapse within a few tens of milliseconds: before release the spring below the top mass is stretched by the weight of the 39 coils below it, so when the ceiling force is removed the top mass has an initial downward acceleration of about 40g. The bottom mass, by contrast, has zero net force at the instant of release, because the spring above it is stretched by exactly its own weight. The release therefore produces a collapse/compression front that travels down the chain. In this 40-mass model the centre of mass starts 0.47 m above the bottom and falls at g, so the bottom cannot remain fixed for much longer than sqrt(2*0.47/9.81) ≈ 0.31 s; the front should reach the bottom on that order. Thus the bottom should stay on the marker line (apart from an invisible sub-pixel precursor) for roughly the first 0.3 s, while the top collapses and the centre of mass falls; after that the bottom leaves the marker and falls with the rest.
N = 40 point masses, vertically coupled. Each mass is m = 1 in arbitrary units.k = 9500 and rest length rest = 0.010 m. The top mass is held before release by an external ceiling spring with the same k and rest; release removes only that external force. No mass is pinned, frozen, or given a different equation after release.g = 9.81 m/s², downward.c * (v_j - v_i) with c = 0.5. Internal damping sums to zero over the chain, so it does not alter the centre-of-mass fall.dt = 1e-4 s. The speed slider changes how much simulated time is advanced per real frame; it does not change dt.sqrt(k/m) ≈ 97.5 s⁻¹; the free-free chain maximum angular frequency is about 2 sqrt(k/m) ≈ 195 rad/s, so omega*dt ≈ 0.02, far inside the stable region. There are no velocity clamps or other fudge factors.s = m g / k, the extension of the intermass spring between mass i and i+1 ise_i = (N - 1 - i) s,e_ceiling = N s. The code sets positions from these exact equilibrium extensions, so the top coils are stretched much more than the bottom coils.260 pixels per metre, anchor at canvas y = 35. For the chosen parameters the bottom is at about y = 359 px at release, and the centre of mass is about 0.47 m above the bottom.dt per physics step.<!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; }
body {
margin: 0;
background: #101418;
color: #e8f0f5;
font-family: system-ui, -apple-system, "Segoe UI", sans-serif;
}
.wrap {
max-width: 940px;
margin: 0 auto;
padding: 14px;
}
h1 {
font-size: 20px;
margin: 0 0 10px;
font-weight: 600;
}
canvas {
display: block;
width: 100%;
height: auto;
background: #070a0d;
border: 1px solid #25303a;
border-radius: 8px;
}
.controls {
display: flex;
flex-wrap: wrap;
gap: 12px;
align-items: center;
margin-top: 12px;
}
button {
background: #1f6feb;
color: white;
border: 0;
border-radius: 6px;
padding: 8px 14px;
font-size: 14px;
cursor: pointer;
}
button.secondary {
background: #2b3945;
}
button:disabled {
opacity: 0.45;
cursor: default;
}
label {
font-size: 14px;
display: flex;
gap: 8px;
align-items: center;
}
input[type=range] {
width: 190px;
}
.readout {
font-variant-numeric: tabular-nums;
font-size: 14px;
min-width: 330px;
}
.note {
font-size: 12px;
color: #9fb0bd;
margin-top: 8px;
line-height: 1.35;
}
</style>
</head>
<body>
<main class="wrap">
<h1>Falling slinky — release from true hanging equilibrium</h1>
<canvas id="c" width="900" height="900"></canvas>
<div class="controls">
<button id="release">Release</button>
<button id="reset" class="secondary">Reset</button>
<label>
Speed
<input id="speed" type="range" min="1" max="20" step="1" value="1">
<span id="speedText">1/1</span>
</label>
<div id="readout" class="readout">clock 0.0 ms — hanging — speed 1/1</div>
</div>
<p class="note">
The dashed line is the height of the bottom mass at the instant of release and does not move.
The cyan dot is the centre of mass, shown only as a diagnostic.
No mass is pinned or scripted after release: release simply removes the external ceiling-spring force.
</p>
</main>
<script>
(() => {
const canvas = document.getElementById('c');
const ctx = canvas.getContext('2d');
const W = canvas.width;
const H = canvas.height;
// Physics parameters.
const N = 40;
const m = 1.0;
const k = 9500.0;
const g = 9.81;
const rest = 0.010;
const dashpot = 0.5;
const dt = 1e-4;
// Display parameters.
const pxPerM = 260.0;
const anchorCanvasY = 35.0;
const centerX = W / 2;
const coilAmp = 12.0;
const y = new Float64Array(N);
const v = new Float64Array(N);
const a = new Float64Array(N);
let released = false;
let simTime = 0.0;
let markerY = null;
let accumulator = 0.0;
let lastTime = performance.now();
const releaseBtn = document.getElementById('release');
const resetBtn = document.getElementById('reset');
const speedInput = document.getElementById('speed');
const speedText = document.getElementById('speedText');
const readout = document.getElementById('readout');
function equilibrium() {
const mgOverK = m * g / k;
// Ceiling spring supports all N masses.
y[0] = rest + N * mgOverK;
// Intermass spring i supports the N-1-i masses below it.
for (let i = 0; i < N - 1; i++) {
const ext = (N - 1 - i) * mgOverK;
y[i + 1] = y[i] + rest + ext;
}
v.fill(0);
}
function computeAcceleration() {
for (let i = 0; i < N; i++) a[i] = g;
// Neighbour springs: Hooke's law plus a small internal dashpot.
for (let i = 0; i < N - 1; i++) {
const ext = y[i + 1] - y[i] - rest;
const relV = v[i + 1] - v[i];
const f = k * ext + dashpot * relV;
// y is positive downward.
// A positive f pulls mass i downward and mass i+1 upward.
a[i] += f / m;
a[i + 1] -= f / m;
}
// External ceiling spring, present only while hanging.
if (!released) {
const ext = y[0] - rest;
const relV = v[0]; // anchor velocity is zero
const f = k * ext + dashpot * relV;
a[0] -= f / m;
}
}
function step() {
computeAcceleration();
// Semi-implicit Euler.
for (let i = 0; i < N; i++) {
v[i] += a[i] * dt;
y[i] += v[i] * dt;
}
simTime += dt;
}
function physToCanvasY(physY) {
return anchorCanvasY + physY * pxPerM;
}
function drawSpring(x1, y1, x2, y2, coils, color) {
const dy = y2 - y1;
const segments = Math.max(2, coils * 2);
ctx.strokeStyle = color;
ctx.lineWidth = 2;
ctx.lineJoin = 'round';
ctx.lineCap = 'round';
ctx.beginPath();
ctx.moveTo(x1, y1);
for (let i = 1; i < segments; i++) {
const t = i / segments;
const yy = y1 + dy * t;
const xx = x1 + ((i % 2 === 1) ? coilAmp : -coilAmp);
ctx.lineTo(xx, yy);
}
ctx.lineTo(x2, y2);
ctx.stroke();
}
function drawSlinky() {
ctx.strokeStyle = '#e6edf3';
ctx.lineWidth = 2;
ctx.lineJoin = 'round';
ctx.lineCap = 'round';
ctx.beginPath();
ctx.moveTo(centerX, physToCanvasY(y[0]));
for (let i = 0; i < N - 1; i++) {
const y1 = physToCanvasY(y[i]);
const y2 = physToCanvasY(y[i + 1]);
const dir = (i % 2 === 0) ? 1 : -1;
const dy = y2 - y1;
ctx.lineTo(centerX + dir * coilAmp, y1 + dy * 0.25);
ctx.lineTo(centerX, y1 + dy * 0.50);
ctx.lineTo(centerX - dir * coilAmp, y1 + dy * 0.75);
ctx.lineTo(centerX, y2);
}
ctx.stroke();
ctx.fillStyle = '#f2b134';
for (let i = 0; i < N; i++) {
ctx.beginPath();
ctx.arc(centerX, physToCanvasY(y[i]), 2.0, 0, Math.PI * 2);
ctx.fill();
}
}
function draw() {
ctx.clearRect(0, 0, W, H);
// Faint grid.
ctx.strokeStyle = 'rgba(255,255,255,0.04)';
ctx.lineWidth = 1;
for (let yy = anchorCanvasY; yy < H; yy += 50) {
ctx.beginPath();
ctx.moveTo(0, yy);
ctx.lineTo(W, yy);
ctx.stroke();
}
// Marker line: bottom height at release.
if (markerY !== null) {
ctx.save();
ctx.strokeStyle = '#f0b429';
ctx.lineWidth = 2;
ctx.setLineDash([9, 6]);
ctx.beginPath();
ctx.moveTo(0, markerY);
ctx.lineTo(W, markerY);
ctx.stroke();
ctx.setLineDash([]);
ctx.fillStyle = '#f0b429';
ctx.font = '13px sans-serif';
ctx.fillText('bottom at release', 10, markerY - 6);
ctx.restore();
}
// Ceiling / anchor.
ctx.fillStyle = '#7d8f9f';
ctx.fillRect(centerX - 70, anchorCanvasY - 10, 140, 8);
ctx.beginPath();
ctx.arc(centerX, anchorCanvasY, 4, 0, Math.PI * 2);
ctx.fill();
const topCanvasY = physToCanvasY(y[0]);
if (!released) {
drawSpring(centerX, anchorCanvasY, topCanvasY, 5, '#7ab3ff');
} else {
ctx.strokeStyle = '#4a5b68';
ctx.lineWidth = 2;
ctx.beginPath();
ctx.moveTo(centerX, anchorCanvasY);
ctx.lineTo(centerX, anchorCanvasY + 10);
ctx.stroke();
}
drawSlinky();
// Current bottom indicator.
const bottomCanvasY = physToCanvasY(y[N - 1]);
ctx.fillStyle = '#ff6b6b';
ctx.beginPath();
ctx.moveTo(centerX + 60, bottomCanvasY);
ctx.lineTo(centerX + 72, bottomCanvasY - 6);
ctx.lineTo(centerX + 72, bottomCanvasY + 6);
ctx.closePath();
ctx.fill();
ctx.fillStyle = '#ff9b9b';
ctx.font = '12px sans-serif';
ctx.fillText('current bottom', centerX + 76, bottomCanvasY + 4);
// Centre of mass diagnostic.
let com = 0;
for (let i = 0; i < N; i++) com += y[i];
com /= N;
const comCanvasY = physToCanvasY(com);
ctx.fillStyle = '#6ee7ff';
ctx.beginPath();
ctx.arc(centerX - 90, comCanvasY, 3, 0, Math.PI * 2);
ctx.fill();
ctx.font = '12px sans-serif';
ctx.fillText('COM', centerX - 84, comCanvasY + 4);
const ms = simTime * 1000;
readout.textContent =
`clock ${ms.toFixed(1)} ms — ${released ? 'released' : 'hanging'} — speed 1/${speedInput.value}`;
}
function frame(now) {
let realDt = (now - lastTime) / 1000;
lastTime = now;
if (realDt > 0.1) realDt = 0.1;
if (released) {
const speedFactor = 1 / Number(speedInput.value);
accumulator += realDt * speedFactor;
let steps = 0;
const maxSteps = 10000;
while (accumulator >= dt && steps < maxSteps) {
step();
accumulator -= dt;
steps++;
}
// If the browser stalls badly, drop the backlog rather than let
// the UI freeze. This does not alter the physics step size.
if (steps >= maxSteps) accumulator = 0;
}
draw();
requestAnimationFrame(frame);
}
releaseBtn.addEventListener('click', () => {
if (released) return;
markerY = physToCanvasY(y[N - 1]);
released = true;
simTime = 0;
accumulator = 0;
releaseBtn.disabled = true;
});
resetBtn.addEventListener('click', () => {
equilibrium();
released = false;
simTime = 0;
markerY = null;
accumulator = 0;
releaseBtn.disabled = false;
lastTime = performance.now();
});
speedInput.addEventListener('input', () => {
speedText.textContent = `1/${speedInput.value}`;
});
equilibrium();
requestAnimationFrame(frame);
})();
</script>
</body>
</html>
I cannot press Release in this text environment, so this is a code-level and hand-checked answer, not an empirical run. That said, the equations as written implement the prediction: at the instant after release, the bottom mass has zero net force, every mass except the top has zero net force, and the top mass has initial acceleration N*g ≈ 392 m/s². The internal damping cancels in pairs, so the centre of mass acceleration is exactly g in the discrete update. With the chosen parameters the centre of mass starts about 0.470 m above the bottom, so if the bottom were held fixed the centre of mass would reach it in about 0.31 s; the collapse front in this lumped chain should reach the bottom on that order, and the marker line should show the bottom staying essentially put for roughly the first few hundred milliseconds.
The honest caveats are these. First, the bottom is not mathematically frozen: in a massless-spring lumped model, a force change propagates continuously through the nearest-neighbour equations, and the numerical scheme will produce a tiny, sub-pixel precursor before the macroscopic collapse arrives. Second, at full speed the very early top collapse is fast, so the slow-motion slider is genuinely useful. Third, the slinky eventually falls off the canvas; that is a viewing issue, not a stability issue. The timestep is far below the stability limit for k = 9500, and no velocity clamps or fudge factors are used. If I run it and the bottom leaves the marker much earlier or later than about 0.3 s, then my lumped-parameter front-speed/centre-of-mass estimate is wrong, not the integrator hiding it.