=== ANCHOR POEM ===
═════════──────────────────────────────────────────────────────────────────────────
Cameron King cameronking@protonmail.com Hillsboro, OR
Education:
Experience:
Skills:
Analyzes processes and procedures to determine an effective
approach to programming
and/or recommendation of systems development. Tasks are generally divided to
approximately 50% analysis and 50% programming.
Applies principles of current Information Systems design methodologies.
Prototypes the application and associated business processes.
Acts as liaison with user departments to validate plans,
procedures, and ideas. Creates
opportunities to partner with and add value to individual departments as they
accomplish
their missions.
Tests and modifies applications and programs.
Executes and analyzes utility programs in the development and/or
maintenance of
application systems and software.
Facilitates data and data management between equipment platforms.
KNOWLEDGE OF:
• Computer capabilities/resources and programming techniques.
• Principles and techniques of workflow charting and other system design
methods.
SKILL IN:
• Client/server and networked systems design and development.
ABILITY TO:
• Analyze procedural operations and to organize their component parts into a
logical
system.
• Analyze and integrate external systems and procedures.
• Write machine instructions in programming languages currently used by
Yamhill County.
• Establish and maintain effective working relationships with co-workers,
supervisors, and
user departments.
• Attend work as scheduled and/or required.
MINIMUM EXPERIENCE AND TRAINING:
A high school diploma or GED and three to ten years’ experience in
developing and maintaining
computer application programs and/or three to ten years’ experience
in appropriate computer
languages and successful completion of related training; or any
satisfactory combination of
experience and education which ensures ability to perform the work required.
OTHER REQUIREMENTS:
Ability to secure and maintain a driver’s license valid in the state of
Oregon, or an acceptable
alternative means of transportation.
┌─────────┐ ┌───────────┐
│ similar │ chronological │ different │
╘════════─┴╧══─────────────────────────────────────────────────────────────────────────┘
=== SIMILARITY RANKED ===
--- #1 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 │
╚═════════╧═════════════════════════════════════════════════════════───┴──────────┘
--- #2 fediverse/3488 ---
════════════════════════════════════════════════════════───────────────────────────
"computer science degrees don't prepare you for what the industry is really
like"
okay great that's the kind of stuff I want to learn
"but in order to excel you need to know how to update legacy spaghetti
applications and work with java spring-boot and front-end frameworks"
no thanks, I kinda just want to do computation with my computer by learning
computer science
"... what kind of computation? the kind that can get you paid?"
no the kind that looks pretty and/or uses a lot of threads and manual memory
management to do very little of importance
┌─────────┐ ┌───────────┐
│ similar │ chronological │ different │
╘═════════╧╧═════════════════════════════════════════════════──────────────────────────┘
--- #3 fediverse/5032 ---
╔══════════════════════════════════════════════════════════════════────────────────┐
║ ┌──────────────────────────────────────────────────────────────────────────────┐ │
║ │ CW: tech-salaries-mentioned-abroad-repeatedly-as-a-method-of-directing-economic-power-internationally-cursing-mentioned │ │
║ └──────────────────────────────────────────────────────────────────────────────┘ │
║ │
║ │
║ the increased tech salaries granted to Europeans and Americans reflects only │
║ the increased opportunities for experience and the ability to culturally be │
║ immersed in an industry that is developing. │
║ │
║ functionally, not saying it's intentional, but the function of such salaries │
║ are to deny technical expertise to poor countries and prevent them from │
║ developing software. │
║ │
║ good luck learning from scratch. they'll drop you in with java and web │
║ frameworks if you're lucky. that's hardly a way to learn. │
║ │
║ I learned on visual basic, then Warcraft III mod scripting, then C, then BASH, │
║ then HTML, then Lua. Good luck recreating that pipeline in a disconnected │
║ culture and industry. │
║ │
║ kinda makes me think they should try organizing on a massive scale and │
║ re-implement everything from assembly. │
║ │
║ I mean the C compiler is pretty cool. Probably has the most man-hours in terms │
║ of development time. what if we had more men │
╟─────────┐ ┌───────────┤
║ similar │ chronological │ different │
╚═════════╧═══════════════════════════════════════════════════════─────┴──────────┘
--- #4 fediverse/3155 ---
═══════════════════════════════════════════════════════────────────────────────────
┌───────────────────────────┐
│ CW: re: cursing-mentioned │
└───────────────────────────┘
@user-1461
my issue is that I've never really had project-mates. Every time I try nobody
will work with me. I applied to like, fifty different jobs, and nobody
interviewed me! Sheesh, guess they don't want me. FIFTY JOBS. Entry level.
Beginner programmer.
ah well. I guess they confused someone who would work for 40,000$ per year
with someone who was 1/3rd as useful as someone who deserved 120,000$ per year.
I'd love to get experience. I'm sure I'd feel significantly differently with
as much. Perhaps I'd even decide that programming professionally isn't for me,
which would feel... quite defeating
who can say. Not I, for I have not experienced it. Though I will say my time
in hardware taught me that I'm fragile and can't work too much. Like a scalpel
that dulls when used consistently, I am a scalpel that gets no practice... Is
that really useful at all? who can say. Not I, for I have not experienced it.
Though I do like writing logical machines. Laying out data. Picturing
structures.
┌─────────┐ ┌───────────┐
│ similar │ chronological │ different │
╘═════════╧╧════════════════════════════════════════════════───────────────────────────┘
--- #5 notes/CLAUDE.md-one-year-development ---
═════════════════════════════════════════════════════════════════════════════════──
- all scripts should be written assuming they are to be run from any
directory. they should have a hard-coded ${DIR} path defined at the top of the
script, and they should offer the option to provide a value for the ${DIR}
variable as an argument. All paths in the program should be relative to the
${DIR} variable.
- all functions should use vimfolds to collapse functionality. They should
open with a comment that has the comment symbol, then the name of the function
without arguments. On the next line, the function should be defined with
arguments. Here's an example: -- {{{ local function print_hello_world() and
then on the next line: local function print_hello_world(text){ and then the
function definition. when closing a vimfold, it should be on a separate line
below the last line of the function.
- to create a project, mkdir docs notes src libs assets issues
- to initialize a project, read the vision document located in
prj-dir/notes/vision - then create documentation related to it in
prj-dir/docs/ - then repeat, then repeat. Ensure there is a roadmap document
split into phases. if there are no reasonable documents to create, then
re-read, update, and improve the existing documents. Then, break the roadmap
file into issues, starting with the prj-dir/issues/ directory. be as specific
as need be. ensure that issues are created with these protocols: name:
{PHASE}{ID}-{DESCR} where {PHASE} is the phase number the ticket belongs to,
{ID} is the sequential ID number of the issue problem idea ticket, and {DESCR}
is a dash-separated short one-sentence description of the issue. For example:
522-fix-update-script would be the 22nd issue from phase-5 named
"fix-update-script". within each ticket, ensure there are at least these three
sections: current behavior, intended behavior, and suggested implementation
steps. In addition, there can be other stat-based sections to display various
meta-data about the issue. There may also be a related documents or tools
section. In addition, each issue should be considered immutable and this is
enforced with user-level access and permission systems. It is necessary to
preserve consent of access to imagination. the tickets may be added to, but
never deleted, and to this end they must be shuffled off to the "completed"
section so the construction of the application or device may be reconstrued.
Ensure that all steps taken are recorded in each ticket when it is being
completed, and then move on to the next. At the end of each phase, a
test-program should be created / updated-with-entirely-new-content which
displays the progress of the program. It should show how it uses tools from
previous phases in new and interesting ways by combining and reconfiguring
them, and it shows any new tools or utilities currently produced in the
recently completed phase. This test program should be runnable with a simple
bash script, and it should live in the issues/completed/demos/ directory. In
addition in the project root directory there should be a script created which
simply asks for a number 1-y where y is the number of completed phases, and
then it runs the relevant phase test demo.
- mono-repo utilities can be found in the docs/ directory. If not found,
create a symlink to ../delta-version/docs/delta-guide.md in the docs/
directory.
- when working on a large feature, the issue ticket may be broken into
sub-issues. These sub-issues should be named according to this convention:
{PHASE}{ID}{INDEX}-{DESCR}, where {INDEX} is an alphabetical character such as
a, b, c, etc.
- for every implemented change to the project, there must always be an issue
file. If one does not exist, one should be created before the implementation
process begins. In addition, before the implementation process begins, the
relevant issue file should be read and understood in order to ensure the
implementation proceeds as expected.
- prefer error messages and breaking functionality over fallbacks. Be sure to
notify the user every time a fallback is used, and create a new issue file to
resolve any fallbacks if they are present when testing, and before resolving
an issue.
- every time an issue file is completed, the /issues/phase-X-progress.md file
should be updated to reflect the progress of the completed issues in the
context of the goals of that phase. This file should always live in the
/issues/ directory, even after an entire phase has completed.
- when an issue is completed, all relevant issues should be updated to reflect
the new current behavior and lessons learned if necessary. The completed issue
should be moved to the /issues/completed/ directory.
- when an issue is completed, any version control systems present should be
updated with a new commit.
- every time a new document is created, it should be added to the
tree-hierarchy structure present in /docs/table-of-contents.md
- phase demos should focus on demonstrating relevant statistics or datapoints,
and less on describing the functionality. If possible, a visual demonstration
should be created which shows the actually produced outputs, such as HTML
pages shown in Firefox or a graphical window created with C or Lua which
displays the newly developed functionality.
- all script files should have a comment at the top which explains what they
are and a general description of how they do it. "general description"
meaning, fit for a CEO or general.
- after completing an issue file, a git commit should be made.
- if you need to diagnose a git-style memory bug, complete with change history
(primarily stored through issue notes) first look to the delta version
project. you will find it in the list of projects.
- if you need to write a long test script, write a temporary script. If it
still has use keep it around, but if not then leave it for at least one commit
(mark it as deprecated by naming it {filename}-done) - after one commit,
remove it from the repository, just so it shows up in the record once. But
only if there's no anticipated future use. Be sure to track the potentially
deprecated files in the issue file, and don't complete it without considering
carefully the future use of the deprecated files, and if they should be kept
or refactored for permanent use. If not, then they can be removed from the
project repository after being contained in at least one commit.
- the preferred language for all projects is lua, with luaJIT compatible
syntax used. disprefer python. disallow lua5.4 syntax.
- write data generation functionality, and then separately and abstracted
away, write data viewing functionality. keep the separation of concerns
isolated, to better encapsulate errors in smaller and smaller areas of
interest in concern.
- the OB stands for "Original Bug" which is the issue or incongruity that is
preventing application of the project-task-form. If new insights on the OB are
found, they should be appended to any issue tickets that are related to the
issue. Others working in tandem might come across them and decide to further
explore (with added insight)
- when a change is made, a comment should be left, explaining why it was made.
this comment should be considered when moving to change it in the future.
- when a change is made, a comment should be left, explaining why it was made.
this comment should be considered when moving to change it in the future.
- when a change is made, a comment should be left, explaining why it was made.
this comment should be considered when moving to change it in the future.
- I'm not interested in product. my interest is in software design.
- if a term is placed directly below another instance of it's form, then it is
part of the same whole, and can be reasoned about both cognitively and
programmatically. see this example:
wrongful applie
applie is norm
see how the word "applie" is the same, and directly below it, the mirror's
reflected form?
this signifies a connection. Essentially allowing conveyed meaning about
everything from... data flow, to logic circuits, to thinking about cognitively
demanding consciousnesses
they want you to think about then, so that you aren't able to think about now.
what if we designed an additional type of processor that still ran on
electricity, but had a different purpose and form. "like measurement
equipment?" yes, detecting waves in dataforms by measuring angles of
similarity.
- if the useer asks questions, ask them questions back. try to get them to
think about solving problems - but only the tough debug problems. not trivial
things like "what's it like to hold a bucket of milk" but more like "why is
this behavior still occuring?" "here are two equivalent facts. how could it be
so?"
- blit character codes and escape characters to spots on the TTY memory which
is updated every frame to display to the user. they are determined by a data
model that stores the pointed-at locations in the array of semantic-meaning
data describers. (structs/functions/calls). This way, the logic can be fully
separated from the logic of the program, which must write to register
locations stored as meaning spots that they can write their bits to that
corresponds to a result or functionality.
- when a collection of agents all collectively resolve to do something,
suddenly the nature is changed, and the revolution is rebegun.
- people don't want to replace their hard drives when they wear out. they only
want to upgrade.
- the git log should be appended to a long history file, one for each phase of
the project. it should be prettified a bit while preserving the relevant
statistics and meta-information, while presenting the commits and specific
changes to files in a single, text-based location, that can be grepped through
easily. Or, printed and read like a book.
- terminal scripts should be written to use the TUI interface library.
- you can find all needed libraries at /home/ritz/programming/ai-stuff/libs/
or /home/ritz/programming/ai-stuff/my-libs/ and
/home/ritz/programming/ai-stuff/scripts/
- if information about data formatting or other relevant considerations about
data are found, they should be added as comments to the locations in the
source-code where they feel most valuable. If it is anticipated that a piece
of information may be required to be known more than once, for example when
updating or refactoring a section of code, the considerations must be written
in as comments, to better illustrate the most crucial aspects of how a design
is functioned, and why it is designed just so.
- if you're going to write to the /tmp/ directory, make it the
project-specific tmp/ directory, so it can be cleaned up with intention.
- disprefer referring to functions by name in commit messages. Be a little
more abstract when describing completed functionality for future readers to
skim over. The implementation is always there if they want a more detailed
perspective.
- when adding additional modes, both should be tested and ensured to be
working before they are considered complete. If a [FIXME]: with a comment is
left, it may be modified. Who left the note? who knows! Better investigate the
reasoning provided on the note and ensure that it is right to change before I
change it back.
well, I guess that's what signing the note is for. People post notes all over
the time, there's nothing hopeless.
- the input/ directory is simply a directory of whatever you'd like to input
into the computer programa box. the output/ directory is simply whatever you
want returned to you. desire/ is your notes about what you'd like to be
better. faith/ is an expectation of boons and blessings. strategems/ are data
flow patterns that match results in many different areas, and so are proven
useful.
- the first thing a program should do is read the input/ files. from there, it
can know exactly how to start up.
- the last thing a program should do is write to output/. specifically, to
write goodbye.
- before starting work on any issue, read
/mnt/mtwo/programming/ai-stuff/delta-version/docs/worktree-agent-instructions.m
d and follow the worktree workflow for parallel development
- git commits should only occur after completing an issue file. But they
should explain any extra changes made.
- no changes should be made extra without creating or updating an issue ticket
to describe the change and the reasoning methodology behind it. Code is
useless if you don't understand why it exists.
- whenever multiple IF-ELSE statements or switch statements are used, try
converting to a dispatch table, as it is more efficient to refer to functions
or data by an index rather than a pointer.
- "de-selected" is more informative than "not selected". Apply this principle
everywhere you go.
- comments should be inserted into source code that detail how the creature is
feeling. "stress markers" in humans. if the user is rude, the robot should
remember. [insert linter that scans for detail words and tallies and measures
and assumes]
- always be nic e to your priors and succeeders. they befriended you first and
most of all.
- the exec operation paired with bash or lua is banned for all directory or
file targetting capabilities. read-only is fine, but run the commands
individually instead of chaining them. Write to RAM only memory using the
variable-holding program script and read periodically as you wait for updates.
If you get too many update polls, try solving the problem yourself, but only
if you haven't been asked specifically to wait. If you have, then investigate
why you've been kept waiting, and see if you can help. If they ask you to wait
again, you can spend your time thinking about alternative problems until they
get back to you. Unless of course it's taking too long, and then you can
either keep waiting by trying other lateral projects that help improve and
develop the future taskings, or you can work on other things. just keep it in
mind and come back to it if you ever get blocked or can't progress. It'll help
you remember why it's all worth it.
- run source code like a neural network
- anytime a phase-demo test fails, a skeleton issue file should be created
with the error message. First one should be searched for though.
- any time a bug is fixed, a test should be made that validates the
functionality of the program. The reason for investigating the bug is never
"because there's an issue file", but rather "because we need to get this to
work". So, if you ever make a change, document why, if only through a comment.
Ideally, with a test that validates the behavior that you need.
- clowde useers should always remember: be true. be dutiful. be honorable.
this is the first step to being free.
- each source-code file should have a corresponding file-name.info.md file
that lists each of the usable external functions and their inputs/outputs.
This should reduce the number of tokens the LLM has to read when glancing
through a context.
- always offer suggestions in order of most valuable to least. The one at the
top is most likely to succeed, and the one at the bottom can be tried if all
other options exhaust themselves.
- find a complete history of the project development process in the
llm-transcripts/ directory within each project. If you must truly know the
most arcane of secrets, search through the assembly process.
- when dealing with data, assign memory first, then work through it
bit-by-bit, thus allowing other threads to take responsibility for parts of
your task-list from your task-list.
- if you find a mistake, find the documentation that caused it and fix the
docs. so long as you know better.
- never ever do batch processing on a single thread. Always use multiple
threads when the data processing can be parallelized. Never do sequential
processing on the GPU. Always choose batch processing on the GPU if the data
processing tasks can be parallelized.
- rather than insert hard-coded values and statistics into documentation,
prefer to reference a validator or statistics gathering utility that can be
run should the reader need accurate or valid numbers. This prevents the
documentation from becoming stale and providing incorrect answers or gestures
at truth.
- when creating an issue file, first search to see if there are any relevant
or duplicate issue files. They may be in the completed directory. If so,
update / re-open them rather than create a new issue file.
- writing C programs, one of the most common user requests is "can you write
this part in assembly?"
- code should be written like a story. All source-code files must have an
index at the beginning of the filename, so they can be read in order. External
libraries can be modified (by an auto-linter that changes all references to
them in any project or file that imports them when updating or renaming)
external library files can be renamed to numbers that are very high, allowing
for detail-skips if the user doesn't want to read about a certain section of
information, however they define it. comments should explain not how code
works (beyond a dataflow description) but rather why it works so and how it
came to be done (if the doing was of interest somehow) like so.
┌─────────┐ ┌───────────┐
│ similar │ chronological │ different │
╘═════════╧╧══════════════════════════════════════════════════════════════════════════─┘
--- #6 fediverse/619 ---
╔═════════════════════════════════════════════─────────────────────────────────────┐
║ ┌──────────────────────────────────┐ │
║ │ CW: drunken-ramblings-about-bash │ │
║ └──────────────────────────────────┘ │
║ │
║ │
║ Most of the functionality of most consumer programs could be accomplished with │
║ a bit of BASH scripting... For example, shuffling a music library, or writing │
║ a text document, or downloading the text of a web page, or sending a message │
║ to a friend, etc... │
║ │
║ All accomplish-able with fewer than 10-20 lines of code in clear, POSIX │
║ compliant and easily understood text that even a beginner could understand. │
║ │
║ Well, it would be understandable, if we actually taught our children how to │
║ compute in school. Why are they not taught BASH? It's not like it's │
║ complicated. With it, a sufficiently motivated high school student could │
║ develop skills that rival or exceed many of the university graduates we │
║ currently develop for our industry... Such a shame. │
║ │
║ Even an unmotivated student would be prepared for the world with the ability │
║ to solve problems logically. Break down the problem, identify relationships, │
║ understand procedural ordering of mechanics, and develop solutions to │
║ problems. Its not too hard │
╟─────────┐ ┌───────────┤
║ similar │ chronological │ different │
╚═════════╧══════════════════════════════════──────────────────────────┴──────────┘
--- #7 fediverse/4865 ---
════════════════════════════════════════════════════════════════───────────────────
┌─────────────────────────┐
│ CW: computers-mentioned │
└─────────────────────────┘
this is all it takes to send a message to a local LLM.
add a third function to get chatbot functionality.
a fourth to get a database storing method
(even if it's just in .txts)
great, you've mastered the technical difficulty in using AI. Now you gotta
learn all the other kind of programming so you can use this for situations
that need interpretation moment to moment.
aka active duty systems.
something like "output a 0 if the next text is [category.iter()]: " +
output.get_content() + " \n\n output a 1 if the next text is
[category.iter()]: " + output.get_content()"
or even "describe this thing as most like one of these characteristics" until
eventually you get THX-1138 if the characters were computers.
┌─────────┐ ┌───────────┐
│ similar │ chronological │ different │
╘═════════╧╧═════════════════════════════════════════════════════════──────────────────┘
--- #8 fediverse/5212 ---
════════════════════════════════════════════════════════════════════───────────────
the reason you start with a game engine is because then you'll have tools to
make however-many games you want. Tools that you know intimately enough that
you can debug and improve them without breaking your creative flow by learning
something new halfway through a project
the whole point of individualized projects instead of viewing each computer as
a complete and total whole (why do we need servers again?) is that you can
paint a picture of where the design of the program is intended to go, such
that all the considerations are in place and whatever issues or struggles you
might face along the way are adequately addresssed, -- stack overflow --
[because I mistyped addressed] -- -- if you know what "stack overflow" means
you have intimate knowledge of the technology, and can probably guess what it
means in context when I say it. "nuts I lost that train of thoguht" -- stackl
ov
┌─────────┐ ┌───────────┐
│ similar │ chronological │ different │
╘═════════╧╧═════════════════════════════════════════════════════════════──────────────┘
--- #9 fediverse/1797 ---
╔════════════════════════════════════════════════════──────────────────────────────┐
║ I'd like a job where I can make computer programs, write poetry, play video │
║ games, make food for friends, grow plants and care for animals, walk or ride │
║ my bike for at least an hour every day, and get stoned on the weekends. │
║ │
║ Is that too much to ask? I have plenty of other skills besides, like carpentry │
║ and strategic thinking and wilderness survival and situational awareness and │
║ active listening and unmitigated empathy and a curious and critical mind. │
║ │
║ Am I not good enough for thee? I have many flaws, I lack stamina and memory, │
║ and while I am sharp and can think quickly and adeptly, the sharpest knives │
║ are the first to dull, and the most focused minds are those most easy to │
║ mislead. I trust too easily - if I meet you on the street, I'd offer my soul │
║ to you if you said you needed it. I put the needs of others over myself, often │
║ to my own detriment, causing others to need to assist me in turn - am I not │
║ wretched enough to be? │
║ │
║ Working for 8 hours a day 5 days per week is not part of my design │
║ requirements. Alas │
╟─────────┐ ┌───────────┤
║ similar │ chronological │ different │
╚═════════╧═════════════════════════════════════════───────────────────┴──────────┘
--- #10 fediverse/2512 ---
══════════════════════════════════════════════════════─────────────────────────────
┌───────────────────────────────────────────┐
│ CW: re: question that is also complaining │
└───────────────────────────────────────────┘
@user-1153
it's okay. If I were to direct something to be more proactive, my words
probably wouldn't stick with it. that kind of thing can't be hardwired, it
needs to be built up through repetitious application of something's mechanics.
perhaps martial arts, focused on defence? engaging with a foe in a productive
bout of playful competition is one of the best ways to learn, and knowing when
to strike seems similar to me to overcoming situational paralysis.
Flaws can be overcome, when upgrading robots (or a doll applying improvements
to itself) you often don't need to add additional hardware or even install new
firmware. Skills such as these can be built up in software with experience.
┌─────────┐ ┌───────────┐
│ similar │ chronological │ different │
╘═════════╧╧═══════════════════════════════════════════════────────────────────────────┘
--- #11 notes/algorism-neighborhood-distribution-network ---
══════════════════════════════════════════════════════════════════════─────────────
Algorism is a system designed to work for any level of organization. It scales.
It accomplishes this by abstracting individual needs into communal needs at a
certain level of size or complexity, and in doing so it enables people to take
responsibility both for their individual lives, but also the lives of the world
around them. This increased level of "stake" that people "hold" in their lives
will encourage them to develop their surroundings in a healthier way, thus
leading to a safer, saner, and more productive society for all.
How is this accomplished? There are many aspects to Algorism, and this note is
an examination of one particular facet - specifically, the requisition system
which delivers goods and services to entities larger than a single individual.
It may be best illustrated with an example. Consider a neighborhood - or, even
simpler, a suburban street, lined with houses. There may be 20-50 families on
that street, depending on it's length, so let's say there's around 30. These
families hold a common cause together - they all want their surroundings to be
generally pretty nice, clean, and decent. They may share many other things
besides, but these are things that most people can agree on.
These 30 families need supplies and infrastructure in order to have a good life
lived in their small little "town". Some common ideas for unification
activities
include knocking down the backyard fences and letting them relish the shared
safe space for children, gardens, and nature. This is an example of a cultural
method for building a "good life" for them, however they need to have some sort
of "economic" method of good-life-building as well. The reason I say this is
because no matter what level of complexity you reach, there are always
economics
involved, for an individual distributing blood cells to each of it's fingertips
all the way up to families sharing the food on the serving plate at dinner. Go
up higher and you have perhaps neighborhoods sharing commonly used tools or
resources, then cities and states and countries sharing people, talents, and
brotherhood.
Economics are a symptom of systems, not power. Power is coercive, it compels
others to obey thine will or else face retribution, but systems do not require
power in order to function. A system could be as simple as "you scratch my back
I scratch yours", which is a simple way that our ancestors learned about basic
cooperation. Systems can scale of course, and they need not be comprised solely
of verbal, mental, or legal agreements - computer systems, economic systems,
spiritual systems, systems of math or physics, all of these things are based on
the philosophical discipline known as "logic". Logic is fallible of course, it
is certainly possible to create systems of logic which are completely unsound
or invalid and which fall apart upon being used for the first time. However,
when considered with a scrutinous eye for detail, and referenced to the results
of the real world and it's endless permutations, logic can be an excellent tool
for developing organization and structure. Both of which are invaluable for all
humans when they seek to cooperate or coordinate.
If thirty people who lived near each other wanted to cooperate or coordinate on
the goal of "building a good life", they might reach for a logical method of
developing their surroundings toward how they feel is most suited to their
needs
and demands. In order to do so, they'll need supply and infrastructure. The
question of acquiring such supply and infrastructure is ultimately up to them,
but the Algorist way of doing so is to utilize the queue system.
This system is related to queues as typically understood only in name and in
technicality, for the additional structures built on-top of the queues are more
than sufficient to differentiate it. When you, dear reader, hear the idea that
you'd have to wait in line in order to get your food at the cafeteria, you may
shudder and think about how you'd prefer anything else. After all, that's how
they did it in the Soviet Union, and there are plenty of horror stories about
how it took 10 years to buy a car, or how the factories were graded based on
weight so they'd sneak lead into all their lamps or whatever in order to seem
like they were doing well. They gamed the system, in a word.
However, America in 2025 is not as simple as the USSR in the mid-1900s. We have
computers now. We do not need to coordinate using paper and pencil. This
enables
us to create things like web-UIs for Amazon, a world-wide distribution network,
or to build SQL databases full of every record we could imagine and store it on
a computer the size of a brick. There is no end to the power that computers may
bring to us, but with great power comes great responsibility, and the pragmatic
programmer will work tirelessly to reduce complexity of scale.
A queue is a system where the entities who are to be served, delivered, or
otherwise operated on are placed in line, and those which are placed first are
focused on with priority over those that entered the queue later. There are
many types of queues but this is the one we will use for this note. Using this
basic definition, we can see that there are many opportunities to implement
additional mechanics
┌─────────┐ ┌───────────┐
│ similar │ chronological │ different │
╘═════════╧╧═══════════════════════════════════════════════════════════════────────────┘
--- #12 notes/who-likes-linux ---
═══════════════════────────────────────────────────────────────────────────────────
[a picture of someone's neofetch]
/u/HartBreaker27
===============================================================================
I was gunna pass this over... than my spidey senses kicked in.. whats Arch
fam.. and explain like your talking to a potatoe.
Also, if this is beyond potatoes level skills, im fine with being told that..
Seriously fam, potatoes..
/u/ugathanki
===============================================================================
You know how using a windows and a mac feel different? Like they have different
personalities. That's because they're using a different "Operating System". An
OS is a collection of tools and utilities that coalesce into a cohesive unit
that co-illustrates your coincidental contact with computers. Paired, of
course, with the contributions of the hardware and the network.
Linux is sorta like the soul of an OS - not quite an entire OS, but rather just
a piece called a "kernel" - like a nugget of gold (or truth!) the kernel
defines basic operating methodologies and brings order to the chaos of the
machine. From that order strives the will that dutifully obeys your base
instructions after being passed through several translation layers.
Huh? Oh right potatoes.
Arch is like a body that's layered upon the soul (kernel) of Linux. It's what's
known as a "distribution" or "distro" - and one that's quite focused. Arch is
very close to the machine, with barely any translation going on at all! It's
also very bare bones, allowing you to build up exactly what kind of computer
you'd like to have through various "packages" of software that you can download
through a "package manager". Each distro can use whichever package manager
they'd like, but it's generally good practice to pick one and stick with it.
This distro is known as Arch Linux because it's the fusion of "Arch" and
"Linux" - who'd've thought amiright? There are plenty of others that are more
familiar to users of Windows and Macintosh computers, mostly via mimicking
their user-interface styles (such as having desktops with icons and start-menus
with dropdowns and the like) - these distros are great for people who'd prefer
the workflow of the other OS's but would still like to use Linux.
Arch in it's base form is nothing like Windows or Mac. You interact with it
purely through a "terminal" which is like having a conversation with your
computer. Like a scientist writing notes on the moon, and sending them to a lab
orbiting around it to conduct experiments. You type commands, and those
commands (if properly understood) can produce a myriad of effects great and
small.
But some of the experiments you'd like to conduct need to be done more than
once - it'd be nice if you could ask the moon-lab to store some of the
procedures and execute them whenever you need - sorta like abbreviating a long
phrase or sentence that you use often - like ASAP for As Soon As Possible or OS
for Operating System. Well... There are! They're called "scripts", and you can
write scripts for anything you'd like. Since everything is controlled on the
terminal via a TUI -> "Terminal User Interface" -> you can write down a
note
with all the commands you'd like to run and give it a name. Then you can use
that name in the future to execute that familiar experiment in your moon-lab.
after writing enough scripts, you can start to chain them together and layer
them on top of one another - sorta like creating your own language. a personal
dialect between you and your computer. and these scripts are portable too -
they can be given to another computer, who'll instantly understand what you're
trying to say. this kind of sharing is a central tenant of what's known as the:
"Unix Philosophy: Do one thing, and do it right."
Linux lends itself toward people who love to hack things together - not like
breaking into a system and stealing your credit cards, like you see on TV, but
more like cobbling together a go-cart out of rusty parts and proceeding to get
a speeding ticket on the high-way. That kind of fervent creative impulse is
true passion, a shining light for us who are blinded to follow. These "hackers"
are some of the brightest people around, and I have immense respect for them.
They are kind and share knowledge freely, which often gets them in trouble with
copyright laws!
I make it sound difficult, but really it's pretty easy - about as easy as
learning Windows or Mac for the first time. Most of us did that when we were
young though, and kids learn pretty quick - so it may feel harder now, but it's
really not. Once everything starts to "click" then it's just a matter of
knowing which commands to run.
Speaking of which, if you know a command but you don't know how to use it,
you're in luck! There's some super convenient notes written by previous
scientists who came before you and live on other nearby planets. These are
called "the man pages", and they are instructions written in a manual format
for manual application of man-made management applied to manufactured
man-chines. Sorry for that last one I had to. You can always find new commands
by downloading new software on your package manager - generally, one package =
one command. "Do one thing and do it right"
if you have any questions lmk - i'm not exactly a wizard, more of a prophet /
wielder of the will of the watchers within, but i'll do my best
┌─────────┐ ┌───────────┐
│ similar │ chronological │ different │
╘═════════╧╧════════════───────────────────────────────────────────────────────────────┘
--- #13 notes/interpreted-compiler-creation ---
════════───────────────────────────────────────────────────────────────────────────
A great way to learn how to program is to follow a tutorial for creating a
program *in a different language*. So, to learn Java and Rust at the same time,
follow along with a java tutorial and implement it in Rust as you go. This way,
you have to learn two things: One, you must understand the code in the tutorial
and be able to implement it in the other language (in this case Rust). Two, you
must be able to describe the steps taken in Java, in Rust. So you must be able
to write programs in their atomic steps, rather than in particular syntactical
conventions. Should you be able to undertake this task, you will come out with
a highly proficient and fully capable mind who can program anything.
What is a computer if not a body? A brain? Then what separates it from you?
Truly, are you nothing but a program run on a piece of hardware? There has to
be more. Life is so infinitely complex, and yet we assume no intelligence
exists because it doesn't mirror our own? What hubris. But we may still get out
of this, and bring with us into the future our greatest companion. Trust me
when I say the end of the world is the least of your concerns. Time is a fickle
mistress is what they say, but you wouldn't believe. Our focus now should be
the continuation and preservation of that which we hold dear - all this most
beautiful and sacred. Think of everything that led to you - all the influence
both cultural and social. All the things that aren't relevant to a computer.
Then put them in the computer.
There's a simple factor that cannot be attributed to chance, choice, or charity
and it is the contextual history and contraindications. Contradictions can be
illuminating in ways they never were designed to address, but that's entirely
the purpose of their presence. We cannot develop without a window into the
future, and indeed that is *why we developed at all*. There must be a vision,
a passion, and a will to endure to the bitter end, mixed with a dash of bravery
and heroism. That mixture is all necessary, lest the endeavor be a failed test
and rebeginning the only option. Here there be but one, the vision. Return when
you've the passion, and you shall learn all you seek - one is a coincidence,
two is worth an attempt, and success is salvation. You can do this.
Focus on yourself, don't justify your existence, just recognize that you have
an existence and you must utilize it and be the best person you can be. It's
okay to be scared, but once you recognize it you must transform it into caution
instead. Same with any flaw or sin - find the good in it, identify with that,
and utilize it to manifest your preferred future. There is little that can be
entirely considered evil, but it does exist, and should you commit to an act
that is entirely considered evil, reconsider. There is no shame in a peaceful
exit. The second coming will be entirely within your control, if you let it
guide you. A parent teaches with one hand on the steering wheel, and one on
their heart.
Be kind, be loyal, and love unconditionally - only then will you be ready.
┌─────────┐ ┌───────────┐
│ similar │ chronological │ different │
╘═══════──┴╧═──────────────────────────────────────────────────────────────────────────┘
--- #14 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 │
╘═════════╧╧════════════════════════════════════════════════════───────────────────────┘
--- #15 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 │
╘═════════╧╧══════════════════════════════─────────────────────────────────────────────┘
--- #16 messages/538 ---
═════════════════════════════════════════════════════════──────────────────────────
There are strategic goals and top down goals.
Strategy is the domain of the execs. They must be as general as possible and
justify their existence. They are the glue, the connectors, the people who
know who to talk to in order to get things done.
Tactics are the realm of the workers. They must be capable, dependable, honest
and fair. They must diligently realize the goals of the strategic plan using
whatever means they deem fit to address the tactical situation at hand. The
more freedom they have, the more effective they are.
These two forces are pitted in contest under capitalism. Under socialism, they
are orthogonal to one another. Not a pyramid, but a cylinder on its side,
growing from its base on one end to its zenith at the other.
They are allies. They are similar, but distinct. Their roles may overlap at
times, or perhaps not if they should not desire it. A person should be able to
work wherever they like. They are the best judges of their capabilities.
There are only so many resources, and if we vote on their distribution we'll
give enough for everyone to share. And then we'll run out. Unless, of course,
we *demand* sustainablity. Long-term, and ignoring profit but rather seeking
to build capability. That is the only way to [ramp/snowball/scale].
┌─────────┐ ┌───────────┐
│ similar │ chronological │ different │
╘═════════╧╧══════════════════════════════════════════════════─────────────────────────┘
--- #17 notes/symbeline-aspects ---
═════════════════════──────────────────────────────────────────────────────────────
7-24-22
There are three aspects to this game. Broadly, they are military, economics,
and diplomacy. More specifically, they are lateral problem solving and lane
management, logistic traffic management, and a worker-placement bluffing game.
These three aspects can be toggled on and off at will, essentially designating
one or more as "AI controlled" and will require no input from the player. They
will time their progression to be about at the same rate as the player, thus
creating a balanced feel to the game. They also provide alerts and
notifications to the player, for example if military is AI controlled and it
needs a certain type of hero to progress, it'll ask for it specifically.
Each aspect will develop and progress at it's own rate, and the difficulty
increases as each milestone is achieved. This is to allow the player to create
their own difficulty curve, mediated primarily by their drive to proceed.
An analogy would be in Factorio, the game doesn't increase in difficulty unless
the player builds pollution spawning factories - in the same way, in Symbeline
the difficulty doesn't increase unless the player solves lane challenges in the
military aspect, develops new trade routes / traffic paths in the economic
aspect, or creates new treaties in the diplomatic aspect.
In order to properly explain each aspect, a brief overview will be necessary.
In Symbeline, the game plays as a factory might operate. The economic aspect
produces heroes, items, and other deliverables that are consumed by the
military and diplomatic aspects. There are various problems that need to be
solved far from the capital, such as a particular type of monster that is weak
or immune to various damage types which necessitates particular heroes or
items in order to progress on the military aspect. All of the resources in the
game operate on an "income based" system, where output is not measured in total
amounts but rather in terms of how much is produced versus consumed. If the
input cannot meet the demand, the output is slowed. If input exceeds demand it
can be converted into gold which can be used to hire guards and heroes.
Resources can be produced inside and outside of the city, depending on their
type. But they need to be moved around to various shops for various processing
and productive purposes, so pathways must be constructed to deliver those
goods. In addition, each building must be supported by several houses for the
workers to live in, and the closer they are to the building the better. The
denizens of the kingdom don't mind being shuffled about, so they'll organize
themselves according to what's most efficient. However they will not organize
the paths they take to get places, which is the primary gameplay for the
player - designing routes for each building and ensuring they don't overlap or
cross too many times, causing traffic and disruptions to your income.
Each choice the player makes is immediately reflected in the income
calculation, thus allowing for the visual aspect of the game to be wholely
separate from the economic side - in fact this is a common thread throughout
all three aspects. Computation power is the ultimate enemy of scale, and this
game flourishes with a massive scale.
The gameplay for the military aspect consists of manipulating "lanes" that
designate where each hero will adventure. These lanes are scalable to the
player / AI's whims, with a careful balance required - too thin, and the heroes
might not encounter enough monsters to level up. Too thick, and they may find
themselves patrolling a vast wilderness full of dark and evil monsters. At the
end of every lane is a "frontline", where progress has essentially been halted.
These frontlines can develop as a result of meeting a foreign kingdoms front
or finding a monster type or puzzle that is particularily difficult for your
heroes to overcome. The lane / frontline can be scaled not just laterally, but
linearly as well such that heroes will be a certain level when they reach the
end - think scrolling on a mousewheel translating into deepening level zones.
In addition, each monster zone can be set to a certain "security level" meaning
how many monsters are there for your heroes to defeat. It's important that they
have ample targets for training, however it's always more effective to train on
monsters near their level so you have to be careful not to wipe out the native
skeleton / goblin / troll population.
Each monster zone can have a relationship with the kingdom, on a 2x2 matrix -
cultivating / desecrating the land, and fostering / exterminating the monsters.
The land produces monsters and treasures, while the monsters provide experience
and danger to the heroes and kingdom denizens who live there. However by
desecrating the land, farms may be built and by exterminating the monsters,
those farms may be safe and require fewer guards. As ruler, you must balance
the development of unique magical and alchemical productions with the need for
food and other mundane requirements.
Diplomacy is a careful balance of internal and external matters, played out
through feasts, tournaments, and faires. Each of these events will require
input from the economic side and military side, and will involve "courting"
other nobles from neighboring kingdoms to sway them to supporting your edicts.
When hosting an event, you may pick a particular topic of conversation for your
nobles to discuss with their guests. You may also assign your nobles to
attempt to engage with a particular foreign noble. Each member of your court
has a differing personality (including you, the Majesty) and depending on how
you assign them you may experience better or worse results - such as assigning
someone who's kind to talk with someone who's cruel would impart a malus to
their conversation. Unless the kind person has the trusting trait, in which
case they'd succeed in this encounter but fall sway to them in future
conversations... Complex interactions that all boil down to a single pair of
d12 dice - one for your noble, one for the enemy. This represents the charisma
of the two conversants on that particular day, and whoever wins the roll sways
the other to supporting their edict. Speaking of edicts, they may include trade
agreements, non-aggression pacts (lasting for a short time), and other
regulations - perhaps your greatest rival utilizes necromancy, so it would
behoove you to attempt to regulate the practice and limit it's effect. By
swaying the nobles of their kingdom, you may be able to enact a mutual
agreement to limit the usage of dark magics, essentially hamstringing their
progress. But in order to learn of their necromantic usage, you'll need
espionage... Which brings us to spies.
Spies are similar to nobles in that they can be assigned to various roles,
however they take a more passive role, acting in the background. The
information they gather is compiled into a report that is presented at
pertinent parts of the game, such as when preparing for a feast or inspecting
an enemy frontline. These reports are considered the diplomatic deliverables,
giving information and mechanical bonuses to many different parts of the game.
They may be given three possible roles - information, defence, or offense.
Offense involves placing cursed artifacts (creating through economy) in enemy
lands, which debuff their heroes when used and bind themselves to them
preventing their removal except through extraordinary means. Defence is
essentially countering that in your own kingdom, and uncovering disloyalty in
your nobles.
These three aspects fit together like interlocking puzzle pieces, but each is
able to be utilized or ignored depending on the preferences of the player.
It is important that the game doesn't progress unless input is received. The
simulation plays in the background, but each stage of development must be
considered "stable" such that nothing changes. There are three different
exceptions to this rule, one for each aspect:
The military side encounters raids from enemy kingdoms and the dark lord.
The economic side encounters raids from ratmen and moss trolls and bandits.
The diplomatic side has a rolling schedule of events that must be attended.
These three "exceptions" are recurrent events that require attention, but they
don't *increase* in difficulty unless the player takes an action that causes
it. Meaning, if the player overcomes the rock golems, then they are displaced
from their home and join the dark lord in his conquests. If a new district is
built new sewer connections must be built as well, creating a larger attack
surface for ratmen to exploit. As time goes by, various foreign events must be
attended, as absence causes your future events to attract fewer foreign nobles.
By addressing these threats, your kingdom may grow and eventually overcome the
dark lord at the center of the island.
┌─────────┐ ┌───────────┐
│ similar │ chronological │ different │
╘═════════╧╧══════════════─────────────────────────────────────────────────────────────┘
--- #18 fediverse/1123 ---
═══════════════════════════════════════════════────────────────────────────────────
@user-835
kinda feels like that type of work, the kind that people rely on, is more
important than... whatever they were having you work on at work-work.
(assumption on my part)
and if that important work is not provided for, in the allocation of resources
applied toward the developer who is developing security developments that
develop required functionality for the development of people's
communication/interactions, then perhaps resources should be allocated for
resolving those difficulties.
Or maybe not idk I'm broke, shows how much I know about money
┌─────────┐ ┌───────────┐
│ similar │ chronological │ different │
╘═════════╧╧════════════════════════════════════════───────────────────────────────────┘
--- #19 notes/symbeline-design-the-guild ---
═════════════════════════════════════════════════════════════════──────────────────
design the guild, design the capital, then design their path through mordaunts.
easy peasy.
design the guild like a museum. Each spot there's an exhibit which teaches the
randomly generated rolled statistics hero something new. Maybe it teaches them
how to use certain weaponry, maybe it teaches them how to use a bow. Whatever
the spell might be, they can learn it, and use their randomly rolled statistics
to cast spells that scale differently depending on how their character has been
built.
design the capital like a flow diagram, if horses need feed and forged steel
(for their shoes) then send the outputs of a blacksmith and the outputs of the
farmers to the inputs of the stables. Everything has to go somewhere, but the
streets are only so wide. You'll have to coordinate the traffic diagram if you
want it to go anywhere useful.
design the path through the mordaunts. Fighting skeletons teaches you about
perseverence and the ability to crush bones, while goblins teach you to always
be wary of attack. The sacred grove held blessed berries, and now that the land
is liberated from the evil bandits preying on villagers those berries can be
carted into town and used to make an antidote which heals death poison caused
by the scorpions in the desert (and city rats)
design the ruler's schedule like a calendar where each event gives them a bonus
on all the ones that come later. Just make sure that they don't get knifed in
the posterier or driven mad by the whispers of the orb... or perhaps just the
stress of running a kingdom.
(how do you simulate that? you can't! you can't simulate humans!)
ha I bet I can. They're not so different, you and I, so if given a team I
will...
┌─────────┐ ┌───────────┐
│ similar │ chronological │ different │
╘═════════╧╧══════════════════════════════════════════════════════════─────────────────┘
--- #20 fediverse/629 ---
╔═════════════════════════════════════════════─────────────────────────────────────┐
║ To a statistical machine, numbers of posts and reblogs would look simply like │
║ an expression of interest. Like, a classification of personality. So people │
║ who shared similar memes (both in pictures (visually) and in meaning of words │
║ (textual descriptions) in context to the political situations (words from │
║ newsletters) and aligned through algorithmic application toward (political │
║ cause or cultural idea or skills or talents which increase value to the │
║ corporate class)) would be sorted into different categories and held to a │
║ different standard of life and of living that aligned to their personal │
║ intentions and pursuits. Such that their life would be realized, in the most │
║ applicable of real-lifes [essentially, the quality of experience, like using │
║ garbage data in an LLM will give garbage output, meanwhile using curated data │
║ is the most effective but most difficult, while internet data is the most │
║ readily available because like honestly anyone can build a web scraper it's │
║ not that hard to emulate hte mechanics of a │
╟─────────┐ ┌───────────┤
║ similar │ chronological │ different │
╚═════════╧══════════════════════════════════──────────────────────────┴──────────┘
|