Recent submissions

Comment · 2 months ago
The best phone holder is the tape ring itself. Just place the tape ring on the table and slide your phone inside. It's very convenient and stable. My wife taught me this life hack.
Comment · 2 months ago
My bad, I used Claude to create the description. The thing is, I'm really bad at presenting a project properly. But thanks for the criticism, I'll take it into account next time.
Comment · 2 months ago
The camera watches your palms. Move them apart and it gets louder. Bring them together and it goes quiet. Raise them both and the note goes up. There is a sound wave strung between your hands, and it slackens as they close.

Two palms give you four numbers, and one of them is best left alone. Their mean height is the pitch. The distance between them is the volume. The angle of the line joining them sat unused for months and is now the vibrato: see-saw your hands and the note begins to sing. The fourth is where the pair sits horizontally, and it stays free on purpose, so that nobody is pinned to one spot in front of the camera. Their apparent size is a fifth thing and not a position at all; it moves a lowpass and a reverb send, so leaning back makes the room bigger. The angle is independent of the distance, so the vibrato leaves the volume alone, and the string drawn between the hands is already a picture of it.

It began as a phone toy — tilt left and right for volume, forward and back for pitch. The camera came later and turned out to be the better instrument. The phone mode is still there.

No video leaves your machine. The hand tracking is MediaPipe's Hand Landmarker compiled to WASM, running on your own GPU. The tracker and its model are fetched once from a CDN, about 8 MB, and after that you can unplug the network and it still plays.

Most of the work was not the sound. It was the hand that disappears. MediaPipe finds a palm by its plane, so it loses one when you turn your wrist edge-on, or when the room is dark and the webcam falls to fifteen frames a second and a moving hand becomes a smear. At first I held the note for a second after a hand vanished. People said it lagged. I cut it to half a second. People said the sound kept dropping out. Both were right. Now the hold depends on where the hand was last seen: near the edge of the frame a person has genuinely taken their hand away, so 400 ms; deep in frame nobody teleports and the detector merely blinked, so a full second, and no one hears the gap.

The other stubborn thing was the bass. A phone speaker produces nothing below roughly 150 Hz, and raising the gain there does nothing at all — I tried ten decibels and heard silence. So the bottom octave is split off, saturated gently to breed harmonics, and its fundamental is then filtered away. The ear reconstructs a pitch it never heard.

That trick then caused a bug I misread for a week. A tester said the pitch moved in steps in the phone mode, worst in the bass, and guessed it was a frame rate problem. It was not. The phone reports its tilt angle quantised to something close to a whole degree, and I had packed six octaves into eighty degrees of tilt — so one tick of the sensor was most of a semitone. It was audible in the bass specifically because of the exciter: at 70 Hz the ear resolves pitch poorly, but the exciter re-voices the note through harmonics at two and three hundred hertz, which is exactly where the ear resolves cents best. So the fix was not the sound and not the frame rate. It was a narrower range, a wider sweep, and reading the sensor at frame rate instead of once per event.

One HTML file, no build step, MIT: https://github.com/gurov/theremin

Comment · 3 years ago
Science fiction story
Comment · 3 years ago
Imagine this: you are an ordinary frontend developer. When you open your mailbox you found a message — tomorrow DevOps team will make an optimization with Kubernetes. You are experienced developer and you know that environment operation test might go sideways. Test environment is crucial for your job as frontend developer and you don’t want to miss a whole day on a job, so there are two possible solutions present:

1. Setup all microservices on your laptop;

2. Prepare mocks for API.

I will describe how to mock REST API request via Yakbak.

Comment · 5 years ago
I'm tired of different stupid RSS clients and I created own Stupid RSS Reader.

Features:

Stupid RSS is Progressive Web App; You can install it to your smartphone; Very simple interface; Offline mode; All user data are stored locally only (IndexedDB); The last 99 posts are stored; Deletion occurs after downloading new ones; Open source.

Proxy for RSS: The application must use the proxy rss2json.com because CORS restrictions on cross-site requests.

Comment · 7 years ago
Comment · 7 years ago
Hi, HN! I'm tired of different stupid RSS clients and I created own Stupid RSS Reader.

Features: * Stupid RSS is Progressive Web App * You can install it to your smartphone * Very simple interface * Offline mode * All user data are stored locally only * Posts are stored for 30 days. Deletion occurs after downloading new ones * Open source

Live from the official Hacker News API

A modern reader for Hacker News · SvelteKit + Skeleton