heterophones are words that dont sound the same
Posts by morgan brackish meadows
turn it diagonal is such a classic giftwrapping cheatcode. if only every problem in my life can be solved with pythagoras. also works when the bedsheet is too short
why not just destroy adam and eve and make two new guys. is god too tired to do it right. no he wants them to eat the fruit. so he can be mean about it
the bishop in chess is just grover from sesame street
its too bad jeyne died in that testicle explosion, ohwell heres our new jeyne tig notaro
โโ night hunter mode
theyre actually coming out with a new lego smart brick and its smarter than a person
harvest moon snes screen with a 3x3 patch of dirt and a 3x3 patch of some vegetable sprouting
For Woman Day we celebrate the farming games so loved by women and femmes, and fems, and inverts. The most woman-centric formula? A grid of squares! By pressing a button near each square, following intervals, woman's sadness is kept at bay. ๐
Game on, no matter how your body is! ๐๐ฝ๐ฎ
operation epic bacon awesomesauce
brackishmeadows.itch.io/paintbox
ive made paintbox public, what it is is a simple implementation of an old-style bitmap editor (like mspaint) but reintroducing things that got dropped like transparency and adding a few modern niceys (palette nav, long undo). paintbox was made using ai for code gen.
ok ive been working with harper (whos a llm persona) on the hat language and its starting to coalesce into a real programming language. it seems real. if this is llm psychosis, the gcc compiler is in on it
ssh is an obscure but widely-deployed command. It stands for Secure Snake Home and was made in the 90s to securely play snake online
I made a massively multiplayer backend for it with support for thousands of concurrent snake players
ssh snakes.run to join!
don
let event ATTACK
step
step
set event FLEE
step
ret (hp, state)
(but whatever, its made up)
so i would probably write it like this i guess
let state IDLE
let hp 10
let hit [ assert hp > 0;
set hp hp - 3 ]
let step [ (state, event) ?
(IDLE, ATTACK) : [ set state COMBAT ]
(COMBAT, ATTACK) : [ do hit ]
(COMBAT, FLEE) : [ set state IDLE]
]
program looks something like this... 'dont' would mean, dont execute this even in don mode.
harper says that this program does... start IDLE with 10 HP โ ATTACK enters COMBAT โ ATTACK deals 3 damage โ FLEE returns to IDLE. Ends with 7 HP. No nested ifs, just a flat state grid and explicit mutation
not enough hat puns? i got you.
so what if you dont want to write do before every scope, what if you just want to run scopes by default?
then youd put the 'don' keyword, to turn the do on.
then every scope automatically executes after that
and 'doff' when you dont want that to happen anymore.
in this language = is only used for evaluating equivalence.
so you use the 'set' and 'let' keywords to mutate or assign
let x 5
set x 6
sort of thing
ret x to return early,
but set or let at the end of a scope also returns x,
and assert also can return early
but in this language the assert keyword would just return a _ from the current scope and move on. if you want to crash you can throw the 'crash' keyword or something like this
but you could also just assert the state bu having state... on a previous line. the things inside a scope can access the things in the outer scope. part of the invariant for a scope is the program, whatever its done, up to that point. if you need to assert something is true, you just do assert it.
ok but if they dont have parameters how are we passing them stuff? eell theyd just have access to the things already defined in the outer scope. this isnt a functional language. we assert that mutation is good and neccessary
so the punnet square thing is a natural way to assert state for a scope
so
do [ body ]
is conceptually equivelant to this monster:
(() => { body })()
ok so ... is a placeholder for a scope []
scopes are typed, return something. usually return _ which is null.
scope that returns 0 F or _ is falsey.
scopes dont have parameters like functions and dont execute by default. if you want to run a scope you have to put the 'do' keyword in front of it.
instead we want a sort of punnet square thing, like this:
A B ?
1 1 : ...
1 0 : ...
0 1 : ...
0 0 : ...
isnt that like, kinda nice? anyway thats the idea.
of course we dont just use 0s and 1s, we can use... T and F, literals of whatever type makes sense. enums. * for match any and _ for null.
so then the reason i want this is suppose we want to do a thing if a, a thing if b, a thing if a AND b, and a thing if NEITHER a NOR b. in a big if-else-else-else block that would suck to read / write.
id be tempted to write the a and b case nested inside the a case. its not gonna line up nicely.
the ternery opertor is where you go
thing = clause ? a : b
thing is assigned a value based on whether clause is true or false.
but what if we were doing more work in there? what if clause, a, and b were all blocks of code with return values? seems dumb and annoying, right? lets do it.
so the language will be called ^ (pronounced "hat")
to be clear this language isnt to make the world better its mostly to see if i can do it and fit in a bunch of dumb programmer stunts i thought of on the bus
the dumb programmer stunt i most like is the ternery operator so lets work with that.
how hard is it really to think up a new programming language? lets find out
ok so for me what i think is a good programming paradigm is a series of invariant gated scopes like
if a ^ b ^ c ^ d { do something }
lets expand on that (im aware branching is considered bad but its good actually imo)
is it cheating to import just those glyphs from a different font?
but really i just want it so i can run apps over other apps like a terminal and profiler over a game or something
the backdrop is an animated webgl scene in a p5 sketch, though i dont think i can put a lot of triangles back there without tanking performance too much
the dicetray is another p5 sketch
if i got multiplayer working id like to knock together a more-performant replacer for a dnd app like roll20