frontpage.
newsnewestaskshowjobs

Made with ♥ by @iamnishanth

Open Source @Github

fp.

OpenCiv3: Open-source, cross-platform reimagining of Civilization III

https://openciv3.org/
568•klaussilveira•10h ago•160 comments

The Waymo World Model

https://waymo.com/blog/2026/02/the-waymo-world-model-a-new-frontier-for-autonomous-driving-simula...
885•xnx•16h ago•538 comments

How we made geo joins 400× faster with H3 indexes

https://floedb.ai/blog/how-we-made-geo-joins-400-faster-with-h3-indexes
89•matheusalmeida•1d ago•20 comments

What Is Ruliology?

https://writings.stephenwolfram.com/2026/01/what-is-ruliology/
16•helloplanets•4d ago•8 comments

Unseen Footage of Atari Battlezone Arcade Cabinet Production

https://arcadeblogger.com/2026/02/02/unseen-footage-of-atari-battlezone-cabinet-production/
16•videotopia•3d ago•0 comments

Show HN: Look Ma, No Linux: Shell, App Installer, Vi, Cc on ESP32-S3 / BreezyBox

https://github.com/valdanylchuk/breezydemo
195•isitcontent•10h ago•24 comments

Monty: A minimal, secure Python interpreter written in Rust for use by AI

https://github.com/pydantic/monty
197•dmpetrov•11h ago•88 comments

Show HN: I spent 4 years building a UI design tool with only the features I use

https://vecti.com
305•vecti•13h ago•136 comments

Microsoft open-sources LiteBox, a security-focused library OS

https://github.com/microsoft/litebox
352•aktau•17h ago•173 comments

Sheldon Brown's Bicycle Technical Info

https://www.sheldonbrown.com/
348•ostacke•16h ago•90 comments

Delimited Continuations vs. Lwt for Threads

https://mirageos.org/blog/delimcc-vs-lwt
20•romes•4d ago•2 comments

Hackers (1995) Animated Experience

https://hackers-1995.vercel.app/
450•todsacerdoti•18h ago•228 comments

Dark Alley Mathematics

https://blog.szczepan.org/blog/three-points/
78•quibono•4d ago•16 comments

PC Floppy Copy Protection: Vault Prolok

https://martypc.blogspot.com/2024/09/pc-floppy-copy-protection-vault-prolok.html
50•kmm•4d ago•3 comments

Show HN: If you lose your memory, how to regain access to your computer?

https://eljojo.github.io/rememory/
248•eljojo•13h ago•150 comments

An Update on Heroku

https://www.heroku.com/blog/an-update-on-heroku/
384•lstoll•17h ago•260 comments

Zlob.h 100% POSIX and glibc compatible globbing lib that is faste and better

https://github.com/dmtrKovalenko/zlob
11•neogoose•3h ago•6 comments

How to effectively write quality code with AI

https://heidenstedt.org/posts/2026/how-to-effectively-write-quality-code-with-ai/
228•i5heu•13h ago•173 comments

Show HN: R3forth, a ColorForth-inspired language with a tiny VM

https://github.com/phreda4/r3
66•phreda4•10h ago•11 comments

Why I Joined OpenAI

https://www.brendangregg.com/blog/2026-02-07/why-i-joined-openai.html
113•SerCe•6h ago•90 comments

I spent 5 years in DevOps – Solutions engineering gave me what I was missing

https://infisical.com/blog/devops-to-solutions-engineering
134•vmatsiiako•15h ago•59 comments

Introducing the Developer Knowledge API and MCP Server

https://developers.googleblog.com/introducing-the-developer-knowledge-api-and-mcp-server/
42•gfortaine•8h ago•12 comments

Female Asian Elephant Calf Born at the Smithsonian National Zoo

https://www.si.edu/newsdesk/releases/female-asian-elephant-calf-born-smithsonians-national-zoo-an...
23•gmays•5h ago•4 comments

Understanding Neural Network, Visually

https://visualrambling.space/neural-network/
263•surprisetalk•3d ago•35 comments

I now assume that all ads on Apple news are scams

https://kirkville.com/i-now-assume-that-all-ads-on-apple-news-are-scams/
1038•cdrnsf•20h ago•429 comments

Learning from context is harder than we thought

https://hy.tencent.com/research/100025?langVersion=en
165•limoce•3d ago•87 comments

FORTH? Really!?

https://rescrv.net/w/2026/02/06/associative
59•rescrv•18h ago•22 comments

Show HN: ARM64 Android Dev Kit

https://github.com/denuoweb/ARM64-ADK
14•denuoweb•1d ago•2 comments

Show HN: Smooth CLI – Token-efficient browser for AI agents

https://docs.smooth.sh/cli/overview
86•antves•1d ago•63 comments

Evaluating and mitigating the growing risk of LLM-discovered 0-days

https://red.anthropic.com/2026/zero-days/
47•lebovic•1d ago•14 comments
Open in hackernews

Hiding messages in a deck playing cards

https://asherfalcon.com/blog/posts/3
122•ashfn•6mo ago

Comments

ashfn•6mo ago
Hey all, I found a cool way to convert text into a specific order of a deck of playing cards. I detailed the instructions of how it works in the blog post but a brief overview would be that it uses Lehmer codes which allow you to uniquely identify each permutation of a set i.e. each of the many many ways a deck of cards can be shuffled/arranged
pmarreck•6mo ago
TIL about Lehmer codes... and "poker encoding" ;)

(I just prefer poker to solitaire...)

Someone else mentioned that the orientation of the cards (up or down) and possibly even the front-back facingness of the card (facing up, facing down) would add another 2 possible bits to the available encoding space. (Of course, at that point you'd have to also encode which side of the whole deck is the "top"...)

My own thought was to add par2 to make it robust against small errors... at the cost of some transmission space!

hungmung•6mo ago
> Of course, at that point you'd have to also encode which side of the whole deck is the "top"...)

An asymmetrical joker could indicate which short edge is "right way up", while also indicating which card is the first or last of the deck.

ashfn•6mo ago
Yeah that would make an interesting addition. I was thinking about error correction so if you swapped two cards it would be okay but was struggling with how it would work, but I think it would be quite fun to add :)
russellbeattie•6mo ago
> "...which side of the whole deck is the 'top'..."

A dark line drawn across the top of the deck would be enough. Though it would ruin the stealth factor of the cards.

Also, the pattern on the back of some playing decks isn't symmetrical, so that could be used as well.

istjohn•6mo ago
Decode it both ways and see which isn't gibberish.
OkayPhysicist•6mo ago
Use a casino decommissioned deck. They typically have either a hole punched in them, or a corner cut off. Either way it won't be symmetric, but still perfectly plausible as a cheap deck of cards.
SetTheorist•6mo ago
Reminds me of the playing-card based encryption system designed by Bruce Schneier for the novel Cryptonomicon .

https://en.wikipedia.org/wiki/Solitaire_(cipher)

zahlman•6mo ago
Despite appearing to have perfectly ordinary structured static HTML content (aside from the fact that it spams things like <span style="font-weight:bold"> instead of using some basic CSS properly), without JavaScript I only see a solid-colour background.

Anyway, this doesn't offer a whole lot of storage:

  $ python -c 'print(sum(__import__("math").log2(x) for x in range(1, 53)) // 8)'
  28.0
pmarreck•6mo ago
https://deckcrypt.github.io/

45 characters according to the blog post and this demo

throwanem•6mo ago
45 code points in a custom 5-bit encoding representing 32 characters; 28 bytes (with 1 to 4 bits left over) of 8-bit ASCII.
NooneAtAll3•6mo ago
7 characters of UTF-32
throwanem•6mo ago
28 bytes out of ~225 bits, sure. (I compute 228 bits, but precision gets funny with quantities so large. Interestingly, an emulated TI-86 and a real TI-89 Titanium returned different answers; the latter wasn't even divisible by 8!)

For movie-plot '52 pick-up' that's not so bad, especially if used to encode something like a key for the "Solitaire" cryptosystem, mentioned nearby, wherein the same deck can in turn be reconfigured and manipulated to generate an arbitrary-length keystream for application to a longer message transmitted under separate cover.

lxgr•6mo ago
Nice! But why just hide one message if you can run an entire encryption algorithm with the deck? :)

https://en.wikipedia.org/wiki/Solitaire_(cipher)

empath75•6mo ago
Por que no los dos? One deck has the encrypted message, the other deck has the key.
a_t48•6mo ago
You should be able to get another 45 bits or so by also using the orientation of the cards (everything except non face card Diamonds).
pg_bot•6mo ago
You could also add face up or down.
throwanem•6mo ago
You might squeeze a tag bit for the deck out of the 7◇, depending on the pack design.
fsckboy•6mo ago
>you might squeeze a tag bit for the deck out of the 7◇

awww, youuuuu!! hugz!

"The Seven of Diamonds meaning in a Tarot reading can show that you will be surrounded by love."

(i was looking it up to find what the different cards looked like and found that)

and yes "you and I might squeeze a bit" later

throwaway290•6mo ago
is it just me or that comment unexpectedly lives up to your username
throwanem•6mo ago
Good to see you're enjoying yourself, whoever you are.
da_chicken•6mo ago
The 2, 4, 8, and 10 of all suits are typically rotationally symmetrical.
joshvm•6mo ago
Only if your deck has a rotationally symmetric back. A lot of decks are oriented with pictures or logos. Tarot decks almost always do to allow inverted readings (and you'd get a few more bits out from the major arcana).
a_t48•6mo ago
ah, whoops, yes
ComplexSystems•6mo ago
Good stuff. You could get much better bandwidth than this by tokenizing and using something like a Huffman or arithmetic code on token frequencies. As a simple example, if you set your tokens to be all English words - let's say there are between 500k and 1 million - that's about 9-10 bits per word. I am sure you could do much better than this as well
ashfn•6mo ago
That sounds very interesting, I'll look into it thanks :)
avidiax•6mo ago
You can get much better than that by taking a well-known LLM model and encoding a series of offsets from the most likely sequence of tokens, especially if you are OK with the message being slightly different.

https://arxiv.org/abs/2306.04050

https://bellard.org/ts_zip/

mrdoornbos•6mo ago
I've done Pontifex from Cryptonomicon on a Commodore 64 for fun. Bruce Schneier came up with it. https://imapenguin.com/2021/05/making-and-breaking-ciphers-o...
sltkr•6mo ago
Pet peeve: the blog post mentions _decimal_ and _denary_ several times, but in reality, there are no decimal numbers involved in any part of the computation.

This is a common mistake made by people who haven't fully internalized the distinction between numbers (which have no intrinsic representation) and _numerals_ which are the encodings of numbers.

When you are converting a permutation to its index, you are not converting to _decimal_, you are converting it to an integer. That integer has no intrinsic base. In Python (and the linked C++ code) that integer will be internally represented in binary (or a base that is a higher power of 2) and the corresponding decimal representation is generated only when printing.

So functions like decimalToFactoradic() should really be named integerToFactoradic(), etc.

tyre•6mo ago
> This is a common mistake made by people who haven't fully internalized the distinction between numbers (which have no intrinsic representation) and _numerals_ which are the encodings of numbers.

Counterpoint: it doesn’t matter.

moate•6mo ago
Pet Peeve: Pointless Pedantry.

Always Adore: Amazing Alliteration.

kazinator•6mo ago
> people who haven't fully internalized the distinction between numbers

Or people whose first intuition is that the space measured by 52! permutations, which are painfully obviously based on taking the suit and rank of each card which makes it unique, can be covered with even remote adequacy by considering only the card color, which only narrows down the card to one of two sets of 26.

zzo38computer•6mo ago
There are other five bit character sets as well, such as the 5-bit Baudot character set and the 5-bit Zork character set. You could also use variable bits characters, or other bases of numbers.

You can also use other decks, e.g. with tarot cards you will have 78 cards rather than only 52 cards, and can make a longer message.

Other comments on here had mention doing other things such as face-up vs face-down cards.

russellbeattie•6mo ago
How about just assigning a number to every sentence in every language known to man, and using the absurdly huge number of deck combinations to identify them?

Impractical, but possible.

cwmoore•6mo ago
225 bits
russellbeattie•6mo ago
Oh! Duh, the article explicitly said that and I totally missed it as a number. I just thought, "That's only around 28 bytes... That's not a lot."

Thanks.

praptak•6mo ago
Encoding with common objects was (and maybe still is) actually used in practice by actual spies, see CIA shoelace code.
ilcavero•6mo ago
A while ago I made an interactive demonstration of how encoding with factoradic works https://ilcavero.github.io/ seems like I found someone else who thought it was a fun thing to demo
vadimdne•6mo ago
Thanks for your post. It sent me to the 3 hour rabbit hole figuring out how to maximise bandwidth given those 104 card-tokens (52x2 for face up/down cards) in real life. I wanted the solution to be practical for, say, two people in prison cells. So the math should be really simple.

My best attempt so far is assigning about ~20 tokens to most popular words (the, and, you...), another ~30 to popular trigrams (ing, ion, tio...), another ~30 to digrams (th, er, on...) and the rest to single letters. The number of unique tokens to be adjusted to the occurrence frequency of corresponding words/trigrams/digrams in natural language.

If the encoder runs out of a token, she just skips it (assuming the decoder will calculate this token is already used and guessing to add it) up until the point where the words become unrecognisable by the decoder. Encoder is also free to use synonyms to avoid running of tokens fast.

Not quite strict system, but my rough assessment gives it 80-100 letters per deck. Should be enough to plan a jailbreak :)