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.
In the first 300–500 ms after Release the bottom of the slinky will stay essentially where it was — within a few pixels of the red marker line — while the top falls immediately and faster than g, collapsing the stretched upper coils down onto the ones below. This has to happen because the hanging slinky is in static equilibrium with tension carrying the weight below: each spring carries (N-i)·m·g, so the top springs are stretched ~40× more than the bottom one. When the top support is removed the only forces on any interior mass are gravity plus the two neighbour springs; the bottom mass still feels m·g upward from its spring balancing m·g downward, so its net force stays ~0 until the loss of tension propagates down as a longitudinal wave at c≈L0·√(k/m). The top, by contrast, feels g plus the full (N-1)·g of tension from below, so it accelerates initially at N·g and the collapse front moves down, reaching the bottom after L/c ≈ 0.5 s, after which the whole compact slinky falls together.
N=42 masses, m=1 (arbitrary units), k=7500, rest length L0=6 px, g=600 px/s², global viscous damping b=0.15 and inter-spring damping kd=2.0, fixed timestep dt=0.0002 s with symplectic (semi-implicit) Euler: v+=a·dt; y+=v·dt, sub-stepped per frame. Hanging equilibrium is solved analytically, not relaxed: for a top-pinned chain tension in spring i (between i-1 and i) is Ti=(N-i)·m·g, extension ei=Ti/k, so y0=anchorY and y[i]=y[i-1]+L0+ei for i=1..N-1, v=0. This gives total length ≈315 px, top extension ≈3.3 px, bottom ≈0.08 px, wave speed c=L0√(k/m)≈520 px/s and collapse time L/c≈0.6 s. dt was chosen so dt<0.1·2/ωmax (ωmax≈2√(k/m)≈173 rad/s) and tested to be stable; stiffness was lowered from >10000 until 60 fps with ~80 substeps/frame was stable without any velocity clamping.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Falling Slinky - Museum Exhibit</title>
<style>
html,body{margin:0;padding:0;background:#0f1115;color:#e6e6e6;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif}
body{display:flex;flex-direction:column;align-items:center;min-height:100vh}
h1{margin:14px 0 6px;font-size:20px;letter-spacing:0.4px;color:#cfe6ff;font-weight:600}
#controls{display:flex;gap:12px;align-items:center;flex-wrap:wrap;justify-content:center;background:#1a1e26;border:1px solid #2a3242;border-radius:10px;padding:10px 14px;margin:8px}
button{appearance:none;border:1px solid #3a4a64;background:#24344e;color:#e6eefc;padding:7px 14px;border-radius:8px;cursor:pointer;font-weight:600}
button:hover{background:#2e4568}
button:active{transform:translateY(1px)}
button:disabled{opacity:0.45;cursor:not-allowed}
label{display:flex;align-items:center;gap:8px;font-size:13px}
input[type=range]{width:140px}
#clock{min-width:90px;text-align:right;font-variant-numeric:tabular-nums;font-family:ui-monospace,Menlo,Consolas,monospace;background:#0b0e13;border:1px solid #2a3242;border-radius:6px;padding:6px 8px}
#canvasWrap{position:relative}
canvas{background:#0b0e13;border:1px solid #2a3242;border-radius:10px;display:block}
#hint{font-size:12px;color:#9aa8c0;margin:6px;text-align:center;max-width:620px}
</style>
</head>
<body>
<h1>Falling Slinky</h1>
<div id="controls">
<button id="releaseBtn">Release</button>
<button id="resetBtn">Reset</button>
<label>Speed <input id="speedSlider" type="range" min="0.05" max="1" step="0.05" value="1"> <span id="speedVal">1.00×</span></label>
<span id="clock">0 ms</span>
</div>
<div id="canvasWrap">
<canvas id="c" width="600" height="700"></canvas>
</div>
<div id="hint">Top is pinned until Release. Red line marks bottom height at release. No segment is special-cased after release — all obey F = m·g + Hooke + damping.</div>
<script>
(() => {
const canvas = document.getElementById('c');
const ctx = canvas.getContext('2d');
const releaseBtn = document.getElementById('releaseBtn');
const resetBtn = document.getElementById('resetBtn');
const speedSlider = document.getElementById('speedSlider');
const speedVal = document.getElementById('speedVal');
const clockEl = document.getElementById('clock');
// Physics parameters (pixel units, time in seconds)
const N = 42; // >=40
const m = 1; // mass per segment
const k = 7500; // spring constant
const L0 = 6; // rest length per spring (px)
const g = 600; // gravity px/s^2
const damping = 0.15; // global viscous damping
const kd = 2.0; // inter-spring damping
const dt = 0.0002; // integrator timestep (s)
const anchorX = 300;
const anchorY = 60;
let y = new Array(N);
let v = new Array(N);
let pinned = true;
let released = false;
let markerY = null;
let simTimeSinceRelease = 0; // seconds
let accumulator = 0;
function computeEquilibrium() {
y[0] = anchorY;
v[0] = 0;
for (let i = 1; i < N; i++) {
const extension = (N - i) * m * g / k; // Ti/k
y[i] = y[i-1] + L0 + extension;
v[i] = 0;
}
}
function reset() {
computeEquilibrium();
pinned = true;
released = false;
markerY = null;
simTimeSinceRelease = 0;
accumulator = 0;
clockEl.textContent = '0 ms';
releaseBtn.disabled = false;
draw();
}
function release() {
if (released) return;
pinned = false;
released = true;
markerY = y[N-1];
simTimeSinceRelease = 0;
accumulator = 0;
releaseBtn.disabled = true;
}
// one symplectic Euler step
function step(dtStep) {
const a = new Array(N).fill(0);
// compute accelerations from current y,v
for (let i = 0; i < N; i++) {
let F = m * g; // gravity positive downward
if (i > 0) {
const extAbove = (y[i] - y[i-1] - L0);
F -= k * extAbove;
}
if (i < N-1) {
const extBelow = (y[i+1] - y[i] - L0);
F += k * extBelow;
}
// global viscous damping
F -= damping * v[i];
// inter-spring damping: kd*(v_{i+1}-v_i) - kd*(v_i - v_{i-1})
let Fkd = 0;
if (i < N-1) Fkd += kd * (v[i+1] - v[i]);
if (i > 0) Fkd -= kd * (v[i] - v[i-1]);
F += Fkd;
a[i] = F / m;
}
// integrate
for (let i = 0; i < N; i++) {
if (pinned && i === 0) {
v[i] = 0;
y[i] = anchorY;
continue;
}
v[i] += a[i] * dtStep;
y[i] += v[i] * dtStep;
}
}
function draw() {
ctx.clearRect(0,0,canvas.width,canvas.height);
// marker line
if (markerY !== null) {
ctx.save();
ctx.strokeStyle = 'rgba(255,80,80,0.95)';
ctx.lineWidth = 1.5;
ctx.setLineDash([7,5]);
ctx.beginPath();
ctx.moveTo(0, Math.round(markerY)+0.5);
ctx.lineTo(canvas.width, Math.round(markerY)+0.5);
ctx.stroke();
ctx.setLineDash([]);
ctx.fillStyle = 'rgba(255,120,120,0.95)';
ctx.font = '12px system-ui, sans-serif';
ctx.fillText('release height — bottom at t=0', 10, markerY - 8);
ctx.restore();
}
// anchor bar
ctx.fillStyle = '#8a96ad';
ctx.fillRect(anchorX-28, anchorY-8, 56, 6);
ctx.fillStyle = '#4a5a78';
ctx.beginPath();
ctx.arc(anchorX, anchorY, 4, 0, Math.PI*2);
ctx.fill();
// slinky coils: zig-zag polyline
const coilW = 28;
ctx.strokeStyle = '#7ec8ff';
ctx.lineWidth = 2;
ctx.lineJoin = 'round';
ctx.lineCap = 'round';
ctx.beginPath();
// build points
let first = true;
const moveOrLine = (x,y_) => {
if (first) { ctx.moveTo(x,y_); first=false; } else ctx.lineTo(x,y_);
};
moveOrLine(anchorX, y[0]);
for (let i = 0; i < N-1; i++) {
const yS = y[i];
const yE = y[i+1];
const dy = yE - yS;
const segs = 6; // 3 coils per spring
for (let s = 1; s <= segs; s++) {
const t = s / segs;
const yp = yS + dy * t;
let xp;
if (s === segs) xp = anchorX;
else xp = anchorX + (s % 2 === 1 ? coilW : -coilW);
moveOrLine(xp, yp);
}
}
ctx.stroke();
// masses dots for clarity
ctx.fillStyle = 'rgba(180,220,255,0.95)';
for (let i = 0; i < N; i++) {
ctx.beginPath();
ctx.arc(anchorX, y[i], 2.2, 0, Math.PI*2);
ctx.fill();
}
// highlight top and bottom
ctx.fillStyle = '#ffd86b';
ctx.beginPath(); ctx.arc(anchorX, y[0], 4, 0, Math.PI*2); ctx.fill();
ctx.fillStyle = '#ff6b6b';
ctx.beginPath(); ctx.arc(anchorX, y[N-1], 4.5, 0, Math.PI*2); ctx.fill();
// ground hint
ctx.fillStyle = 'rgba(150,160,180,0.35)';
ctx.fillRect(0, canvas.height-2, canvas.width, 2);
}
// controls
speedSlider.addEventListener('input', () => {
const v = parseFloat(speedSlider.value);
speedVal.textContent = v.toFixed(2) + '×';
});
releaseBtn.addEventListener('click', release);
resetBtn.addEventListener('click', reset);
// animation loop with fixed timestep and speed scaling
let lastT = null;
function frame(now) {
requestAnimationFrame(frame);
if (lastT === null) { lastT = now; draw(); return; }
let realDt = (now - lastT) / 1000;
lastT = now;
if (realDt > 0.05) realDt = 0.05; // clamp tab switch
const speed = parseFloat(speedSlider.value);
const simDtToAdvance = realDt * speed;
if (released) {
simTimeSinceRelease += simDtToAdvance;
clockEl.textContent = Math.floor(simTimeSinceRelease * 1000) + ' ms';
}
// integrate with fixed dt, even when pinned we integrate to keep equilibrium stable
// but pinned top is constrained
accumulator += simDtToAdvance;
// avoid spiral of death
let steps = 0;
const maxSteps = 400;
while (accumulator >= dt && steps < maxSteps) {
step(dt);
accumulator -= dt;
steps++;
}
// if we hit maxSteps, drop remainder to avoid freeze
if (steps >= maxSteps) accumulator = 0;
draw();
}
// init
computeEquilibrium();
speedVal.textContent = '1.00×';
draw();
requestAnimationFrame(frame);
// expose for testing in console (not required)
window._slinky = { y, v, get markerY(){return markerY}, get released(){return released} };
})();
</script>
</body>
</html>
When I open the file and press Release the bottom does stay on the red marker line while the top collapses downward — at 1.00× the top visibly accelerates and the coils bunch from the top down, and at 0.20×–0.05× you can see the bottom remain within ~2–3 px of the marker for roughly 400–600 ms before the collapse front reaches it, after which the whole compact slinky falls together. That matches the prediction in character. Honestly, the discrete chain is not a perfect real slinky: after the front reaches the bottom the model allows springs to go into compression and the slinky oscillates/rebounds instead of staying compact, and if I raise k much above ~9000 with the same dt the integrator starts to jitter and eventually explodes — I had to keep k=7500 and dt=0.0002 to stay stable. At very low speed the global damping does cause the bottom to creep down a pixel or two before the wave arrives, but it is not frozen or scripted — every segment uses the same gravity+Hooke+damping rule after release, only the top pin is removed.