Bouncing Beholder, my winning JS1K entry (2012)
72 points
7 days ago
| 7 comments
| marijnhaverbeke.nl
| HN
calibas
7 days ago
[-]
> I've heard people wax poetic about programming old, limited-memory machines. I wouldn't know anything about those---at the time they were current, I was writing rudimentary number-guessing games in BASIC. But doing this competition entry gave me a taste of what they might be talking about.

One rather big difference here though, the limitation is on the size of the code, not the compiled binary. Most of the "optimizations" here have little to no effect on the code after it's compiled.

With older computers, instead of removing line breaks from the code, you're doing things like tweaking compiler flags to shrink the size.

reply
TazeTSchnitzel
7 days ago
[-]
With older computers you're handwriting assembly generally if you actually want to get the most out of them.
reply
ASalazarMX
7 days ago
[-]
I think he meant for competitions that judge binary size. Handwritten assembly could even increase the size (like unfolding loops) and it wouldn't matter if the speed was improved.
reply
jitl
7 days ago
[-]
This person is also the author of CodeMirror and ProseMirror, the best choices in my opinion for plain text editing and rich text editing respectively for the web platform
reply
degun
7 days ago
[-]
Also, the author of "Eloquent JavaScript", the book from which I learned the language. Endless respect for Marijn.
reply
madflame991
7 days ago
[-]
I can't recommend "return true to win" (https://alf.nu/ReturnTrue) enough to learn how to golf JS. I think it's more accessible to learn one 10-20 char snippet at a time than a big project like a 1k submission.
reply
kookamamie
7 days ago
[-]
To those it was not obvious - the result of the entry is the top banner, a keyboard-controllable "game".
reply
KingOfCoders
7 days ago
[-]
I wrote boot sector stuff (1k) on the Amiga (68k assembler). Today I wonder if I could have written a game (tech wise and skill wise).
reply
ASalazarMX
7 days ago
[-]
Definitely. For example, a boot sector Space Invaders in 512 bytes.

https://github.com/nanochess/Invaders

reply
KingOfCoders
7 days ago
[-]
It depends on your video memory and how it is structured. Also as I've said, skills ;-)
reply
ASalazarMX
6 days ago
[-]
No need for graphics. In the 80s, when MS-DOS was popular but graphic cards were expensive, ASCII games were very popular and pretty fun. Not having bitmaps greatly reduces binary size.

https://www.dosgames.com/tag/ascii

reply
mohsen1
7 days ago
[-]
I did a JS1K back in the day [1] such a fun concept!

I wonder these days if anyone is using multi-character emoji (don't know what do you call those exactly) to compress more data in 1024 "bytes"?

Since HackerNews does not allow emojis, here is a demo of what I mean:

https://output.jsbin.com/nebemihuhe

[1] https://js1k.com/2013-spring/demo/1426

reply
gorkish
7 days ago
[-]
“Bytes” is not an arbitrary definition in the contest. Any use of an emoji takes 4 bytes. Some of these new combined ones can be 25+ bytes when accounting for zero width joiners, variant selectors, and modifiers. Technically you can pack nearly as much data as you like into a single legal Unicode glyph (think infinite zalgo text) if you just want to have the thought experiment.

Unicode is a nightmare, but I’m glad everyone agrees to share the same nightmare.

reply
mohsen1
7 days ago
[-]
That explains it!
reply
leptons
7 days ago
[-]
Go have a look at https://beta.dwitter.net - many of the examples there use this technique to fit more than 140 bytes into the "dweet" (many are also less than 140 characters, so don't need to use this compression technique). There is a convenient "compressed" switch to "decompress" the code. The rule on dwitter.net is no more than 140 characters (not 140 bytes).
reply
lifthrasiir
7 days ago
[-]
For the record, JS1024 [1] is a de-facto spiritual successor to JS1K nowadays.

[1] https://js1024.fun/

reply
wonger_
7 days ago
[-]
And sorta similar: https://js13kgames.com/
reply
kristopolous
7 days ago
[-]
reply
rounce
7 days ago
[-]
There are ways of using actual compression to pack demos: https://archive.is/8KzKA
reply
rob74
7 days ago
[-]
reply