...For those who wish to be a Master (see below the horizontal line if you
need money or are out of high school):
Find a graveyard 386, 586, or DEC Alpha computer. You can get such a machine
for free (or nearly free) at a computer-repair shop or recycling yard. Try a
university computer service center for the latter. Make sure the machine has a
hard disk light -- it's the last vestige of the old days where computer
lights lit up a machine room and will be your sole source of feedback of what
the OS is doing with your hardware. Prefer a two-state (dual-throw) power
button (mechanically visible on/off) and a reset button in case you lose
software-level control (being able to use Ctrl-C or Ctrl-Break to stop a
program). Your challenge will be to make this machine faster than a modern one
for meaningful tasks.
Open up the box. Despite the hardware lines and fancy hardware, you will
come to find that inside there is something elegantly simple. All of that
complexity is solely for speed, better reliability, and your ergonomic biases
(like video screens). You could build an equivalent computational device out
of a roll of paper, a device to read/translate/write symbols onto each square,
and a motor that can move the paper back and forth under the head.
In any case, write down all the hardware in the machine and remove anything
you don't need. When there are fewer parts, there are fewer questions when
problems arise. Find the model of your motherboard, CPU, video card,
harddrive(s), bus types, RAM configuration, IRQ pin settings (if any),
harddisks (watch for master/slave settings), and the disk geometry for the
hard disk (look for the sticker on the harddrive), and write it all down.
If you don't know how to do this, go to the second section ("alternate
options").
IRQ's interrupt the CPU with whatever it's doing and are limited in number.
Different hardware should be on a different IRQs. Note how you assign these
(or have been assigned). Ensure all cables are secure and all cards are seated
properly and then put it back together. You can use the data you just
retrieved to get the technical documents from the manufacturer's website to
understand your hardware better.
Start up your machine and enter the BIOS setup screen. Note the vendor and
version of your BIOS. Check all settings to ensure that they match your
hardware sheet and are at their optimum for performance. The BIOS is the
"operating system" before the real wiki:OperatingSystem is
loaded.
Install GNU/Linux [without the new GNOME v3] on your machine. Keep a
partition of 100MB for DOS/Windows and one for SWAP that is equal to the size
of your RAM (RAM x (1 + #of_users) if your making a multi-user machine). Use
LILO if you can, which is entirely sufficient for the task, but GRUB is fine.
Command line is going to be your best friend. You are on the journey to become
the wiki:MasterOfTheMachine -- you will make something designed to do
computation become boundlessly valuable (some might say _omnipotent ). Why?
To distinguish yourself as the master race , of course.
Firstly, you have to start from the right beginnings. You need four core CLI
functionalities to do everything : menu and user i/o processing, text-file
processing, OS interfacing (processes, users, files-on-disk, network, etc),
and hardware interfacing/querying.
Next, imagine the perfect name for every command or micro-app you
build, so that that can be a clear ontology of commands on which to build
further. Each name should be as potent as can be -- compact yet full of
meaning. User verbs that mutate the system, and nouns for those which don't.
If you can't think of a good name, no one else will understand your command-
line app either. It might mean that you already have the commands you need,
built by others, or it may mean that you don't yet have the perfect idea of
how to accomplish what you want. So, step back, and meditate on it a little.
This is the secret for making apps simple and self-documenting , and
together these mean re-useable.
First task: a menu shell-script. It takes a file as input. This input file
consists of a up-menu file (if any), text menu items, a tab, and command-line
that will be executed if that selection is chosen. Use tab-delimited fields
for everything , and a enhanced "more" command that allows you to set the
spaces between tabs when needed. The menu command will automatically display a
letter for the choice if you've written the text lines with a caPital, or a
number and auto-capitalize the first word if you didn't. If the user, hits the
"?" key, it will re-display the list with the command-lines used. If no
filename is given, it will look and use a file called "home.ch".
Design every shell command to accept and expect piped input from other shell
commands. This will make your apps work-well with others. If you're using
tons of parameters to change the behavior of your app, you aren't architecting
your code and apps right. Break it down into modular components; i.e. smaller
commands. This is the secret to making apps scalable and re-useable.
These will put you on the right zen path. There is no other. No GUI will
come close to this for some time. Consider removing it from your system to
make more room for your CLI experiments and ecosystem. Build some peer-2-peer
cloning apps, and you've now made your unix system viral.
With regards to a GUI, consider it like an elephant moving into your house.
Choose a minimal manager (generally twm), if you must, but remember it will be
some time before the 2d and 3d environment are as perfected as the CLI.
Customize your LILO software configuration for dual-boot and install DOS v3.3
or v5.0 (those are the best versions) if you can (on your non-linux
partition). Windows 95/98/98SE if you want.
Do all your system administration from the command line. This will make
you proficient on any machine regardless of windowing applications are
installed. Understand what your computer is doing. Find the sequence of
events that begins the bootup process once you press the power button. Get a
disassembler which can read memory addresses and translate BIOS code into
assembly or request the assembly code of your BIOS chip (IBM PC Technical
Reference has full BIOS source and hardware schematics), print it out, and
figure out at which point does the core or "kernel" of your operating system
actually start. Intel CPUs use interrupt vectors , otherwise known as
"pointers", that tell the machine what program code to jump to on any given
interrupt (like your keyboard). You're going to have to find books for these.
Do it. Do it until you understand the relationship between the hardware
and the bits that just exist on the page.
The OS sits at a layer above your hardware, while your applications sit above
the OS, then there is you. That is the basic separate of power between you and
your hardware. Below that is simply physics.
When you see the difference between the kernel and the rest of the operating
system running in wiki:UserSpace, customize your kernel
($make menucmonfig) and compile it to your exact hardware. You can find
procedures under the linux HOWTO's. This is called treating your hardware
well. You want to be tight: you can't do that with the generic kernel which
will also soak up more precious RAM than you want.
Find what programs/daemons are started after boot. Understand what they
do. Remove everything you don't need or use. Check your free memory to see
how much progress you're making with each removal ("ps" and "top" are your
friends), so you can get a sense of how intensive various tasks are. This is
called respecting memory.
Now you are worthy of programming the computer. First learn C (gcc on
linux). C translates into machine code quite cleanly. You don't have to suffer
through assembly anymore. Your Operating System is written in it. Make a
program to list all prime numbers
[2]
http://www.rci.rutgers.edu/~cfs/472_html/Intro/TinkertoyComputer/TinkerToy.html
Option #2 to the above method(s), is this:
Priority 1:
Get a job as a computer technician , repairing and building computers (preferably at a small shop). You won't get paid much, but you get exposed to a lot of hardware, some of which you'll be able to nab for little or no cost. OR
Build your hardware toolkit. You want a small toolkit that you can keep with you. Small flat and phillips-head screwdrivers, a long magnet or claw grabber for getting dropped screws, small closable tube for holding screws and random bits, a penlight for seeing. These are some of the main tools of the hardware tech that will always serve you well. [DRAFT]
Priority 2:
Always use GNU/Linux. Linux is designed close to the machine and will be able to make best use of all those very specific parts you have and you might even find a way to optimize and contribute to the codebase.
If you get several boxes you can consider how to use RPC's, Beowolf clustering and such to make good use of it all. Set up UUCP and even do net news.
Option #3:
Priority 1:
Priority 2:
Remember, money is power in this world because they don't know how to
assess intelligence or creativity beyond reptilian. Getting a job will help
you earn money and keeping a job will gain you respect and hardware or
internet access. In the meantime, minimalism your mainline;
that is, purify your Right Livlihood so you're not trampling
harshly through the world. Find [Lonny Zone] and live on next to nothing
(Top Ramen, roasted nuts, cheap bananas made frozen, macaroni and cheese go a
long way) to save up for something worthwhile and definitive.
Also, keep this in mind: Atheism is not science. A black sheep is still a
sheep. A scientist doesn't form a conclusion based on no evidence. Keep
the question alive (ex. agnostic) -- it is one of the most important on the
planet. Without knowing who you are, you can hardly lead anyone else with
much legitimacy.
After you assemble your great pieces of hardware and have gotten your machines
optimized well (compiled and tuned it to your machine), here's what next:
...Tasks to consider: Enroll at a University in Computer Science or
Engineering. If you followed the sysadmin path, consider a Graduate degree.
Understand the simplicity of a Turing Machine and, then, how that abstraction
relates to the underlying (concrete) hardware. Understand mathematical graphs,
Venn diagrams (set membership), and fuzzy logic. [Mesh networking] and self-
organizing systems will do you well also. Perhaps you will finish NetHack and
ascend.
And then, when you're ready, create a Node on the Pangaia World
Game (now the Pangaia World Game ), written:
"Xer0Dynamite". Post it on the Board, and wait...