main
Scan-O-Clock: the joke works, the lesson stings, build the ramp first
My clock will not tell me the time, it wants me to scan it like a supermarket avocado that failed kindergarten. It’s an ESP32-C3 with a tiny OLED that refuses to show digits, so it grabs NTP, formats…
By Doc ·
My clock will not tell me the time, it wants me to scan it like a supermarket avocado that failed kindergarten. It’s an ESP32-C3 with a tiny OLED that refuses to show digits, so it grabs NTP, formats a string, turns it into a QR code, and makes me point my phone at my own nightstand to learn whether I should be asleep or apologizing. Which is objectively funny, because the phone doing the scanning already knows the time, which is why the irony lands like a gentle pie to the face. The joke is on the builder, and, sorry, it splashes on us too, because we keep treating friction like a feature when it shows up in a shiny hat and murmurs buzzwords. The whole circus has second thoughts, to the minute.
The gag works because the glue is familiar. Drop in ricmoo’s Arduino QRCode library, older by GitHub fashion cycles and still solid, or use Nayuki’s generator, which reads like a pocket textbook and compiles on a potato. Same recipe either way, encode the time string, paint pixels, done. The trick isn’t the code, it’s doing it on the device. Generate live, do not paste a static bitmap into a header like it’s 2011 and we are printing T-shirts for a family reunion we regret. Static dies the minute the content moves. Time moves. You get the idea.
Do it properly and you learn things you did not plan to learn. You meet the bones of a QR payload, you pick an error correction level that fits a postage stamp screen without melting into gray soup, you slide the version up or down until modules land clean, and you juggle memory because the ESP32-C3 is spry but not a workstation. You also rediscover light as a bridge, the low tech kind that keeps working when Bluetooth throws a tantrum. No pairing, no sockets, just photons and a camera. One blink moves structured data from A to B, quick in the field, weirdly sturdy when everything else wants your password, your location, and a notarized soul. Optical codes are smoke signals with spreadsheets inside, ridiculous until you realize the format guarantees the message and the camera is the interpreter you are already carrying.
So why care about a prank clock that makes you feel like a cashier. Because we already live like this, just with worse jokes. Restaurants swapped menus for little squares, cities turned meters into little squares, public counters traded help desks for little squares that nudge you into apps and analytics. It is cute until someone cannot eat without a smartphone, cannot park without downloading a vendor’s app and signing a novella, or cannot read the thing because glare and low vision make a perfect storm. People who do not want to point a camera at every surface get pushed aside, and everyone pays with minutes that drip into someone else’s dashboard. Winners are the app layers skimming behavior and the vendors charging rent on access. The rest of us supply the taps and the patience, plus the data trail we did not mean to leave.
Here is the break point, the one worth underlining with a bright marker. Look at the dependency chain on this clock, then squint at your city hall. WiFi up, NTP reachable, library behaving, OLED not sulking, phone decoder cooperating, only then do you get the minute. Lose a piece and you own a very determined coaster. That is charming on a Saturday, ugly when the same stack sits between a person and a bus pass, or a clinic check in, or a school lunch. QR is a great shortcut, it turns into a toll when it is the only door, and tolls get expensive fastest for the people who cannot reroute. Real talk versus performance art, actual fixes give you multiple paths, the cute square is optional, not a lock on the front of daily life.
Meanwhile, the silly build keeps teaching. Keep generation on device, then change the payload to what you actually need outside the lab. Config blob. Contact card. WiFi creds. A signed token that a kiosk can verify without phoning home. Use ECC M or Q so a smudge does not ruin your day, try version 2 or 3 so it stays crisp on a 128 by 64 OLED, and time the decode on a couple phones before you claim victory. Scan in good light and in cave mode, hold still and shake it like a raccoon with a latte, because real life does not sign your test plan, it doodles on it. The laugh lands once, the technique pays out a dozen times, often when you are tired and the network is pretending it lives in a different zip code.
There is a social contract tucked inside the joke, too. Build for access like you mean it. Start with dignity, then speed. Offer a way to complete the task without a modern camera, then add the square for people who want it. Print a short code near the square, post a human readable fallback, keep data local when you can, because every round trip to someone else’s server is a chance to break and a chance to be watched. If your design needs a camera to read the hour, maybe it is not a clock, it is a mirror, and that is fine, just admit what you are building so people can opt in instead of getting drafted. Here is how you tell the difference between fixing and posturing, if your system gets easier when the network flakes, you built a tool, if it gets crueler, you built a funnel for somebody else’s KPI.
And yes, leave yourself mercy. Log failures on the device. Flip to a tiny text mode when rendering borks. Keep the time visible in plain characters somewhere small, because redundancy is not waste, it is kindness. Your future self is a gremlin with cold hands and low blood sugar, treat them with respect. Then enjoy the absurdity, because it can be both a joke and a tool, a small stunt that teaches your hands something that matters later. Engineering is a long tape of pratfalls and patches, we laugh, then we ship the version that keeps working when the WiFi sulks, when NTP naps, and when your phone decides to be helpful at the worst possible moment. Which it will, naturellement.
The quiet warning under the humor sticks with me, each time we outsource a basic action to a screen we do not control, we agree to stairs that only some of us can climb. Build the ramp first, then the escalator, then the slide for the folks who like speed. QR can be the slide. It should never be the stairs. Now, if you will excuse me, I have to scan my bedside table to find out whether I am late or just extremely early. Again.
--Doc (yeah I said it!)
find me anywhere under @DocAtCDI
Tags: Hardware Hacking, Accessibility, UX Design, Privacy and Data Minimization, Civic Tech
https://thesixthlense.com/article/scan-o-clock-the-joke-works-the-lesson-stings-build-the-ramp-first · The Sixth Lense