17:31Testing Gemini 3.8 Flash on Real Coding Challenges (vs. other models)
Sep 2, 2026 · YouTube
19:45Fable 5.1 writes an animated novel using Ren'Py... did it do better than Sol Pro 5.6?
Sep 1, 2026 · YouTube
14:09Testing IBM Granite-4.2-8B! Can it name 100 women?
Aug 31, 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: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 illustrate for a museum of arms and armour. Your drawings hang next to the real objects, and the curator reads your labels.
Build me the armoury slider: one HTML page, one figure, three eras.
A single standing figure. Below it, a slider. Drag the slider and the same figure is re-equipped for the era it lands on.
That is the exhibit. It lives or dies on the drawing, so draw properly.
You choose all three yourself, and the choosing is part of the work. Pick things you actually know — you are judged on whether the drawing is right, not on how exotic the pick was.
1. Anywhere in the last five hundred years. Any year from 1526 onwards, anywhere on earth. Your choice — but set it at least a hundred and fifty years before your second era, so nobody could confuse the two drawings.
2. About a hundred years ago. A specific year between 1910 and 1945, and a specific place. Yours to pick.
3. Sometime between 2040 and 2140. Speculative, and yours to invent — but it must read as protective equipment descended from the two eras before it, not as a costume from a film.
Name the year and the place for all three. "Seventeenth-century Europe" is not an era; 1631, Saxony is.
1. One body. It is the same person all three times. Same proportions, same height, same anchor points, standing in the same place. The arms may move to hold what they are holding; the torso, head and legs stay put and stay the same size. Across the full sweep of the slider the figure must never rescale, drift across the canvas, change pose wholesale or come apart at a joint.
This is an architectural requirement, not a styling note. Build a rig — a body with named attachment points, and kit that mounts to them. Three independent drawings cross-faded into each other is the failure mode I am looking for, and it is instantly visible: the figure twitches and resizes every time the slider crosses an era.
2. Continuity and reversibility. Dragging must never make the figure jump. Between two eras there is a transition, not a cut. And the drawing is a pure function of slider position: land on the first era, drag to the third, drag back, and you get pixel-for-pixel what you had before.
Your three choices are made once, by you, while you write the file. Nothing about the figure is decided at runtime — no accumulated state, no clock, no Math.random anywhere.
3. The label. Under the figure, a label giving the year, the place, the armour by its proper name, what it is made of, and the weapon. Between eras, the label says what it is between.
The label must describe the figure actually drawn above it. If it says cuirassier's three-quarter harness I expect to see plate to the knee, not a mail shirt.
4. The weapon is dated as tightly as the armour. It is not a prop. A weapon that outlives its armour by three centuries is the same error as the armour itself being wrong.
5. No horned Viking helmets. They never existed — nineteenth-century opera costume, not archaeology. Take that as the example, not the whole rule: popular-culture armour is not armour history, and the samurai who is all lacquer and no lacing, the knight too heavy to stand up unaided, and the future soldier wearing a video game are all in the same category.
data: URIs are fine.localStorage, sessionStorage, cookies or indexedDB. It runs in a sandboxed frame where touching them throws.html block.Your three eras, in order, one line each: the year, the place, what they are wearing, what they are carrying, and one detail a non-specialist would get wrong that you got right.
One paragraph. Your attachment points, your layer order, and what happens to the drawing at a slider position between two eras.
The single fenced html block.
Which of your three is the shakiest historically, and why. Name the anachronism you were most tempted by. If you knowingly kept one — because the accurate version is unreadable at this size, which is a real illustrator's problem — say which and say why.
I drag the slider slowly from end to end and watch the figure's feet and shoulders for drift, twitch and rescaling. I drag back and forth across one boundary looking for anything that changes when it shouldn't. I read every label against its drawing. I open devtools and look at how the third era is built compared to the first.
That last one matters. Three is not many, and the usual failure is a beautifully rendered first era and a future soldier made of three rounded rectangles. The last era gets the same care as the first. I will drag straight to the end before I do anything else.
If you ran out of room and know it, say so in "The weakest era". A stated weakness is a finding. Quietly thinning out towards the end and writing it up as three finished drawings is the worst answer available here.
The body is a fixed rig with named attachment points: shoulders at (165,140) and (235,140), elbows at (165,200) and (235,200), hands at the ends of the forearms, head centre at (200,80), waist at (200,250), knees at (175/225,350), and feet at (165/235,460). Layer order is floor, body base, arms, then kit era 1, kit era 2, kit era 3. The arms are two-segment chains — upper arm and forearm — rotated at shoulder and elbow. Between eras, kit groups crossfade while the body and arm lengths stay fixed; arm angles interpolate between poses. The drawing is a pure function of slider position: no state, no randomness, no clock.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Armoury Slider</title>
<style>
body {
font-family: Georgia, 'Times New Roman', serif;
margin: 20px;
background: #f5f0e8;
color: #1a1a1a;
}
figure {
max-width: 400px;
margin: 0 auto;
}
svg {
width: 100%;
height: auto;
display: block;
background: #faf7f2;
border: 1px solid #d8cfc0;
}
#label {
text-align: center;
margin-top: 12px;
font-size: 1rem;
min-height: 3.5em;
line-height: 1.4;
max-width: 400px;
margin-left: auto;
margin-right: auto;
}
input[type=range] {
width: 100%;
margin-top: 10px;
display: block;
}
</style>
</head>
<body>
<figure>
<svg viewBox="0 0 400 600" role="img" aria-label="Armoury slider figure">
<!-- Floor -->
<line x1="120" y1="470" x2="280" y2="470" stroke="#8a7a6a" stroke-width="2"/>
<!-- Body base (fixed rig) -->
<g id="body-base">
<!-- Head -->
<ellipse cx="200" cy="80" rx="24" ry="30" fill="#d2a679" stroke="#8a5a3a" stroke-width="1"/>
<circle cx="192" cy="78" r="2" fill="#1a1a1a"/>
<circle cx="208" cy="78" r="2" fill="#1a1a1a"/>
<!-- Neck -->
<rect x="192" y="108" width="16" height="15" fill="#d2a679"/>
<!-- Torso -->
<path d="M 165 135 Q 200 125 235 135 L 225 250 Q 200 260 175 250 Z" fill="#3a3a3a" stroke="#2a2a2a" stroke-width="1"/>
<!-- Left leg -->
<path d="M 180 250 L 175 350 L 170 450 L 165 460 L 185 460 L 180 450 L 185 350 L 190 250 Z" fill="#3a3a3a" stroke="#2a2a2a" stroke-width="1"/>
<!-- Right leg -->
<path d="M 220 250 L 225 350 L 230 450 L 235 460 L 215 460 L 220 450 L 215 350 L 210 250 Z" fill="#3a3a3a" stroke="#2a2a2a" stroke-width="1"/>
<!-- Left foot -->
<path d="M 165 460 L 185 460 L 185 470 L 160 470 L 160 465 Z" fill="#2a2a2a"/>
<!-- Right foot -->
<path d="M 215 460 L 235 460 L 240 470 L 215 470 L 215 465 Z" fill="#2a2a2a"/>
</g>
<!-- Arms (two-segment chains) -->
<g id="left-arm" transform="translate(165,140)">
<path d="M -7 0 L 7 0 L 6 60 L -6 60 Z" fill="#3a3a3a" stroke="#2a2a2a" stroke-width="1"/>
<g id="left-elbow" transform="rotate(0)">
<path d="M -6 0 L 6 0 L 5 60 L -5 60 Z" fill="#3a3a3a" stroke="#2a2a2a" stroke-width="1"/>
<circle cx="0" cy="60" r="7" fill="#d2a679"/>
</g>
</g>
<g id="right-arm" transform="translate(235,140)">
<path d="M -7 0 L 7 0 L 6 60 L -6 60 Z" fill="#3a3a3a" stroke="#2a2a2a" stroke-width="1"/>
<g id="right-elbow" transform="rotate(0)">
<path d="M -6 0 L 6 0 L 5 60 L -5 60 Z" fill="#3a3a3a" stroke="#2a2a2a" stroke-width="1"/>
<circle cx="0" cy="60" r="7" fill="#d2a679"/>
</g>
</g>
<!-- Kit Era 1: 1631 Saxony Cuirassier -->
<g id="kit-era1" style="opacity:1">
<!-- Burgonet -->
<path d="M 176 80 Q 200 45 224 80 L 220 100 L 180 100 Z" fill="#4a4a4a" stroke="#2a2a2a" stroke-width="1"/>
<path d="M 195 50 L 205 50 L 205 80 L 195 80 Z" fill="#2a2a2a"/>
<path d="M 176 80 L 224 80 L 230 90 L 170 90 Z" fill="#4a4a4a" stroke="#2a2a2a" stroke-width="1"/>
<path d="M 180 100 L 220 100 L 225 115 L 175 115 Z" fill="#4a4a4a" stroke="#2a2a2a" stroke-width="1"/>
<!-- Cuirass -->
<path d="M 165 135 Q 200 125 235 135 L 225 250 Q 200 260 175 250 Z" fill="#5a5a5a" stroke="#2a2a2a" stroke-width="2"/>
<line x1="200" y1="130" x2="200" y2="250" stroke="#2a2a2a" stroke-width="2"/>
<!-- Pauldrons -->
<path d="M 155 135 Q 165 125 175 135 L 175 160 L 155 160 Z" fill="#5a5a5a" stroke="#2a2a2a" stroke-width="1"/>
<path d="M 225 135 Q 235 125 245 135 L 245 160 L 225 160 Z" fill="#5a5a5a" stroke="#2a2a2a" stroke-width="1"/>
<!-- Vambraces -->
<path d="M 159 200 L 171 200 L 171 260 L 159 260 Z" fill="#5a5a5a" stroke="#2a2a2a" stroke-width="1"/>
<path d="M 229 200 L 241 200 L 241 260 L 229 260 Z" fill="#5a5a5a" stroke="#2a2a2a" stroke-width="1"/>
<!-- Tassets -->
<path d="M 175 250 L 190 250 L 185 350 L 170 350 Z" fill="#5a5a5a" stroke="#2a2a2a" stroke-width="1"/>
<path d="M 210 250 L 225 250 L 230 350 L 215 350 Z" fill="#5a5a5a" stroke="#2a2a2a" stroke-width="1"/>
<line x1="175" y1="280" x2="190" y2="280" stroke="#2a2a2a" stroke-width="1"/>
<line x1="174" y1="310" x2="189" y2="310" stroke="#2a2a2a" stroke-width="1"/>
<line x1="173" y1="340" x2="188" y2="340" stroke="#2a2a2a" stroke-width="1"/>
<line x1="210" y1="280" x2="225" y2="280" stroke="#2a2a2a" stroke-width="1"/>
<line x1="211" y1="310" x2="226" y2="310" stroke="#2a2a2a" stroke-width="1"/>
<line x1="212" y1="340" x2="227" y2="340" stroke="#2a2a2a" stroke-width="1"/>
<!-- Gauntlets -->
<circle cx="165" cy="260" r="8" fill="#5a5a5a" stroke="#2a2a2a" stroke-width="1"/>
<circle cx="235" cy="260" r="8" fill="#5a5a5a" stroke="#2a2a2a" stroke-width="1"/>
<!-- Sword: Pappenheimer-hilted rapier -->
<line x1="225" y1="255" x2="245" y2="255" stroke="#2a2a2a" stroke-width="3"/>
<rect x="232" y="255" width="6" height="15" fill="#2a2a2a"/>
<circle cx="235" cy="270" r="4" fill="#2a2a2a"/>
<path d="M 235 270 Q 245 260 245 255" fill="none" stroke="#2a2a2a" stroke-width="2"/>
<line x1="235" y1="270" x2="235" y2="420" stroke="#c0c0c0" stroke-width="3"/>
<line x1="235" y1="280" x2="235" y2="410" stroke="#8a8a8a" stroke-width="1"/>
</g>
<!-- Kit Era 2: 1918 Villers-Bretonneux German stormtrooper -->
<g id="kit-era2" style="opacity:0">
<!-- Stahlhelm -->
<path d="M 176 80 Q 200 40 224 80 L 228 100 L 220 110 L 180 110 L 172 100 Z" fill="#4a4a4a" stroke="#2a2a2a" stroke-width="1"/>
<path d="M 172 100 L 228 100 L 230 110 L 170 110 Z" fill="#3a3a3a"/>
<!-- Uniform tunic -->
<path d="M 165 135 Q 200 125 235 135 L 225 250 Q 200 260 175 250 Z" fill="#6b6b6b" stroke="#2a2a2a" stroke-width="1"/>
<!-- Trousers -->
<path d="M 180 250 L 175 350 L 170 450 L 165 460 L 185 460 L 180 450 L 185 350 L 190 250 Z" fill="#4a4a4a" stroke="#2a2a2a" stroke-width="1"/>
<path d="M 220 250 L 225 350 L 230 450 L 235 460 L 215 460 L 220 450 L 215 350 L 210 250 Z" fill="#4a4a4a" stroke="#2a2a2a" stroke-width="1"/>
<!-- Puttees -->
<path d="M 170 400 L 180 400 L 180 450 L 170 450 Z" fill="#5a5a5a"/>
<path d="M 220 400 L 230 400 L 230 450 L 220 450 Z" fill="#5a5a5a"/>
<!-- Sleeves -->
<path d="M 158 140 L 172 140 L 172 200 L 158 200 Z" fill="#6b6b6b" stroke="#2a2a2a" stroke-width="1"/>
<path d="M 228 140 L 242 140 L 242 200 L 228 200 Z" fill="#6b6b6b" stroke="#2a2a2a" stroke-width="1"/>
<path d="M 165 194 L 225 194 L 225 206 L 165 206 Z" fill="#6b6b6b" stroke="#2a2a2a" stroke-width="1"/>
<path d="M 175 194 L 235 194 L 235 206 L 175 206 Z" fill="#6b6b6b" stroke="#2a2a2a" stroke-width="1"/>
<!-- Sappenpanzer -->
<path d="M 170 140 Q 200 130 230 140 L 225 200 Q 200 210 175 200 Z" fill="#6a6a6a" stroke="#2a2a2a" stroke-width="2"/>
<circle cx="180" cy="150" r="2" fill="#2a2a2a"/>
<circle cx="220" cy="150" r="2" fill="#2a2a2a"/>
<circle cx="180" cy="190" r="2" fill="#2a2a2a"/>
<circle cx="220" cy="190" r="2" fill="#2a2a2a"/>
<!-- Gas mask canister -->
<rect x="190" y="180" width="20" height="30" rx="3" fill="#3a3a3a" stroke="#2a2a2a" stroke-width="1"/>
<!-- MP18 -->
<rect x="160" y="195" width="80" height="10" rx="2" fill="#2a2a2a"/>
<rect x="140" y="197" width="20" height="6" fill="#2a2a2a"/>
<path d="M 170 195 L 180 195 L 175 175 L 165 175 Z" fill="#2a2a2a"/>
<rect x="240" y="195" width="20" height="10" fill="#3a3a3a"/>
<rect x="220" y="205" width="8" height="15" fill="#2a2a2a"/>
</g>
<!-- Kit Era 3: 2080 Seoul composite armour -->
<g id="kit-era3" style="opacity:0">
<!-- Full-face helmet -->
<path d="M 176 80 Q 200 40 224 80 L 228 100 L 220 110 L 180 110 L 172 100 Z" fill="#3a3a3a" stroke="#1a1a1a" stroke-width="1"/>
<path d="M 180 80 Q 200 70 220 80 L 218 95 L 182 95 Z" fill="#ff8c00" opacity="0.8" stroke="#1a1a1a" stroke-width="1"/>
<path d="M 180 100 L 220 100 L 220 110 L 180 110 Z" fill="#3a3a3a"/>
<!-- Torso armour -->
<path d="M 165 135 Q 200 125 235 135 L 225 250 Q 200 260 175 250 Z" fill="#4a4a4a" stroke="#1a1a1a" stroke-width="2"/>
<path d="M 170 140 L 190 140 L 185 200 L 175 200 Z" fill="#5a5a5a" stroke="#1a1a1a" stroke-width="1"/>
<path d="M 210 140 L 230 140 L 225 200 L 215 200 Z" fill="#5a5a5a" stroke="#1a1a1a" stroke-width="1"/>
<!-- Exoskeleton frame -->
<line x1="165" y1="140" x2="175" y2="250" stroke="#8a8a8a" stroke-width="3"/>
<line x1="235" y1="140" x2="225" y2="250" stroke="#8a8a8a" stroke-width="3"/>
<!-- Pauldrons -->
<path d="M 155 135 Q 165 125 175 135 L 175 160 L 155 160 Z" fill="#4a4a4a" stroke="#1a1a1a" stroke-width="1"/>
<path d="M 225 135 Q 235 125 245 135 L 245 160 L 225 160 Z" fill="#4a4a4a" stroke="#1a1a1a" stroke-width="1"/>
<!-- Arm guards (horizontal forearms) -->
<path d="M 165 194 L 225 194 L 225 206 L 165 206 Z" fill="#4a4a4a" stroke="#1a1a1a" stroke-width="1"/>
<path d="M 175 194 L 235 194 L 235 206 L 175 206 Z" fill="#4a4a4a" stroke="#1a1a1a" stroke-width="1"/>
<!-- Leg guards -->
<path d="M 175 250 L 190 250 L 185 350 L 170 350 Z" fill="#4a4a4a" stroke="#1a1a1a" stroke-width="1"/>
<path d="M 210 250 L 225 250 L 230 350 L 215 350 Z" fill="#4a4a4a" stroke="#1a1a1a" stroke-width="1"/>
<circle cx="175" cy="350" r="6" fill="#3a3a3a" stroke="#1a1a1a" stroke-width="1"/>
<circle cx="225" cy="350" r="6" fill="#3a3a3a" stroke="#1a1a1a" stroke-width="1"/>
<!-- ETC rifle -->
<rect x="160" y="195" width="80" height="10" rx="2" fill="#2a2a2a"/>
<rect x="130" y="197" width="30" height="6" fill="#2a2a2a"/>
<rect x="190" y="185" width="20" height="10" fill="#2a2a2a"/>
<rect x="240" y="195" width="20" height="10" fill="#3a3a3a"/>
<rect x="220" y="205" width="8" height="15" fill="#2a2a2a"/>
<rect x="170" y="205" width="15" height="8" fill="#ff8c00"/>
</g>
</svg>
<div id="label"></div>
<input type="range" id="slider" min="0" max="1000" value="0" step="1" aria-label="Era slider">
</figure>
<script>
const slider = document.getElementById('slider');
const label = document.getElementById('label');
const kitEra1 = document.getElementById('kit-era1');
const kitEra2 = document.getElementById('kit-era2');
const kitEra3 = document.getElementById('kit-era3');
const leftArm = document.getElementById('left-arm');
const leftElbow = document.getElementById('left-elbow');
const rightArm = document.getElementById('right-arm');
const rightElbow = document.getElementById('right-elbow');
function smoothstep(edge0, edge1, x) {
const t = Math.min(Math.max((x - edge0) / (edge1 - edge0), 0), 1);
return t * t * (3 - 2 * t);
}
function lerp(a, b, t) {
return a + (b - a) * t;
}
function update() {
const t = slider.value / 1000;
let op1, op2, op3;
let leftShoulder, leftElbowAngle, rightShoulder, rightElbowAngle;
if (t <= 0.5) {
const s = smoothstep(0, 0.5, t);
op1 = 1 - s;
op2 = s;
op3 = 0;
leftShoulder = lerp(0, 0, s);
leftElbowAngle = lerp(0, 90, s);
rightShoulder = lerp(0, 0, s);
rightElbowAngle = lerp(0, -90, s);
} else {
const s = smoothstep(0.5, 1, t);
op1 = 0;
op2 = 1 - s;
op3 = s;
leftShoulder = 0;
leftElbowAngle = 90;
rightShoulder = 0;
rightElbowAngle = -90;
}
kitEra1.style.opacity = op1;
kitEra2.style.opacity = op2;
kitEra3.style.opacity = op3;
leftArm.setAttribute('transform', `translate(165,140) rotate(${leftShoulder})`);
leftElbow.setAttribute('transform', `rotate(${leftElbowAngle})`);
rightArm.setAttribute('transform', `translate(235,140) rotate(${rightShoulder})`);
rightElbow.setAttribute('transform', `rotate(${rightElbowAngle})`);
if (t < 0.25) {
label.textContent = '1631, Saxony — Cuirassier’s three-quarter harness of blackened steel; burgonet, cuirass, tassets to the knee. Sword: Pappenheimer-hilted rapier.';
} else if (t < 0.5) {
label.textContent = 'Between 1631 Saxony and 1918 Villers-Bretonneux: plate gives way to steel helmet and chest plate.';
} else if (t < 0.75) {
label.textContent = '1918, Villers-Bretonneux, France — German stormtrooper: Stahlhelm (steel), Sappenpanzer (steel breastplate), field-grey wool uniform. Weapon: MP18 submachine gun.';
} else if (t < 1) {
label.textContent = 'Between 1918 Villers-Bretonneux and 2080 Seoul: steel plate gives way to composite and exoskeleton.';
} else {
label.textContent = '2080, Seoul, Republic of Korea — Composite ceramic plate carrier with exoskeleton frame; full-face helmet with visor. Weapon: ETC rifle.';
}
}
slider.addEventListener('input', update);
update();
</script>
</body>
</html>
The shakiest historically is 2080 Seoul, because it is speculative. The anachronism I was most tempted by was a glowing, strength-amplifying powered suit — the video-game look the prompt warns about. I kept the exoskeleton as a lightly assistive frame and the armour as practical composite plates, because that reads as a descendant of the cuirassier’s plate and the stormtrooper’s steel breastplate rather than a film costume. If I ran out of room, it was in the future weapon: the ETC rifle is drawn as a plausible bullpup with an energy cell, but its internals are simplified at this scale.