A 1950s-style perceptron panel: photocells, a rat's nest of wires, dials that learn.
A working panel in the spirit of Frank Rosenblatt's 1958 Mark I. Printed cards with an A or a B, at a random size, slant and position, are projected onto a 20 by 20 grid of photocells. A plugboard wires each of 64 association units to 10 random photocells, half excitatory and half inhibitory, and a unit fires when its excitation beats its inhibition; that wiring is random and never changes. The response unit sums the firing units through 64 potentiometers and lights the A bulb when the sum is positive. Learning is Rosenblatt's error-correction rule: after a wrong answer, motors turn every potentiometer whose unit was firing one notch toward the right letter, and the strip chart inks the rolling accuracy as the machine improves. Turn up the jitter and the fixed random features struggle with letters that wander across the retina, the single-layer limit Minsky and Papert made famous.
Try it. Draw on the photocells (right-drag erases), then press Teach A or Teach B to label it; the machine answers first and only learns when it is wrong. New Card projects a printed letter, Clear wipes the grid, the Jitter knob (drag, or the arrow keys) sets how much the cards vary, and Reset zeroes the weights. Keys: A, B, N or Space, C, R.
Paste this into Claude Code, Codex or any coding agent to get a simple version running, then take it wherever you like.
Build a working replica of an early perceptron, styled as a 1950s hardware panel, with JavaScript and the HTML canvas element. Put everything in a single index.html file with no libraries or build step, so I can open it directly in a browser.
Start simple:
- Make a canvas that fills the window, stays sharp on high-DPI screens (scale by devicePixelRatio), and resizes with the window. Use a dark panel color for the background.
- Draw a 20x20 grid of photocells on the left. Let me paint cells on and off with the mouse.
- Create 64 association units. Wire each one to 10 random photocells, half with weight +1 and half with weight -1, and make it fire (output 1) when its weighted sum is at least 1. This wiring is fixed forever.
- Give a single response unit one weight per association unit, starting at zero. Its answer is A if the weighted sum of the firing units is positive, otherwise B. Show the answer with two lamps labelled A and B.
- Add Teach A and Teach B buttons. When pressed, check the answer; only if it is wrong, add +1 (for A) or -1 (for B) to the weight of every association unit that was firing. This is Rosenblatt's perceptron rule.
Once that works, make it beautiful:
- Draw each weight as a round potentiometer knob whose pointer turns smoothly toward the new value, like a motor driving it.
- Draw the fixed wiring as curved cables from the photocells to the knobs, and make cables from lit cells glow.
- Add a New Card button that draws a letter A or B with simple strokes at a random size, position and slant, and projects it onto the photocells by measuring how much of each cell the strokes cover.
Explain the key ideas in short code comments. When you're done, tell me how to open it and suggest three directions I could take it next, such as an autopilot that teaches hundreds of cards while a strip chart plots accuracy, a jitter control that exposes the limits of a single layer, or more letters with one response unit per letter.