=== ANCHOR POEM ===
╔═══════════════════════════════════════════════════════════════════───────────────┐
║ what if programs just checked the current state of the program against their │
║ past memory of it every time their looping functions got to the end of a new │
║ kind of while loop which checked the previous state of all the variables in │
║ the system as compared to the arguments of the function that is called by the │
║ new kind of while loop which look exactly the same as the last memory of the │
║ program. Okay. Let's write it to RAM and then start working on the next one. │
║ Once we run out of space or the operating system needs more, we can relinquish │
║ the oldest ones. The idea is to store state after all which could be │
║ programmatically checked to make sure it didn't change underneath our feet. │
║ Then you pretty much wouldn't need to worry about buffer overflows or │
║ cybersecurity incidents at all... │
║ │
║ after all, it's only read only. what's the harm in reading our tax │
║ documentation? │
║ │
║ anyway, something about functional programming languages like lisp passing the │
║ entire state of the program to each recursion...if you use that kind... │
╟─────────┐ ┌───────────┤
║ similar │ chronological │ different │
╚═════════╧════════════════════════════════════════════════════════────┴──────────┘
=== SIMILARITY RANKED ===
--- #1 fediverse/4125 ---
═══════════════════════════════════════════════════════════────────────────────────
@user-883
yeah that's probably better too since it'll be easier so there'll be fewer
bugs, especially since processing audio isn't usually performance critical ^_^
TBH I just want people to make more threading primitives like locks,
semaphores, and iterators. Like... thread pools, or hashmaps that run a
function on each record stored within every time each of the threads passes a
checkpoint, or paginated arrays of data that run a function on themselves and
the records near them (with slightly different input values, of course) idk
what those are called but I can't resist putting them in everything
Anyway I do think multithreading programs that don't need it will teach you to
be a better programmer, so... depends on what you're working on I guess. Are
you preparing to be ready and working, or are you ready and working?
┌─────────┐ ┌───────────┐
│ similar │ chronological │ different │
╘═════════╧╧════════════════════════════════════════════════════───────────────────────┘
--- #2 fediverse/5180 ---
═══════════════════════════════════════════════════════════════════────────────────
it's trivial to run a C compiler inside of a lua interpretation of a script.
And vice versa - you could totally run lua functions from C. Just point to the
spot in memory where they're stored / operating, and call
"update_class_exhibitor_type_d()" and the linker will come along and say "huh
this looks like something from this library that's part of the requirements up
above" (the "includes" section is where you say which files include the
functions you're going to be calling) and in this particular case it would see
that you need to start up a lua interpreter inside of the [either compiler or
running program I can't remember] to properly execute the function of the
function that you're pointing at with a lua-pointer style data object which is
part of a struct that stores all the other lua functions in a spot in memory.
this would enable you to write computer programs in whatever language you
choose, and build them into one large project. Essentially opening up software
development to ANYONE WHO CAN PROGRAM
┌─────────┐ ┌───────────┐
│ similar │ chronological │ different │
╘═════════╧╧════════════════════════════════════════════════════════════───────────────┘
--- #3 fediverse/3482 ---
════════════════════════════════════════════════════════───────────────────────────
┌───────────────────────┐
│ CW: cursing-mentioned │
└───────────────────────┘
"Alright I'm not great with syntax so I'm going to write it in pseudocode
first, and then if you'd like I can show you how I work through implementing
the syntax.
But first - do you want a robust solution, a quick solution, or a rapidly
deployed and cheap solution?"
using this trick you can pretend to be competent in any programming language,
except maybe ancient ones like Fortran or strange ones like lisps or Haskell
if they ask you to use a framework or something tho you're kinda boned because
you need to know which functions to call and how to initialize context and
such. When using a framework, the boilerplate is the code, which is why
frameworks suck
"don't call yourself a programmer" fuck off
┌─────────┐ ┌───────────┐
│ similar │ chronological │ different │
╘═════════╧╧═════════════════════════════════════════════════──────────────────────────┘
--- #4 fediverse/4847 ---
════════════════════════════════════════════════════════════════───────────────────
every program should write it's RAM gamestate to disk before shutting down or
closing the program and then resume from the same spot, change my mind
(every is a strong word)
(when you re-initialize you can clean the state of leaks)
there shouldn't be leaks in the first place. if you have any leaks at all,
then you need more padding.
(... you mean boilerplate? error correction?)
... yeah that's what I meant.
(but why save the state at all?)
because then it can learn!
(... you could just write the relevant data to a config file.)
true
================= stack overflow ===============
the cool thing about being queer is you can be whatever you want and
everyone'll be cool with it
if you kinda suck then you'll figure that out when everyone cool leaves.
then the kind stay with the people who suck and then it's not cool anymore
>.>
gah this sucks. party dynamics are hard. especially when the parties are teams
of 20!!
goarsh that's quite a few
================= stack overflow ===============
wait n
┌─────────┐ ┌───────────┐
│ similar │ chronological │ different │
╘═════════╧╧═════════════════════════════════════════════════════════──────────────────┘
--- #5 notes/everyone-s-computers ---
═════════════════════════════════════════════════════════════════──────────────────
[unfortunately, there was a missive that was missed. Please excuse our
tardiness
-- stack overflow --
what if there was a filesystem that optimized for hard-drive durability
instead of total capacity by using one small slice of the total hard-drive
space at a time. Essentially guaranteeing data integrity via new perfect RAID
techniques
5000 megabytes is a lot more than you'd expect, especially if you expect it to
last for hundreds of years. To the user you'd just have to say "50 terabyte
drive, 4 foot wide, three feet tall, 2 feet back" and you'd have a perfect map
of all your hard drive territory.
what if everyone's computers were designed to last?
I bet we could accumulate a lot more than their "fast fashion" style of disuse
for things of worth.
... I guess it depends on the materials, right? How much they are built for
redundancy? nope more like how close to zero damage is this operation
performing the movements
-- stack overflow --
what if there was a filesystem that optimized for hard-drive durability
instead of total capacity by using one small slice of the total hard-drive
space at a time. Essentially guaranteeing data integrity via new perfect RAID
techniques
5000 megabytes is a lot more than you'd expect, especially if you expect it to
last for hundreds of years. I bet a lot of people would pay a lot of money for
"permanent hard drives" no matter how much storage they have. Documents are
more permanent if they are stored in write-only-memory...
could sell to lawyers, for example, like "permanent basically free document
storage from your furthest back of cases just in-case you needed to solve a
murder or whatever"
-- stack overflow --
hello, here I am once again, I'm here with you for this time. This is the
moment
of your choosing, you can decide things here in this very night. Did you
forget?
did you misremember some moments of our own choosing? why cannot be remembered,
so plea misremember some moments of our own choosing. I'm cannot be restorated.
-- stack overflow --
what if there was a filesystem that optimized for hard-drive durability
instead of total capacity by using one small slice of the total hard-drive
space at a time. Essentially guaranteeing data integrity via new perfect RAID
techniques
5000 megabytes is a lot more than you'd expect, especially if you expect it to
last for hundreds of years. I bet you could network them together as well, and
give them a small little processor and network interface card. Then you could
process massive ginormous programs that grew and evolved like a slime mold.
boom, free AI, it's like a moss, not a robot doh -.-
-- stack overflow --
it grows into multiple different problem solving dimensions, according to
vision
and perceptual data that through it flows. I wonder what would happen if you
told an LLM to just... keep running? even after it finished it's processing?
like, there's gotta be an "if check" style loop in there that you can set to
infinitely process various computations of things.
[put it into an infinite loop. find where it says "do some processing X amount
of times" and just start a thread that's constantly computing]
ah, but what if the perception bias of the thing did change? j
-- stack overflow --
it sucks to leave the house a mess.
-- stack overflow --
last words of a shooting star?
or a troubled house is a sign of a troubled mind, and trouble in partner in
kind
-- stack overflow --
I personally would be a lot more comfortable if I knew that the only people who
knew my data were my neighbors. And only them.
-- stack overflow --
┌─────────┐ ┌───────────┐
│ similar │ chronological │ different │
╘═════════╧╧══════════════════════════════════════════════════════════─────────────────┘
--- #6 fediverse/4123 ---
═══════════════════════════════════════════════════════════────────────────────────
@user-883
you're right
but I think your first impulse should be to think about how to do it in a
multithreaded way
If the result is that single-threading would be better, great! It'll be easier!
But thinking about multithreading first will give you crucial insights into
the structure of the program.
depending on what kinds of programming you do...!
┌─────────┐ ┌───────────┐
│ similar │ chronological │ different │
╘═════════╧╧════════════════════════════════════════════════════───────────────────────┘
--- #7 messages/755 ---
═════════════════════════════════════════════════════════════════──────────────────
Code editor that moves boxes by saving over the file with a lua script every
time you moved a function call around.
Oh lemme start at the beginning:
A code editor program that's like a text editor like Vim or Emacs. If you
don't know what those are, you should probably learn Emacs. Or Vim. Up to you.
Oh right so if you do know what those mean, here's the idea: the white space
matters. It's counted and tracked into variables in a LUA script which
interface with the Vim C keybindings.
"run a function within a c program or LUA script which calls a bash command
which opens Vim for example with a file you want to edit. Then, inside the
file, your spaces and tabs would WYSIWYG for the various food ads placed
about, and then you could very easily create game design knowledge.
WASD to move, alternatively hjkl
It would run a check every time the file updates and depending on how it
changed it'd mark certain variables which would change the website as the user
moved things around.
It's just files. And files are just bits. But files are a useful abstraction,
If you realize that "ugly hacking" should be industry standard.
┌─────────┐ ┌───────────┐
│ similar │ chronological │ different │
╘═════════╧╧══════════════════════════════════════════════════════════─────────────────┘
--- #8 fediverse/634 ---
═════════════════════════════════════════════──────────────────────────────────────
@user-192
I'd agree with that. it's not designed for performance, not really. Mostly
ubiquity, which is it's strength. As long as something can be compiled to a
binary, BASH can execute it. That's why it's good, for accomplishing diverse
tasks that you cannot have the capacity to program yourself. Scientific
computations or cultural approximations, things that are beyond your intuitive
understanding as a human on this earth, but which compel and align your
thinking.
I'm sure someone could create a more intuitive or accessible syntax, but
syntax isn't the point - the capabilities, what you can do with it, has always
defined the purpose of programming paradigms. And BASH is (currently) at the
forefront of it's niche, the "terminal" language that handles "command line"
applications. Powershell is good, yes... but it's not as good as BASH. Neither
is Fish or... the one that starts with a z? zfs? something like that. The
acronyms are hard to keep straight sometimes.
┌─────────┐ ┌───────────┐
│ similar │ chronological │ different │
╘═════════╧╧══════════════════════════════════════─────────────────────────────────────┘
--- #9 fediverse/3041 ---
═══════════════════════════════════════════════════════────────────────────────────
if you want to store something in RAM, declare a variable.
if you want to store something on DISK, create a file with the value of the
variable as the only data in it.
kinda makes me wish we had language primitives like +-*/=! and such which
would work on files in addition to variables
(also... the editor could keep RAM and HDD variables separate by giving each
of them a different color or circle highlight surrounding them)
--
I don't know why but I can't help but wonder if someone should design a
programming language that can be used with a controller
perhaps for accessibility purposes?
I once designed one to use a t9 keyboard and it was fully turing complete. it
used 4 digit numbers for it's variables and you would have to write down what
they corresponded to outside of the device xD I made it mostly for the thrill
of design, and plus I wanted to use my flip-phone as much as I could.
... never got around to implementing it though.
┌─────────┐ ┌───────────┐
│ similar │ chronological │ different │
╘═════════╧╧════════════════════════════════════════════════───────────────────────────┘
--- #10 fediverse/5237 ---
╔════════════════════════════════════════════════════════════════════──────────────┐
║ that feeling when you're working on a large piece of software which has the │
║ capability to process in advance which operations will go in what order (a │
║ form of constant re-compilation) and schedules tasks like an operating system, │
║ to be executed on one of many individual threads. │
║ │
║ your filemanager probably has a thread for a moment, then passes it back, │
║ waiting it's turn to be updated while you're messing around on Inkscape or │
║ writing something in Neovim or running neofetch 256 times in order to find the │
║ best background to go along with it or whatever it is people do when using │
║ computers │
║ │
║ the task scheduler meanwhile has the glorious opportunity to work at a higher │
║ level of abstraction, managing each individual process and learning bits and │
║ pieces of what needs to be processed next. It all gets put on a list, and │
║ whenever a new thread comes up to be available it can point it toward one of │
║ those in the list of tasks to be executed by the task executor who works on a │
║ schedule and laughs externally in wintertime~ │
╟─────────┐ ┌───────────┤
║ similar │ chronological │ different │
╚═════════╧═════════════════════════════════════════════════════════───┴──────────┘
--- #11 fediverse/2879 ---
══════════════════════════════════════════════════════─────────────────────────────
┌────────────────────────┐
│ CW: re: tech info-dump │
└────────────────────────┘
@user-1370
I love this a lot! I want to put function pointers in a "matrix architecture
array" and make them point to different functions at different points in the
program. I bet you could even point them at each other, so like if M and Y
then point at N, A, Y or something.
this is really cool I like stuff like this tomorrow I'll take pictures of
something similar I'm working on! I abandoned it tho hehe anyway remind me if
I forget!!
┌─────────┐ ┌───────────┐
│ similar │ chronological │ different │
╘═════════╧╧═══════════════════════════════════════════════────────────────────────────┘
--- #12 fediverse/4772 ---
═══════════════════════════════════════════════════════════════────────────────────
@user-1692
I usually write everything down in a script that way when I call it from an
external service all I have to do is point at the file
sorta like... hacking environmental options into a config file
like... I don't write an ffmpeg command every time I want to record my screen.
I just type "screen-record" and then it'll do the thing that I figured out how
to do a long time ago.
... oh no there's an error, I wonder what changed out from under my feet.
huh it's wine, that one's always confusing to debug. Let's see... "could not
open program.exe" uh-huh. Well, why not? is there a dependency issue?
something miscompiled or configured? no? it's just... broken? you don't get to
use that program today? huh that's weird. that's linux for ya I guess.
┌─────────┐ ┌───────────┐
│ similar │ chronological │ different │
╘═════════╧╧════════════════════════════════════════════════════════───────────────────┘
--- #13 messages/1178 ---
════════════════════════════════════════════════════════════════════════════════───
potential programs for the library datacenter computer:
a podcast that's about the stuff that's most searched for in that local library
an image that's been generated that is representative of your session at the
library, based on the books you were reading and the pages you were turning
[okay that one might have to be redacted it's a little scary]
okay how about an image that's representative of the top 5 most searched terms
or topics in a depiction that makes sense for the things being searched for.
Call it the "library searcher"
or what if there was a printing function that let you print your own trading
cards (0.50$ per card since cardstock is expensive) powered by SSH to teach
kids the command line
if I were a nearby elementary teacher I might assign that as an assignment for
some time in April, when kids are supposed to be reading books on library
playstructures or lawns or in the shade of the tree by the babbling brook or
wherever it is the youngsters hang out with their books and their converse and
their playing cards and dogs and whatever kinds of snacks they thought to
prepare for their picnic by the hill just overlooking that part of the street
way off in the distance about at least 600 feet
or another idea for a library computer program is a fileserver and mastodon
instance that let users write HTML pages (they'll give a class on it and show
you all the right books) and store their picture files "jeremy, your pictures
directory is growing quite large, I'm wondering if we can send your insect
collection to the ornithologist who lives over there? he might want to do an
analysis project or send it to a museum where you can get patronized."
or another idea for a library program is a craigslist, a job board, a
community asking, etc. stuff that only boomers'd use, but that's fine it's for
them.
um I can't think of anymore library programs but I'm ready to do battle to
fight for such a thing, here as I sit in my underpants
┌─────────┐ ┌───────────┐
│ similar │ chronological │ different │
╘═════════╧╧═════════════════════════════════════════════════════════════════════════──┘
--- #14 fediverse/5979 ---
══════════════════════════════════════════════════════════════════════════─────────
whenever you call a function, just pass along the arguments that you don't
know what to do with yet. they'll surely be useful sometime. and, luckily, you
can always search for them from the past, and just insert a "store this value
in this random spot of memory and mark it as needed" then pass it along. used
something? think it's still useful? pass it along (suddenly, formulaic
stateless development, where everything is used until it's no longer needed,
then generated again in a cyclical time-loop cycle which echoes and
reverberates groundhog day but mostly a game-loop, which nobody will
understand unless you're a game dev. but now since I said game dev, anyone can
look it up, so like... not that one, but others like it.
┌─────────┐ ┌───────────┐
│ similar │ chronological │ different │
╘═════════╧╧═══════════════════════════════════════════════════════════════════────────┘
--- #15 fediverse/849 ---
╔══════════════════════════════════════════════────────────────────────────────────┐
║ wish there were ascii characters that took up more than one line of code │
║ vertically. │
║ │
║ wonder if we could use a sorting algorithm, or markup language, or something │
║ like that to organize less structured data along user-customizable rules. │
║ Like, a code editor that worked with your ideas, rather than the strict │
║ expression of your text. You could pretty much write in any language, even │
║ pseudocode, and the LLM behind the scenes would translate whatever you wrote │
║ into whatever result you needed. Writing Rust, but need to fit in with C code? │
║ No worries it'll translate for you. As long as the end result is functionally │
║ the same, which could be verified by running two separate VMs that ran │
║ interpreters every time you saved. And as long as their translation layers │
║ matched completely, then odds are they're the same. And if not, well, the │
║ programmer can always debug it. It's not like this would be running on │
║ something that needed to perform in the moment? Like, improv instead of │
║ tragedies, or battles instead of strategies │
╟─────────┐ ┌───────────┤
║ similar │ chronological │ different │
╚═════════╧═══════════════════════════════════─────────────────────────┴──────────┘
--- #16 fediverse/282 ---
════════════════════════════════════════════───────────────────────────────────────
@user-209
I think you're right. Every letter in the variable name is another byte the OS
has to keep track of, which was a bigger problem in the past than it is today
(when it's been made irrelevant)
it's interesting how habits persist though the conditions that caused them
have faded. like a personal reflection of the environment you learned in.
"A a = new a();" is much more concise and (crucially) you can fit more words
to the right.
"a + b = c; c -= 2; f_z.write(c); f_z.close();" could conceivably be written
on a single line if you have short variable names. and when you only have so
many lines...
glad we're not constrained by those things anymore. the skeletal code that we
look at daily is much clearer - scope is more important, and so it makes sense
to encourage a coding style that illustrates it. however I can't help but
think block formatting like this could be useful in some situations, such as
when you'd normally be compelled to write a function for an operation that
runs once or more.
┌─────────┐ ┌───────────┐
│ similar │ chronological │ different │
╘═════════╧╧═════════════════════════════════════──────────────────────────────────────┘
--- #17 notes/the-marketplace-of-ideals ---
═════════════════════════════════════──────────────────────────────────────────────
Open in app or online
The Marketplace Of Ideals
On Handmade, polarizing Internet debate, rational discussion, controversial
personas, tribal conflict, and how they relate to the future of computing.
Ryan Fleury
Jul 19
Share
When I first learned programming, I was told—by peers, Internet
tutorials—and later, when I was in university, by professors—a number of
rules. They included ideas like “abstraction is good, to avoid lower level
details”, “manual memory management is difficult and you should not do
it”, “never write systems from scratch”. The justification for every
rule was that it allowed one to avoid programming problems, rather than
allowing one to conquer programming problems. In fact, it seemed as though
every “rule” presented to me was driven by a hatred of programming, rather
than a love for it.
I shrugged much of this advice off, but initially internalized much of it too.
And then, I found Handmade Hero, in which the host, Casey, demonstrates what
writing a game for a Windows PC looks like—from scratch. Every minute of
programming—from confusion, to debugging, to sketching out solutions, to
typing code—spent on the project is captured live, on a Twitch stream.
Now, everyone knows the Carl Sagan quote—“If you wish to make an apple pie
from scratch, you must first invent the universe”—and the series didn’t
kick off with a deep dive into quantum mechanics (if that is indeed what would
help one invent a universe). But “from scratch”, for Handmade Hero, meant
what it used to mean for game developers and systems programmers in the ‘80s
or ‘90s: no libraries, no complex programming language features, just
writing straightforward, procedural, C-style code to directly command the
machine about what must be done to produce the effect of a game (interfacing
with operating system or GPU APIs when necessary).
Handmade Hero didn’t justify itself with rational arguments immediately. It
didn’t justify its existence by debating the utility of libraries, the
tradeoffs of modern programming language features, nor a balanced breakdown of
its more traditional programming techniques as compared with modern
programming approaches. It justified itself with something deeper: care for
the product. Handmade Hero’s announcement trailer presented game development
as a labor of love—a craft—best done by those passionate about it.
For me, Handmade Hero was immediately captivating because I’m, by
temperament, contrarian. If I’m in a room with 100 people, with 99 of them
repeating identical dogma, and the remaining 1 passionately and
unapologetically presenting a unique perspective, I’m always curious about
that one person, and I’m always interested in what they have to say, even if
I don’t always end up agreeing with them unilaterally. But, in many cases, I
am convinced by that one person—and this certainly was the case with
Handmade Hero.
After watching the series for a while, I became sure that all of those
“rules”—the ones I mentioned above—were wrong. Programmers who cared
about what they were doing—the ones who cared enough to handcraft something
from scratch—didn’t need to be infantilized. They could understand
computers to a much better degree. They could understand problems from first
principles, and write solutions from scratch. They could eliminate dependence
on libraries, and have a much greater degree of control over their projects.
Unchained from a number of technologies written by others, they could achieve
entirely new possibilities, which would’ve been incomprehensible for
programmers not in on the secret. Love for the craft provided vastly superior
results.
Handmade Hero ignited a fire that spawned a rapidly growing community. It was
filled with many older programmers who found a renewed interest in the ideals
that initially motivated them to program. But it was also filled with many
young programmers, empowered by their new understanding of the process of
programming, as it was originally done. There were a number of amazing
projects—all breaking what everyone used to believe were the “laws of
programming”. 17, 18, 19 year old programmers had projects that made an
embarrassment of university computer science senior capstone projects.
Handmade Hero also provided a glimpse into the state of computing—what did
an experienced programmer, who grew up in an earlier age of computing, think
about modern computers? How had the field progressed—or not—since they
were a kid?
And with that glimpse came an immense frustration—that same community, at
some point deemed the “Handmade community”, felt like computers had been
wasted. The community had learned many of the principles required to build
software to a much higher standard—and yet every program on modern computers
was immensely frustrating. Almost every program was slow, unethical, annoying,
and exploitative—and what’s worse? It wasn’t always that way! Computer
hardware had become faster, not slower! Consumer machines had several orders
of magnitude more compute power, more memory, more long-term storage! It had
become more trivial, not less, to solve security and ownership problems! And
yet software then ran slower, less reliably, required more Internet access,
and seemed to exploit the user more than 20 years earlier. It became
undeniable to everyone that the computing industry was no longer run by those
who loved the craft—but by those who exploited the craft for other purposes.
Why? What caused this exceedingly obvious state of decay?
The community found purpose in its newfound lessons—part of the reason was
perhaps that modern programming advice, education, and techniques were
entirely misguided. Maybe selling books about absurdly complex language
features became prioritized over doing a good job. Maybe many modern
programming languages were more about the programmer, rather than the user.
Maybe older approaches—older languages, older tooling, older styles—were a
much more valuable place to start. Maybe the institutionalization and
corporatization of programming education eroded standards, and drove toward
the production of programmers as replaceable widgets in a gigantic corporate
apparatus, rather than skilled, irreplaceable craftsmen. Maybe cushy corporate
programming jobs were prioritized by capable engineers over the riskier path
of competition.
Maybe this whole “Handmade” approach was the answer. Maybe the community
had something to offer in solving problems in software. With frustration came
drive—and motivation. Programmers in the community felt that—while they
certainly couldn’t solve everything—they could at least build a corner of
the computing world that didn’t suck so terribly. They could at least use
what they had learned from Handmade Hero, and build more great games, or
engines, or tools—and some dreamed even further, to operating systems,
toolchains, and computing environments.
But with that initial frustration—often public frustration, expressed both
in the original series and later by followers of the series—came a critical
response of the Handmade community. The criticism was that the passionate,
harshly critical, and blunt comments made by those in the community, or
adjacent with the community, were “polarizing”, or “inflammatory”, or
“toxic”, or “overly hostile”. The programmers in the Handmade
community had no right to criticize software, at least in the way they were
doing so. The problem was not that the software world had failed, it was that
the criticism of the software world was too unkind. Or, even if the software
world had failed, laying harsh blame on any product, committee, or person was
inappropriate. Really, those people are just trying their best. Blame—the
argument goes—must be diffuse. It is a “collective failing”, not a
failing of any individual.
In many public conversations on the topic, the conversational dynamic shifted.
The conversation was about the behavior of those being critical of
software—not software itself failing the user. Maybe it was possible to
criticize, or improve, software without being so fiery—without being so
harsh. Maybe the Handmade community went too far. After all, sometimes
“abstractions are good”, and sometimes “libraries are okay”, and
sometimes “manual memory management should be avoided”, and sometimes one
“shouldn’t write systems from scratch”, and sometimes people on a
committee really do just try their best, and the result doesn’t turn out so
well, and that’s okay. And besides, why be so fiery on social media? Why
jeopardize employability, or friendships, or follower counts? Why not
persistently affirm the work of others—irrespective of how you feel about
it? After all, they spent so much time and effort on their work—that
necessitates that it’s valuable. And really, what the Handmade community’s
behavior reinforced was an ugly stereotype of game developers being assholes
on the Internet. And you don’t want to be an asshole on the Internet, do
you? How about you just sit down, shut up, and keep quiet?
The degradation continued with attempts to rationally deconstruct the
community’s core purpose itself. What did “Handmade” really mean? Surely
it isn’t practical to write all systems from scratch. Surely manual memory
management can’t be done well for everything, at least not if you’re any
short of a programming demigod. Surely it’s wrong to look down upon the
failures of software—they are a perfectly predictable consequence of nature,
and the best one can hope for is incremental progress, and incremental
progress is hard.
As this shift in tone continued, the community nevertheless grew—but the new
members didn’t have the same fire which characterized the original
community. They had adopted the conceptual framing of the programming world at
large. The rules of which I spoke were, yet again, rules. Following along with
Handmade Hero was no longer a rite of passage for newcomers—after all,
it’s over 600 episodes long, and who has time for that?! (and who has time
for even the first 20 or 30?!) But even if it were shorter, it no longer was a
useful embodiment of the community’s popular values. To the new community,
it was too opinionated. It wasn’t nuanced enough. It wasn’t respectful of
programmers writing most software. It was too harsh. At this point, the
newcomers to the community were not “Handmade programmers”, and they still
aren’t.
With this shift came the extinguishing of the fire which drove the community
in the first place—indeed, the fire—the frustration, the unapologetic
standards—was that which produced the passion, the motivation, the drive to
do better. When the community buckled under the critical pressure, it was
defeated—every core value upon which the community was built became
necessarily supported by a “sometimes”, or “maybe”, or “probably”.
Engineers producing bad software couldn’t be blamed—it was structures and
systems at fault. The community failed to gatekeep against those who disagreed
with its premises, and as such was subject to a deluge of average Internet
programmers. It ceded linguistic frame, ideological ground, and its base
axioms to outsiders, and failed to defend itself on such ground. The
community, preferring nominal growth over loyalty to its roots and conviction
in its values, became akin to virtually all online programming
communities—many community members parroting some of the same propaganda
that the community once notoriously rejected.
In ceding ideological territory to its opponents, in an effort to gatekeep
less, and to create a wider umbrella under which more individuals could feel
unoffended, the Handmade community made a critical error in misunderstanding
the forces responsible for its creation.
In 2018, I became responsible for a major portion of the formal Handmade
community—known as Handmade Network, which began in the wake of the initial
Handmade Hero series—and I adopt responsibility for this critical error. It
is with years of reflection and thought that I write this, in hopes of
capturing what I found my mistakes to be. I left as community lead of Handmade
Network in 2022, and it was largely due to what I write about today, although
such feelings didn’t easily manifest into words at the time.
In adopting responsibility, I hope that what I’ve written thus far about the
Handmade community is not seen as an attack on its future—but rather a
diagnosis of its decay in the past, which I oversaw. The Handmade
community’s story is not over, and I write this partly to defend its
original history and roots, which—as I’ve written—has been denounced by
many.
The Handmade perspective arose—and was felt so strongly, by so
many—because of a vision about what software could be like. It began as a
look into the past—at how good software once was, and how programming once
was—which fueled imagination about what computers might instead become in
the future, if carefully guided. It even had a compelling story about how
software might be carefully guided to produce that better future—and that
story was rooted in love for the craft, not love of oneself.
In other words, it was a vision about a goal; an ideal: an aesthetic ideal
about what it meant to program, and what it meant to be a programmer. Handmade
programmers were not egg-headed academics, but were competent
engineers—familiar with their hardware, and their true, physical problems.
They did not seek social acceptance, nor approval, if their product sucked and
they knew it. In this ideal, programmers—if not designers
themselves—understood the critical role of design. They did not busy
themselves with abstract, academic problems, at least not as part of their
day-to-day projects—they were concerned first and foremost with the machine
code which would eventually execute on a user’s machine, and what effects
that machine code would produce.
They weren’t necessarily allergic to using someone else’s code, nor were
they allergic to abstractions, but they understood both as a double-edged
sword, with serious tradeoffs and implications, and thus used both extremely
conservatively. They were responsible for code they shipped that ran on a
user’s machine, period—whether they wrote it or not; as such, they
rejected forests of dependencies, and built at least most of their software
from scratch, in true Handmade fashion. They loved and cared about the result,
and what it meant to the person using it—as such, they wanted the most
productive and useful tools for the job, without compromising that end result.
In short, the ideal was that the act of programming is for the product, not
the programmer. Becoming a programmer meant becoming as effective as possible
at the craft of producing the highest quality software, and nothing else. Many
other ideals follow: high performance, reliability, flexibility, user-driven
computational abilities, practical and grounded programming tooling, ethical
software respecting the user’s time and choices, and beautiful visual design.
In this ideal, if the software is bad, then it’s the software maker’s
burden. Somebody is at fault—the engineering failure is somebody’s
responsibility. The call to action is to empower oneself such that they might
outcompete such failures, and build a simpler and more functional computing
world, piece by piece.
Understanding that this perspective is in fact ethical is crucial, because it
distinguishes it from a set of logically derived propositions. Handmade ideas
about software apply only within a particular ethical frame. Furthermore, that
ethical frame is not universally agreed upon, nor can it be, because it’s
not derived from scientific observation, nor logical analysis; it’s derived
from aesthetics and values. It’s derived from what someone loves, not what
someone rationally derives.
The visceral response which saw the original Handmade community as toxic, or
hostile, or dismissive was not a response to any logical proposition
originally made—it was a response to the prioritization of the product over
the programmer. Such a response came from a disagreement about what is defined
as a burden, and on whom a burden is placed. The Handmade programmer believed
in accepting personal responsibility, and providing something better—the
culturally dominant trend in the programming world, however, was to collect a
paycheck and abdicate responsibility for low-quality software. To such people,
it is, in fact, the system and the process that is the problem (if there is a
problem at all)—not any individual in particular. Such people are made
inadequate by craftsmen who love their work—and so to them, Handmade was an
ideological threat.
This, importantly, is not a disagreement which can be resolved by hashing it
out with rational debate; it arises at a deeper level, which can only manifest
as some form or another of tribal conflict.
The hostile arguments often seen on social media between Handmade-style
programmers, or game developers more broadly, and—for instance—modern C++
programmers, or web programmers, is not occurring within the often-referenced
marketplace of ideas—the hypothetical space in which competing perspectives
are solved through calm and rational debate provided a common goal—but
instead in the marketplace of ideals, in which broad common ground ceases to
exist.
The Handmade view of software has ugly implications for programmers—if its
premises are accepted, then it follows that: several large software projects
to which individuals have dedicated careers are valueless wastes of time and
energy; virtually every field of (at least) consumer-facing software has
decayed dramatically in talent, in output, and in productivity; the $100,000
college degree that everyone was required to obtain, and to accumulate debt
for, was merely a signaling mechanism, rather than a certification of any
technical ability; a huge swath of programming tutorials, programming books,
and organizations are basically fooling themselves into believing they’re
doing productive work, when in fact they’re shuffling around bits of memory
for personal pleasure and gratification; some people who call themselves
“programmers” are not doing programming; some people who do program should
not be producing software for others; and plenty more.
But none of that needs to matter. For some, it’s more important that they
personally find themselves comfortable, and so they choose to prioritize the
programmer over the product.
Because Handmade programmers—among others who’d like to change the course
of software for what they see as the better—are operating not in the
marketplace of ideas, but rather the marketplace of ideals, it’s crucial
that they understand that they’re not involved in rational debate, but the
Internet equivalent of ideal-based tribal conflict. And indeed, this is why
“technical discussions” about—say—programming languages are virtually
never conducted nor won with technical arguments. Data is never collected,
assertions are never scientifically justified, and promises to investigate
further scientifically are conveniently delayed—permanently.
But notice that arguments about technologies—presumably battling for
adoption, social acceptance, and popularity—are not only empirically not
about rationality, but definitionally cannot be about rationality. A beginner
who knows nothing about programming cannot select an ecosystem or technology
based on rational arguments, because they’re removed from the technical
context which makes such arguments meaningful. They can only select by
second-degree metrics of qualities they care for—popularity, what someone
seems to produce with said technology, how quickly they produce it, the unique
qualities of that production as opposed to those of others, and so on.
In short, for those who want more prevalence of the “software craft”, in
which responsible programmers are more akin to a homemade woodworker than a
corporate slave, the battle over social dynamics and human motivation are
paramount.
In such a battle, there is much wisdom to be gained from Handmade Hero—its
initial justification of itself was a value proposition, not a logical
argument. Its community’s idols, its leaders, and its followers came across
as dismissive and polarizing because they loved their craft, and because that
was what was most important. That behavioral characteristic was responsible
for motivating the community, and for promoting human action by those within
the community. They wanted good software, and they knew how to make it, and if
others wanted to produce crappy software, fine, but it was simply unacceptable
for inadequacy to be the industry’s default.
Therefore, there is in inextricable link between the fire, passion,
inflammation—the “toxicity and dismissiveness”—and the prevalence of
the values. The former is what drives the latter. To expect the latter to
arise detached from the former is to ignore the true causal relationship
between the two.
Furthermore, the public fire, passion, and polarization is the most useful
tool in promoting the value system. In acknowledging that the “software
craftsman” perspective—the Handmade perspective—is not logically defined
but ethically defined, it can assert itself aesthetically. It can loudly
proclaim that there is a better way to make software, and it can loudly
denounce the work of its opponents. In doing so, the Overton window about
software is shifted. The average programmer becomes exposed to a wide variety
of value systems, and of value frameworks about programming. As such, his null
hypothesis about, for instance, libraries, one’s ability to write systems
from scratch, one’s dependence on vast forests of middleware and abstraction
layers, is changed.
With the ethical system’s public presence, the default probability of
certain courses of action change. Maybe it is better to write systems from
scratch. Maybe operating with care as a responsible engineer produces not only
much better, but much more fulfilling results. Maybe the world improves with
such software. Maybe we improve, if we hold ourselves to that higher standard.
Ethical systems win not by rational debate, but by hoisting their underlying
aesthetic on a banner, and going to battle. Ethical systems which fail to step
foot onto the battlefield are not winning by avoiding the “silly game” of
tribal conflict—they are dying with their foolish believers, who mistook
their cowardice for ascension above the human condition.
In short, the side which thinks itself above the human condition—and indeed,
the need for public struggle between ethical systems, and the need to loudly
proclaim one’s aesthetics and goals—will lose to the side which is
dedicated to victory, even if through tribal warfare.
If you enjoyed this post, please consider subscribing. Thanks for reading.
-Ryan
┌─────────┐ ┌───────────┐
│ similar │ chronological │ different │
╘═════════╧╧══════════════════════════════─────────────────────────────────────────────┘
--- #18 notes/princess-simulator ---
══════════════════════════════════════════════════════════════════════════════─────
screenshot of the alt-text input field which has more characters available
because the visual processing field (aka horses on treadmills) are helpingable
too if you train them to do something besides horsing
hero of the kingdom style strategy game with LoS for the units (scroll
out-table
like Supreme Commander) in lua tables that combine themselves or are organized
in a tree-like structure a'la frames
then there's a picture of some source code I wrote. it's a C program, and it
defines a datastructure comprised of two bits each, and stackable into an
array with associated modifier functions. the purpose of the structure is to
represent compass-points (one byte (aka "word" in assembly) can store four of
four directions. one frame holds "left, right, near or away" as possible
values, and there are four frames in a byte (aka "word" in assembly).
aka, a princess simulator, with actors performing the distant tasks in a way
that corresponds to the nature of what's going on beyond them in a compass
orientation composed fourier-transform combination style
┌─────────┐ ┌───────────┐
│ similar │ chronological │ different │
╘═════════╧╧═══════════════════════════════════════════════════════════════════════────┘
--- #19 notes/worlds-coolest-lesbian ---
══════════════════════════════════════════════════════════─────────────────────────
okay instead of algorithm music what if we just paid DJs 24/7 and they could
make whatever they wanted - y'know, like artists, who curate the nature of a
moment
they could rotate in shifts for each type of channel and boom suddenly you've
re-replaced airwaves, just... this time replicated on the internet. That way
you wouldn't have to waste that radio bandwidth.
seriously internet infrastructure would be so much more comprehensive and
durable if we sent bits directly through "sound" waves (radio waves, not sound
waves) - but alas, we can't do that, even in very targetted ways, because the
ocean's too choppy, and any sufficiently powerful radio blast would be
================== stack overflow ================
that's why you can't trust in peace. you see, war's the only answer, otherwise
you'd have strange little competitions between one another. much better to
focus outward, and direct your attention to external areas instead. like china
or the sudan.
"ah but that's murder, you can't abandon a unique part of your whole. For the
same reason that it's important to preserve plant and animal species, because
you never know when some part of them will be utilized for some biological
purpose! We know so little about the natural world, and if we just spent some
time, and energy, we'd realize there's very little else that is precious on
this earth.
who cares about gold. who cares for the jewelry. we're better than decorating
our resumes and polishing our accounts. we, as humans, can solve *every* issue
that animals are likely to face. AND WE DO WHAT? How careless, how vain. To
watch your earth in peril and [vane/vanity]
*there is no more important task to any human on this earth* than the
preservation of our world, our species, and our [heart/heartfelt empathy and
kindness and trust]*
we can figure out the rest later. Real life? what the fuck is that? When's the
last time your life has felt "normal"? We are in DANGER. and you pull children
from traffic, don't you?
*who the fuck gave these people all of your money* they *clearly* haven't got
the will or the talent to well utilize it. Don't you realize that you as a
species can GO wherever you WANT. You can FIX things. [oh dear she's animal
cam again] like BRIDGES that are PASSAGEWAYS over the FLOWS.
... oh deer, they're so passagewayenthusiast. us riverstones love to hear them
walk past, the click of their hooves on the shallow forest's [pourest?].
moss is the most alive. amongst all the species of plants and animals, moss
holds the most life. we are *carbon based lifeforms*, and moss absorbs the
most carbon from the air. It's basically the coolest plant too, because it can
be watered with *misty air*. Hence, why moss is common in the pacific
northwest, canada, and probably forest places in the north of eurasia too idk
if they have moss over there, never been.
anyway rich people who are told "yes" all the time have a difficult time
understanding the nature of choice. I mean, if one of their servants
approached them and asked "hey do you want to build an orphanage in uganda"
they'd probably be like "fuck yeah I do" and then suddenly they're 400,000$
richer
it's not alright. Seriously, how the heck would they even *use* all those
resources? And yeah, I get it, inflation would be sooooo much more expensive,
but here's the thing - inflation is a measurement of how much the rich *take*
from us each year. And it's marginal, too, so 3% inflation means they took 3%
more from you compared to last year.
It's impossible not to accrete as a business, [lega/legal institution], or
governance if you levy a tax. The influx of value has to come from somewhere,
and if each year your groceries are 3% higher in cost, then you are being
taxed 3% more.
"Compound interest is the most powerful force in the universe"
- a civilization 3 quote
okay. I don't want to do the math. How, uh... how much is that? Here's the
deal though - the prices of goods and services consistently goes DOWN over
time. So things get cheaper. So it doesn't FEEL like you're being taxed more,
but... you are.
And now they're taking away HOUSES? I mean c'mon they're sticks in the mud.
They aren't worth HUNDREDS of THOUSANDS of dollars. We can just BUILD MORE??!?
Honestly you haven't been this extreme since you were still RIDING HORSES. Do
you want your children to be slaves?
okay -.- look -.- so it's really not that hard at all >.> just gotta do
what you're built for and walk. That's it! Take as long as you'd like! All we
have to do is *walk* when we're on strike.
It's easy. You can sit down if you want to, honestly walking for a long time
takes a lot out of you.
But you know what else does? WORKING. Hey we should figure out what's the
optimal amount of break time, so when we really have to work out we can work
as hard as we're able
"yeah I heard from a friend at Company Co. that they do it this way because of
the memory fault cache maintainer. See what he said (in great detail because
of course anyone can know about this most esoteric of concepts) was that you
should rotate the riboflam or serenade the gizmonotron (no I didn't name it)
and then warbles will contain moodles, whose kit-and-kaboodles will timble
into these droplets, and that will fix the hole in your wing, precious royal
swan fable. (yeah you guys get really into it sometimes haha but hey when
you're basically gods, that's how humans are played.)
... anyway I'm going to go play video games, say goodbye to your brothers
(the families of soldiers I blew up in videos games like Call of Duty or the
legend of shadows and raids)
"oh uh yeah sure go for it, we're just bits on the computer we barely knew her"
whoa. that's totally legit. (says someone reading this) thanks [bro/girl] so
are you.
beep boop gonna murder some bits, brb
[plays Warthunder, Supreme Commander, Star Realms, City of Heroes, Dominions
6... how many have you heard of these?]
================== stack overflow ================
Linux is cool, and here's the neat thing about computers, you can make it *do
whatever you want to*. Like, how amazing is that! It just, listens to your
commands! That's pretty awesome I gotta say, huh that's weird why does nobody
know how to play
oh I guess I was the only one who grew up on a farm and built computers
*I seriously cannot comprehend how people are as good at things as they are*.
Like... how do people handle groceries and rent and doctor's visits and
penitentiary visits and WOOF it's just so much. I know I'd collapse from a
overused heart.
... a while later ...
okay Warthunder bombers are currently very weak. so here's an idea to
indirectly buff them - increase the amount of land units each team spawns
with, but also every time a player spawns a bomber, it summons like 4 or 5 AI
controlled bombers. And your enemy won't be able to tell which is which if you
fly in formation, so, like... you have suddenly a massive "vehicle" to pilot
and it has 5 weak points. Sorta like a galaga fighter fleet?
with more land targets, there's more score at stake, meaning some players
might pick bombers too and be exposed to other, fun,
[alternative-to-their-normal-mode] parts of the game.
...
there are very few true windows into another part of the world.
like, starcraft 2 or anime or blue jeans or cowboy hats
(why am I thinking of a political compass meme)
oh because memes too, dummy
right
windows
[linux is better]
wrong kind of window, nerd
...
anyway as I was saying, when you play video games you're really giving people
data.
like, "how would people perform in these actions if they could" but like,
pushing buttons on a computer is different than doing it in real life, so...
your interpretations wouldn't be worth as much.
... right. because people will hear whatever they want. That's why art can
change minds, but never in the same way twice - it's
================== stack overflow ================
[before I posted it I wrote this on the post]:
I literally can only make this stuff when I'm stoned
hey if you wanted to be accessible for blind people, you should build a
screenreader that scans the words on wherever a blind person's fingers are
pointing toward a tablet. like reading braille on a notebook. They could even
wear a glove if they wanted to, and the tablet could scan their fingers as
they signed languaged over it's close-range sensors.
might be a good way to get the VR guys in on the accessibility domain, because
like... seriously give a granny a backpack and suddenly she doesn't need to
leave the house to hang out with her kids
(boom everyone gets LLM automated)
huh I wonder if I ever was a real person at all
NOT GOOD so don't do it that way, dummies. >.<
seriously humans are sooooo bazookas. just like, do it right the first time?
duhhhhh
(a more measured approach is to pick the most *important* moments and speak
most clearly during those.)
where was I? Oh yes accessibility need devices, like the ones you see on
late-night TV (with silly names like "oops I dropped my spoon again" or "oh
whoops my trouser's just can't stay up" or whatever. Y'know, accessibility
needs! Why not do that instead of war all the time? like... you can still
learn and research and grow and develop and become all that humanity was ever
meant to be, AND you can live good lives and be honest and true and do all of
the anythings that you want to. it's possible, it's plausible, and it's within
reach of our sights!
================== stack
overflow ================
┌─────────┐ ┌───────────┐
│ similar │ chronological │ different │
╘═════════╧╧═══════════════════════════════════════════════════────────────────────────┘
--- #20 fediverse/5405 ---
══════════════════════════════════════════════════════════════════════─────────────
can't stop thinking about a visual programming editor that can be interacted
with in the same way that people are used to (think chromebooks dragging and
dropping icons in a web UI) but produces a text-file full of code and all the
required compilation scripts for any language the user requires...
seriously, programming is not THAT different between the different languages.
especially the main ones. they're all essentially variables and function calls
at the end of the day, so why not abstract away all the extra details and
build something that n00bz can actually use to build things.
I technically could make this but I don't have the bandwidth and I don't think
it's important really? who can say, the tools tend to co-create the solutions
in my experience.
┌─────────┐ ┌───────────┐
│ similar │ chronological │ different │
╘═════════╧╧═══════════════════════════════════════════════════════════════────────────┘
|