I have memories of ‘poke’ as well. On the Atari 800 you could poke memory to change the keystroke repeat rate and delay before repeat started, so obviously we would turn down the delay to zero and turn up the repeat to max (it was maybe 60 characters per second), so anyone trying to type couldn’t hit the keys quickly enough to avoid repeating. You’d have to power-cycle the machine to fix it, so it was hilarious to 11 year old me.
Similar to his description of ‘poke’, but different mechanism - using debug.com on an IBM PC jr to edit the Ultimate III save files, and give myself maximum money and lives.
Good times!
10 FOR I = 1 TO 10
20 PRINT I, SQRT(I)
30 NEXT I
and struggled to type this without errors into computers in department stores. I must have read this code somewhere and needed to see it working for myself.I think my second BASIC program was the "guess a number" one -- that seemed really popular in intro basic programming things in the 80s also since it showed keyboard input and conditionals and was, uh, fun-adjacent.
The first one runs on an ESP32 that I plan to use as a watch. The software works, I just need to finish the 3D printed case.
The second runs on an RP2350 connected to my living room TV via an HDMI cord.
I have so much appreciation for these old machines I grew up with.
BASIC32
Ready.———————
(defmacro twice (form)
`(progn ,form ,form))
(twice (print "Reality"))———————
twice doesn’t execute its argument twice. It rewrites the program itself before execution into:
(progn
(print "Reality")
(print "Reality")) while(1) { fork(); }
Must have meant something to me, because it was in my Usenet sig. And then: exit(main(kfp->kargc, argv, environ));
from FreeBSD crt0; kind of a big moment for me to realize there was more C code underneath main().Then:
statements: /*E*/ | statement statements
The moment Yacc clicked for me; that line was profound but a more accurate depiction of the moment was realizing that all you were doing with the parser generator was building a tree, and that's what the side effects of each production were for: returning and plugging in tree nodes.If there was a single line I could come up with for "double the size of the hash table when it fills up", that'd deserve a slot here.
Then, of course (we get to cheat because assembly):
jmp .call
.pop: pop esi
...
.call: call .pop
The "delta offset" trick, which I believe came from x86 virus culture but was universal in 90s overflow exploits as a way to get position-independent references to strings and other memory things.For sure:
void walk(node *n) { if(!n) return; walk(n->left); visit(n); walk(n->right); }
I should figure out a way to fit a write-select(2) into a line because that's another "oh shit" moment for me.Similarly: when Vern Paxson explained to me that he'd implemented TCP reassembly by simply opening up a file and using "seek" to place incoming segments in the right position. I could probably golf that down to a line! But it would be an annoying line.
I'm partially more in favor of "red" instead of "hotpink" for CSS, but that's just me.
p { color: red; }
as a teenager my mind was blown as I reloaded the page and there it was; text now in red. I did that! * {
outline: 1px solid hotpink !important;
outline-offset: -1px !important;
}
As in most cases the above snippet doesn't reflow content.Exercise to the reader is to turn the above into a javascript bookmarklet toggle, and to add support for shading margins and padding.
This is funny to me, because I associate touch more with updating the timestamp of an existing file, and that script would miserably (destructively) be failing at that.
someObject.changeToClassOf(SomrOtherClass);
(or something like that--i'm was long ago).
In Smalltalk, changing an object's class preserves instance variable (attribute) values when possible, silently dropping if not, and gives it an SomeOtherClass's inheritance (and method dictionaries as a result).
It forced me to realize that an instance of a class wasn't permanently coupled to be an instance of the class that instantiated it or even its current class
#define true ((rand()&15)!=15)Back in the day, I looked down my nose at other young fledgling developers that would #define true 1. I knew only clarity and woe lived down that road.
if(5-2 == true) ;
As verbose as it was stupid.I felt superior because I knew that #define false 0 was the only Boolean keyword hack that would work.
if (5-2 != false) ;
Still verbose, and stupid, but at least it was correct.These days… I don’t feel as confident about anything as I did about those #defines.
outline: hotpink 1px solid;
not border! It destroys the layout. I mean, come on :)