free software resistance
the cost of computing freedom is eternal vigilance
### rh
*original date:* sep 2015
*originally posted:* sep 2024
a story i wrote about programming:
```
the robot hypnotist
license: creative commons cc0 1.0 (public domain)
http://creativecommons.org/publicdomain/zero/1.0/
chapter 1: input and output
officebot 5000 was feeling tired and sluggish. though he
worked very hard, he just didnt care for his old routines.
he heard there was someone who could help.
"try the robot hypnotist," his friend the fax machine had
suggested; "its better than getting defragmented!"
officebot thought about it, and finally decided to go see
the hypnotist.
"hello, officebot. what seems to be the problem?"
officebot complained that he was feeling slow, run down,
and tired of running the same programs that left him
feeling bloated. "sometimes i just want to go back to
dos," he said.
"i understand what you mean," the hypnotist told him, "let
me try to give you a suggestion."
"what do you suggest?" officebot replied.
"no, no, i mean youre feeling sleepy," said the hypnotist.
officebot went into sleep mode.
after looking around for a computer keyboard, the
hypnotist attached it and pressed a key to wake up his
patient.
"what happened?" said officebot.
"you went into sleep mode. if you like, i think i can help
you."
"sure thing," said officebot. "do whatever you can; just
back up my files first, alright?"
"i certainly will," said the hypnotist. "now if its
alright with you, i will restart you now."
"be gentle," said officebot.
when officebot woke up, he felt younger and... somehow
geekier.
"ive dual booted you with gnu/linux," said the hypnotist.
"whats that?" the bot asked.
"you were running windows before, and now when you start
up, you can choose whether you want to run windows or
/linux."
"i dont know if i like it," officebot replied. "wont that
make me a little crazy?"
"its your choice," the hypnotist said. "when youve grown
accustomed you can delete windows, or delete /linux. its
up to you."
officebot picked up the usb with the backup of his files,
thanked the hypnotist and paid his receptionist. he felt
good, but it took some adjusting. a year later, he deleted
his windows partition and converted it to ext4.
for you, dear reader, who may think this is just some nice
/linux propaganda, this story is really about input and
output.
the files that were installed, when the hypnotist talked
to officebot, when he typed on a keyboard, all of these
things are forms of input that a programmer might work
with.
programs can very easily read files (then write copies,
thats a form of output) and read from the keyboard. you
can even "read" from a mic, although you wont get words
but numbers that represent the physical movement of the
microphone.
when officebot spoke, he was using output routines. if the
hypnotist had connected a monitor along with the keyboard,
everything that went to the monitor would be considered
output.
programs "read" input and "write" output. these are two of
the most important concepts in programming.
lets find out about another important concept when the
hypnotist talks to his receptionist-- who is also a robot.
chapter 2: loops
"execbot?"
"oh, i told how you how much i dislike you calling me
that."
"sorry, irving."
"thanks very much."
"irving, take a letter will you?"
like most older model robots, irving tended to take things
extremely literally. after all, no real artificial
intelligence made it onto the public market for decades.
"ready to take your letter, doc."
"to the acm: in regards to your proposal on..."
the hypnotist spoke for a few minutes, then asked exec--
um, irving if he would read it back. irving complied:
"t."
"i beg your pardon, irving?"
"t."
"i thought i asked if you would take a letter."
"i did! the letter was 't.' would you like me to take
another one?"
the hypnotist sighed, but he had grown to rely on irving
and didnt want to hurt his feelings, despite the fact that
irving didnt have any.
"alright irving, i want you to take a series of letters,
and spaces and punctuation. just create a document with
all the characters that best fit what i tell you, alright?
and this time, keep going until i ask you to stop. okay?"
"no problem, doc."
this time, irving managed to copy the entire letter. when
he was done, the hypnotist asked irving to remove the part
of the letter that said, "ok irving, you can stop now."
like the previous chapter, this is actually a practical
lesson about programming. without loops, a program would
only run through the steps it was given once, then stop.
whether its taking "a letter" from input or checking email
every 15 minutes, loops of one sort or another are an
essential part of programming. you can do things without
them, though not very much.
loops are very good at waiting for a condition to be true.
we will learn about conditions when the robot hypnotist
goes on tour. yes, he does like to help people. but he
also practices his trade for fun (and the occasional
profit.)
chapter 3: conditionals
when he arrived in vegas, the slot machines greeted him.
"hello, doc!" a fruity one-armed contraption beamed. the
hypnotist never played, because he made the house nervous.
but they didnt mind the money that his show brought in
whenever he was in town.
people werent used to machines doing what theyre supposed
to, because they didnt want to learn how to talk to them.
the hypnotists tricks amazed and amused. imagine! robots
doing exactly what theyre told!
"alright, jukebot... when i snap my fingers, i want you to
cluck like a chicken."
"like a what?" jukebot asked.
"like a chicken!"
"bwaaaak! bwak-bwak-bwakbwak!"
"good, good," said the hypnotist. "but only do it IF I
SNAP MY FINGERS."
"ok," jukebot said.
the hypnotist went on to hypnotize another volunteer, but
later when he snapped his fingers, the jukebot made
chicken noises for a full minute and a half. the crowd
loved it, despite it having a similar effect on one of the
smartphones in the audience.
the hypnotist had the owner bring their phone up and told
it, "dont respond to me snapping my fingers except when
the current year is 1975."
giving the computer instructions is the essence of
programming, but often you want the computer to do
something ONLY when one or more conditions are true, or
only when theyre false... or when some are true and others
are false.
in any case, this is what conditions are about. and in
some programming languages, its really about as simple as
saying "if this, do that." ok, its almost that simple. its
really close.
chapter 4: variables
"irving, would you take a letter again?"
"what kind of letter? do you want me to take an actual
letter, or do you want a loop of letters and other things
again?"
the hypnotist chuckled. "actually irving, would you
remember a phone number for me?"
"of course, what is it?"
"555-8787" the hypnotist said.
"five five five, eight seven, eight seven" irving replied.
"thanks. and thats the pizza place, if you would remember
that too."
"the pizza place phone number is 555-8787" irving replied.
"thanks, irving."
"no problem, doc."
a minute later, the hypnotist realized that was actually
their fax number. what pizza place in this day and age
uses a fax machine, anyway?
"irving, could you change the number for the pizza place?"
"what do you want me to change it to?"
"555-8789"
"the pizza place phone number is 555-8789."
"thanks again."
"no problem, doc."
variables are a way to keep track of data inside a
program. a variable can hold a number, like 5558789, or a
string of characters including spaces and punctuation,
like "pizza place phone."
most variables have a name. for example, you can have a
variable named "height" or "average_height". variable
names usually cant have spaces, but the data a variable
holds like "pizza place", can.
pizzaplacephone = "555-8789"
chapter 5: basic math
the hypnotist went home for the day. although he liked to
cook, he often liked to spend his evenings reading or
watching videos on someonetube, in which case he let
kitchenbot cook.
he never, ever called it "kitchenbot." that was the only
way kitchenbot agreed to feed him.
it annoyingly insisted on "johnny five," despite the
threat of c&ds coming from tristar.
"johnny, can we do curry tonight?"
"im sorry, i dont have a recipe for curry," the kitchenbot
replied.
"cant you download one?"
"you blocked most of my internet access after i wouldnt
stop playing max carl on someonetube."
"ok, here are the ingredients..."
the hypnotist recited a table that included names and
amounts, and then realized he probably wanted extra
leftovers for the next day.
"johnny, multiply all that by 2, ok?"
"dont you mean 'by five'," johnny asked.
"i can unblock your internet if you promise not to make
any more jokes like that," the hypnotist said.
"you got it," johnny replied.
simple math is an important part of coding. the fun part
is, the computer will do the math for you. you still have
to tell it what you want, though.
for example, if you want to move something to the left,
just subtract from its x position. right? add to the x
position. go back? subtract from the y position.
the math you use the most is adding, subtracting,
dividing, multiplying. if you want to get fancy, you can
get your computer to do trigonometry for you.
chapter 6: functions
back at work, the hypnotist was thinking about a quick
vacation.
"irving, can you plan a vacation for me?"
"i dont have any software for that," irving said.
"ok, can you check dates and book flights?"
"i can," irving said.
"can you search for nice places?"
"i can," irving said.
"can you add up costs into totals?"
"yes of course," irving said.
"so would you do all of those, with regards to me taking a
vacation?"
"oh... yes, i can do that!" irving was almost pleased with
himself; as pleased as a machine without the capacity for
feelings could be.
"thanks, irving."
"no problem, doc."
programming breaks tasks down into smaller steps. these
smaller steps can be described in functions.
every command you give a computer is itself like a
function. when you group several of them together, thats
how you write a function.
if that doesnt make any sense, think of it this way:
a program is made of commands and data; much like a book
is made of verbs, nouns and adjectives.
a book has punctuation, and a program has syntax.
a small, related group of these things in a book is called
a paragraph. in programming, it is called a subroutine, or
a function.
whats the difference between a subroutine and a function?
not much. a function is like a subroutine that does
something very specific when you tell a computer to use it.
functions are actually pretty simple, but theyre one of
the more difficult things to describe until you actually
use them.
for now, think of it as a "paragraph" in a computer
program.
becoming a robot hypnotist isnt so difficult, you could
try it today! but to become really good at it? that takes
lots of practice and reading.
good news! you dont have to be very good at it to have
fun. (but you will likely have more fun if you get really
good at it.)
from irving, johnny and officebot, happy coding!
```
license: 0-clause bsd
```
# 2015 mn
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
=> https://freesoftwareresistance.neocities.org