frontpage.
newsnewestaskshowjobs

Made with ♥ by @iamnishanth

Open Source @Github

Qwen3-Coder: Agentic coding in the world

https://qwenlm.github.io/blog/qwen3-coder/
275•danielhanchen•4h ago•93 comments

Why you can't color calibrate deep space photos

https://maurycyz.com/misc/cc/
36•LorenDB•1h ago•18 comments

More than you wanted to know about how Game Boy cartridges work

https://abc.decontextualize.com/more-than-you-wanted-to-know/
186•todsacerdoti•6h ago•18 comments

Android Earthquake Alerts: A global system for early warning

https://research.google/blog/android-earthquake-alerts-a-global-system-for-early-warning/
179•michaefe•7h ago•57 comments

Swift-erlang-actor-system

https://forums.swift.org/t/introducing-swift-erlang-actor-system/81248
224•todsacerdoti•6h ago•44 comments

Algorithms for Modern Processor Architectures

https://lemire.github.io/talks/2025/sea/sea2025.html
48•matt_d•2h ago•4 comments

We built an air-gapped Jira alternative for regulated industries

https://plane.so/blog/everything-you-need-to-know-about-plane-air-gapped
145•viharkurama•6h ago•91 comments

Why does raising the retirement age hurt young people?

https://www.governance.fyi/p/why-does-raising-the-retirement-age
23•daveland•1h ago•23 comments

A media company demanded a license fee for an Open Graph image I used

https://alistairshepherd.uk/writing/open-graph-licensing/
77•cheeaun•1h ago•33 comments

Subliminal learning: Models transmit behaviors via hidden signals in data

https://alignment.anthropic.com/2025/subliminal-learning/
120•treebrained•7h ago•30 comments

Don't animate height

https://www.granola.ai/blog/dont-animate-height
286•birdculture•3d ago•164 comments

TapTrap: Animation‑Driven Tapjacking on Android

https://taptrap.click/
11•Bogdanp•1h ago•0 comments

Comparing the Glove80 and Maltron Keyboards

https://tratt.net/laurie/blog/2025/comparing_the_glove80_and_maltron_keyboards.html
36•ltratt•3h ago•17 comments

TODOs aren't for doing

https://sophiebits.com/2025/07/21/todos-arent-for-doing
266•todsacerdoti•12h ago•162 comments

Hegel Dust

https://www.bookforum.com/print/3201/hegel-dust-62209
8•pepys•1d ago•0 comments

Firebender (YC W24) Is Hiring

https://www.ycombinator.com/companies/firebender/jobs/yisDXr5-founding-engineer-generalist
1•kevo1ution•4h ago

CAMARA: Open-source API for telecom and 5G networks

https://www.gsma.com/solutions-and-impact/technologies/networks/operator-platform-hp/camara-2/
5•teleforce•1h ago•0 comments

Show HN: Phind.design – Image editor & design tool powered by 4o / custom models

https://phind.design
30•rushingcreek•8h ago•12 comments

Gemini North telescope discovers long-predicted stellar companion of Betelgeuse

https://www.science.org/content/article/betelgeuse-s-long-predicted-stellar-companion-may-have-been-found-last
101•layer8•9h ago•26 comments

Show HN: Compass CNC – Open-source handheld CNC router

https://www.compassrouter.com
108•camchaney•3d ago•22 comments

NonRAID – fork of unRAID array kernel module

https://github.com/qvr/nonraid
50•qvr•5h ago•37 comments

Font Comparison: Atkinson Hyperlegible Mono vs. JetBrains Mono and Fira Code

https://www.anthes.is/font-comparison-review-atkinson-hyperlegible-mono.html
177•maybebyte•11h ago•120 comments

I watched Gemini CLI hallucinate and delete my files

https://anuraag2601.github.io/gemini_cli_disaster.html
79•anuraag2601•7h ago•96 comments

Tiny Code Reader: a $7 QR code sensor

https://excamera.substack.com/p/tiny-code-reader-a-7-qr-code-sensor
112•jamesbowman•9h ago•33 comments

Fun with gzip bombs and email clients

https://www.grepular.com/Fun_with_Gzip_Bombs_and_Email_Clients
111•bundie•6h ago•35 comments

Gitea Private, Fast, Reliable DevOps Platform

https://about.gitea.com/
26•Bluestein•2d ago•23 comments

My favourite German word

https://vurt.org/articles/my-favourite-german-word/
60•taubek•3d ago•56 comments

OSS Rebuild: open-source, rebuilt to last

https://security.googleblog.com/2025/07/introducing-oss-rebuild-open-source.html
138•tasn•12h ago•46 comments

Many lung cancers are now in nonsmokers

https://www.nytimes.com/2025/07/22/well/lung-cancer-nonsmokers.html
101•alexcos•10h ago•127 comments

First Hubble telescope images of interstellar comet 3I/ATLAS

https://bsky.app/profile/astrafoxen.bsky.social/post/3luiwnar3j22o
85•jandrewrogers•9h ago•20 comments
Open in hackernews

1KB JavaScript Numbers Station

https://shkspr.mobi/blog/2025/07/1kb-js-numbers-station/
44•blenderob•11h ago

Comments

MobiusHorizons•11h ago
Cool concept, but doesn’t seem to work on iOS safari
leeoniya•10h ago
> but doesn’t seem to work on iOS safari

if i had a nickel...

thenthenthen•9h ago
Isn't every browser on iOS technically Safari under the hood? Although Mozillas discontinued XRViewer app/browser does def expose more functionality
edent•10h ago
I've had feedback that it should work on Firefox for iOS.
gkbrk•10h ago
Also not working on Brave on Linux for me.
edent•10h ago
Interesting, thanks. I tested it working on Chromium - but didn't test other Chrome based browsers.
tromp•10h ago
Working on my MacOSX Brave...
mg•9h ago
No sound at all and the console shows lots of these messages:

    24:4 Uncaught TypeError: Cannot read properties of undefined (reading 'lang')
    at 24:4:132
Which seems to be this line:

    m.lang = e[(Math.random() * e.length) | 0]["lang"];
Another observation: You write:

    m = new SpeechSynthesisUtterance;
    m.text = "Hello";
    speechSynthesis.speak(m);

    Run that JS and your computer will speak to you!
But when I paste those 3 lines into the console, that also does not produce any sound here. I tried in Chromium and Firefox, both on Linux.
genewitch•9h ago
moved text to top-level
netsharc•7h ago
Seems like you need to install additional components: https://askubuntu.com/questions/761975/chromium-is-not-gener...

Question/answers from 2016, so might be misleading...

LazarSRB•9h ago
funny and creepy
genewitch•9h ago
works on Firefox, on windows 11.

however even when it is working, it's not really like a numbers station. For a start, it needs varying static and clicks. Secondly, numbers stations don't generally say "seven hundred and thirty four", they generally say "seven. three. four." the random words repeated sometimes are a nice touch, though. And i like the idea of grabbing words from an internal list in the way the author did it. I wouldn't have thought of that, probably.

some numbers stations that i personally archived:

  https://soundcloud.com/djoutcold/31-may-2014-170948-19008500-mhz
  https://soundcloud.com/djoutcold/uvb-76-aug-23-2010-9-32ampst
  https://nextcloud.projectftm.com/index.php/s/unid-pizza-numbers [0]
here's one that sounds like a numbers station but can be argued is not, as the meaning is rather clear (if my memory serves):

  https://soundcloud.com/djoutcold/sdrsharp-20150825-020508z-4368khz-af
[0] i think this one is a joke; this one is the most representative of what numbers stations used to be like, though. Whoever made it really knew what they were doing, even though they used their knowledge to be a bit cheeky. I edited it because the music would blow out your speakers originally.

additionally, i know the 19008500-mhz is mislabeled, it should be 19.008500-mhz or instead of "mhz" just "hz"

edent•8h ago
I'd love it if you forked my code and managed to fit a full numbers station into 1024KB.
genewitch•6h ago
my kid wanted it to say point between the groupings, which is the speech engine, so this may sound different depending on your browser:

  <!DOCTYPE html><html><body><button onclick="f()">Start</button><script>
  function f(){with(window){
  a=new AudioContext;b=a.createBuffer(1,c=2*a.sampleRate,a.sampleRate);d=b.getChannelData(0);
  for(i=0;i<c;i++)d[i]=(Math.random()*2-1)*.4;
  e=a.createBufferSource();e.buffer=b;e.loop=1;g=a.createGain();g.gain.value=.05;
  e.connect(g).connect(a.destination);e.start();
  const l=n=>((n.match(/[A-Z]/g)||[]).length==1&&(n[0].match(/[A-Z]/g)||[]).length==1);
  setInterval(()=>{s=Object.getOwnPropertyNames(globalThis).filter(l).sort(()=>.5-Math.random())[0];
  if(Math.random()>.3){
    n=String(Math.ceil(Math.random()*1e4).toString().padStart(4,'0'));
    s=n[0]+'. '+n[1]+'. point. '+n[2]+'. '+n[3]+'.';
  }
  m=new SpeechSynthesisUtterance;m.text=s;
  v=speechSynthesis.getVoices();m.lang=v[(Math.random()*v.length)|0].lang;
  m.rate=Math.random();m.pitch=Math.random()*2;speechSynthesis.speak(m);},866);
  //m.rate=1.7;m.pitch=2;speechSynthesis.speak(m);},866);
  }}</script></body></html>
the comment at the end can be switched with the preceeding line so it sounds like he wanted it to (high pitched and fast, please) <1kb

and i got something stuck in my craw about noise so here's one with more accurate noise:

  <!DOCTYPE html><html><body><button onclick="f()">Start</button><script>
  function f(){with(window){
  a=new AudioContext;
  g=a.createGain();g.gain.value=.05; 
  h=a.createScriptProcessor(256,1,1);p=0;
  h.onaudioprocess=e=>{
    b=e.outputBuffer.getChannelData(0);
    for(i=0;i<b.length;i++)b[i]=p+=(Math.random()*2-1)/10;
  };
  h.connect(g).connect(a.destination);
  const l=n=>((n.match(/[A-Z]/g)||[]).length==1&&(n[0].match(/[A-Z]/g)||[]).length==1);
  setInterval(()=>{
    s=Object.getOwnPropertyNames(globalThis).filter(l).sort(()=>.5-Math.random())[0];
    if(Math.random()>.3){
      n=String(Math.ceil(Math.random()*1e4).toString().padStart(4,'0'));
      s=n[0]+'. '+n[1]+'. point. '+n[2]+'. '+n[3]+'.';
    }
    m=new SpeechSynthesisUtterance;m.text=s;
    v=speechSynthesis.getVoices();m.lang=v[(Math.random()*v.length)|0].lang;
    m.rate=Math.random();m.pitch=Math.random()*2;speechSynthesis.speak(m);
  },866);
  }}</script></body></html>
apologies to the HN servers for using 2kb to display these

i don't know javascript so apologies if i messed anything up (because it will eventually pop and click which is extremely accurate to numbers station reception but also crashes the page - audio stops.)

netsharc•7h ago
It kind of irks me that the idea was neat, but the attempt was seriously lacking.
genewitch•5h ago
i replied in this thread with 855 bytes that do it a little closer to what i expected
netsharc•5h ago
FYI, having "." after numbers in German turn them to ordinal numerals (i.e. "4." becomes "4th"). I had to change them to commas to make it more familiar to the number stations recordings I've heard of.
genewitch•4h ago
so "neun. vier. punkt. sieben. drei."

doesn't mean 94 . 73 (or 94,73)? i considered using "dot". I'd have to listen to a german numbers station that uses a splitter like "point" or "dot"

what i'm asking is if you have an ip address like 4.2.2.2 how would you read that over the phone, in german?

also i made a lot of edits to fix issues during the edit window to the two versions i posted

edent•5h ago
Thanks for your support, I really appreciate it :-)
genewitch•4h ago
hey i should also apologize. I am really trying to not be so nit-picky. You had the idea and executed it in less than 1kb. I really meant to just kinda educate about numbers stations in general and i know it came off in a way that was unintentional.

and i used copilot because i am not a programmer, i just wanted to see if it was, in fact, possible to add noise and fix the way the numbers were read in 1kb. and i kept your code essentially the same, only adding stuff to split the numbers up closer to how they sound on RF.

so, sorry!

sterlind•2h ago
what's the meaning of the one you said is rather clear?
simonw•8h ago
This post inspired me to build (OK, vibe code) this little tool for playing with the speech synthesis browser API: https://tools.simonwillison.net/speech-synthesis

Commits / prompts: https://github.com/simonw/tools/commits/main/speech-synthesi...

tantalor•8h ago
Something is wrong with the voice selector. It does not actually change the voice.
simonw•8h ago
Which browser/OS? I've only tested on mobile Safari.
tantalor•7h ago
Android Chrome. It seems to be stuck with whatever the last random voice used by the numbers station demo and can't be changed.

Desktop ChromeOS works fine.