...For those who wish to be a Master. See below the horizontal line for alternative paths: Find a graveyard 386 or 586 computer. You can get such a machine for free (or nearly free) at a computer-repair shop or recycling yard. 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. 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'': a TuringMachine. You could build an equivalent computational device out of a roll of toilet paper, a device to read, translate and write symbols onto each square (cf. SimplestTuringMachine), and a motor that can move the paper back and forth under the head. All of that complexity is '''''solely''''' for speed and your ergonomic biases. In any case, write down all the hardware in the machine and remove anything you don't need. The fewer the parts, the easier it is for both your hardware and OS. Find the model of your motherboard, CPU, video card, harddrive(s), bus interfaces, RAM type, IRQ pin settings (if any) for all the hardware, and '''write it all down'''. Ensure all cables are secure and all cards are seated properly and then put it back together. Use these data to retrieve the technical documents from the manufacturer's website. IRQ's ''interrupt'' the CPU with whatever its doing and are limited in number. Different hardware should be on a different IRQs. Start up your machine and enter the BIOS setup utility. Note the version of your BIOS. Check all settings to ensure that they match your hardware sheet and are at their optimum for performance. Disable hardware you don't need. The BIOS is the "operating system" before the OperatingSystem is loaded. Install Linux [without the new GNOME] on your machine. Keep a partition of 100MB for DOS/Windows and one for SWAP that is twice the size of your RAM (whose size if found during the memory count at bootup). Command line is going to be your best friend, so consider this before indulging too much in questions about what window manager (Enlightenment, GNOME, KDE, blah blah ) you're going to use. The only thing that matters is '''X'''. Customize your GRUB or LILO software configuration for dual-boot and install DOS v3.3 or v5.0 if you can (on your non-linux partition). Windows if you want. Work from the command line and understand what your computer is doing. Find out the sequence of events that begins the bootup process once you press the power button. It's going to go something like this: At power-on, the BIOS (consisting of permanent, read-only memory) and CPU work together to bootstrap the process of getting all your hardware "online". Get a disassembler which can read memory addresses and translate into assembly code or find the assembly code of your BIOS chip and figure out at which point does the core or "kernel" of your operating system actually start. Yeah, 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'''. When you see the difference between the kernel and the rest of the operating system running in UserSpace, customize your kernel 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. 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''. No one's impressed by hogging core. '''Now you are worthy of programming the computer.''' First learn C (gcc on linux). C translates into computer code quite cleanly. You don't have to suffer through assembly anymore. Your OperatingSystem is written in it. Make a program to list 100k prime numbers starting from 2, then make one that doesn't output anything, only computes. Learn to use a ProfilerTool, so you understand what makes good code (from the hardware point of view) and what doesn't and what costs CPU time (screen I/O, for example) and what doesn't. These tools are readily and freely available. Use them, they will train your mind not to be mediocre. The computer gives you unbiased feedback -- there's no bullshit. Read up on the history and evolution of the operating system, so you know what questions have been asked and answered. Revamp the assumptions for the Internet era, where TheNetworkIsTheComputer: for ex., you don't need to rely on big hard-drives because the internet provides what you need on hand. Replace your hard disk with a 1Gb flash drive and you've just improved the performance of your system by >1000x. Tasks to consider: * Create a mini operating system of your own that's capable of performing several tasks without blocking the user's keyboard and screen I/O. Start with making single-tasking OS that can store and display text files or use pre-existing projects of the same ilk (like GnuHurd) that are made to do multi-tasking. To think about: What are best ways to organize data in memory, data in storage, interface with the user, and schedule different tasks? This is the arena in which OS's are ''defined''. * Now that you have the power of the InterNet that early OS designers did not, design a system that includes PeerToPeer networking as part of its design. Implement the DistributedHashTable''''''s of Kademlia into the kernel so that you can find large amounts of files fast. Liberate two or more PCs so you can test your implementation. * Understand how source text of a language is turned into machine code. C is a good start. Learn all the switches on GCC and what they're for. Learn the full process of going from source, pre-processing, compiling, linking, to an executable. Until you can make a prime number factorization program (up to sqrt(MAXSIZE)) in assembly. Now: move to a high-level language so you can be rapidly productive. Save shell scripting for file-system traversals and system administration. Choose Python or Perl for higher-level tasks; no one really knows what to do with the power of the computer when coupled with the power of the network. Like cavemen, they've seen everything as a "nail" and the computer as the "hammer": number crunching and business accounting. But we'll be using the elegance of the machine for something more. Eventually, you're going to use a high-level InterpretedLanguage because you need to experiment with '''''ideas''''' -- any optimization at this point is premature. Besides, you've followed the path to this point and know not to casually waste resources, right? Ultimately, you will find, that inside the mystery of the box, there is something ultimately simple. A simple computer has been made with TinkerToys that can play TicTacToe[1]. The apparent complexity of the hardware was only to optimize performance and make I/O be insanely fast. Following the One True Path will prevent going the way of the many lost souls who went the way of JavaScript. Then, ...find me, I will teach you from there. Towards building the PerfectSystem, MasterOfTheMachine [1] See http://www.retrothing.com/2006/12/the_tinkertoy_c.html, http://www.rci.rutgers.edu/~cfs/472_html/Intro/TinkertoyComputer/TinkerToy.html ---- An alternative (or addendum) to the above method(s), is this: * '''Get a job as a ''computer technician''''', repairing and building computers for use in the home or in small businesses. 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. * '''Build your toolkit'''. You want a small toolkit that you can carry around 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] * '''Assemble your system'''. You're going to build your "deck" to serve you in your journeys through CyberSpace. Evaluate these primary elements: ** CPU (clock speed, wordsize are the primary elements) ** Main memory (bus width, quantity, and cache sizes) ** Buses (bus width measured in bits, and bus clock) ** Graphics (color depth and resolution) ** Storage options (primarily size and access times are the factor here) *Collect the best parts that eventually shift through all the mass of parts you'll be exposed to, regardless of how old... ''Good architecture will use less energy, last longer, and will be able to trade speed for usefulness easily. '' *'''Always use 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. *You really owe it to yourself to investigate BulletinBoardSystem''''''s, and early network culture. Read "Hackers" by StevenLevy. Check out BYTE magazine, 2600, Phrack, and early Wired for when the Internet culture really got lit. In any case, after you assemble your great pieces of hardware and have gotten linux optimized well (compiled and tuned it to your machine), here's what next: * '''You must realize the nature of data'''; that it relates to something from RealLife, put into the machine -- it's not just random. * Then, '''you must realize that AllDataRelatesToOtherData''' since the world is interconnected. Your windowing system is a crude way to interact with that data, so you have a file system as a neutral mediator between applications. * Next, '''you must see the right environment for such a Data Universe''': a ThreeDimensionalVisualizationModel. But then, you ask "how?" For that, finally, '''you need the GlassBeadGame'''. ---- Note how new Linux distros want 1Gb RAM -- that's called ''bloatware''. It's ridiculous, no real functionality has been added to Linux for 10 years. 386 and 4Mb should be the baseline. ---- ''Or skip all that and get a RaspberryPi and/or some Arduinos, and build something good. You'll learn more faster, and at probably less cost and far more satisfyingly than trying to keep rubbishy old anaesthetised-snail slow PCs working between hardware failures.'' That would be great, if the energy of the universe for manufacturing new computers were infinite and not shipping containers FULL of old computers available for free. Then the issue you still have is what are you going to be doing with these new computers? You're still doing all the same useless stuff you were before, still on the same plateau. ** Exactly! Thank you. "Still on the same plateau." -- You understand perfectly. ** ''Uh... Do you realise you're responding to '''your own comment''' from a month or two ago?'' *** Hmmm... ''Huh? The old computers get stripped down, their raw materials recycled and turned into new computers. You can do everything on a RaspberryPi you'd do on an old computer, but with less frustration and less power consumption and it's a lot easier to create or obtain new SD card images than re-image a hard drive. You can do things on an Arduino that would be painful on any PC, and you'll learn a lot about coding on the metal.'' I'm not saying that RaspberryPi isn't cool, it's just that no one knows what to do with it. I do. But to get there, you're going to have to follow the path. And getting a old machine to do what you want is all you need. For now, if you want to do something with the Raspberry, help the FreedomBox association. ''Really? No one knows what to do with the RaspberryPi but you? I'm sure all the people doing things with their Arduinos and Pis and Beaglebones -- which they clearly enjoy and find interesting -- would be delighted to hear that from you, and I've no question they'll immediately stop doing what they're doing to follow you unquestioningly. I'm so glad you're our new messiah! The old ones were getting tiresome.'' Are these RaspberryPi users following the OneTruePath or are they implementing tutorials they read in Make magazine? To talk about the ease of downloading SD card images is to miss the point here. ''Some users are far more hardcore than your OneTruePath (you don't mean it seriously, do you? I thought it was meant to be kind of a romantically wistful joke, a gently-humorous idealistic nostalgia for an era of close-to-the-metal enlightenment that never was.) They code their Arduinos and Pis purely in assembly language.'' Here's the thing. I'm an advocate of HackerSpaces and the maker movement. But without better leadership, it leads to the same old (false) economy. I'm not saying don't experiment, I'm saying that reaching for power is like going for fool's gold, and going for flexibility will give you so much freedom, that you'll waste your energy on small LocalMaxima which won't take you out of the current paradigm. But, hey, keep listening to your current masters, perhaps then I can go to sleep for a long long time. ''Isn't "leadership", better or otherwise, the antithesis of HackerSpaces and the maker movement?'' Not really. It's a misconception. Without leadership, at some level, one can't ''teach'' anything for example. ---- In this order, see also: AllDataRelatesToOtherData, ConfusedComputerScience, UnifiedDataModel, GlassBeadGame, LanguageIsAnOs, PangaiaProject, and then you are helping the Internet embody the WikiNature. ---- Alternative to the above: It has been rumored that finishing NetHack and retrieving the Amulet of Yendor will also bring one to Enlightenment. ---- ??? - t ''When I read it, in my head I heard the soundtrack from TheMatrix.'' Nice. ---- "You don't have to suffer through assembly anymore." Do not listen to the seductive lies of the materialists. Assembly language is fun. Learn it and learn the truth: there is no "C", there is no "Java"; there is only a stream of machine instructions. There is no One True Path. There is no Path. ''Ha! A master after me own 'eart. But that is all the aesthetic of the '70s, pre-modems. Here in the Internet Age, we are swimming in data, and we need an organizing force to make something beautiful. Besides, I think your letting on a little hyperbole... ;^)'' {Excellent. That "organizing force" shall be the mighty triumvirate of Lisp, Haskell, and Prolog. And if they are the government of the State of Data, SQL will probably be its civil service. By the way, modems have been around since the 1920s and extensively used since the late 1950s. It's been an interconnected, networked, data-oriented world for a lot longer than you appear to think.} * "By the way, modems have been around...": I don't believe your history is correct. And Morse code doesn't count. :) * ''They have been around since the 1920s. Look it up.'' * Do you believe everything you read? * ''Obviously no, but I am familiar with the history of computing technology, including early modems which were the basis for "news wire" services. What is essentially modern (but for speed) modem technology was in common use by the late 1950s and early 1960s.'' * Newswire services used direct line offered by Bell Telephone. No dialtone, no phone call, no MOdulation. More like a line in an electric circuit, so that doesn't count as a MODEM. * ''MODEM is short for MOdulator/DEModulator, which is precisely what the newswire transponders did. They MODulated the line at the sending end and DEModulated it at the receiving end. Dialtones and dialing are irrelevant. Modern MODEMs can be used on leased lines as well, with no dialtone or need to dial.'' * Yeah, like X.25 packet interface, (which actually might be the service newswires used) but still, I don't count them as modems. The distinction is that modems are audio encoded signals "on top of the wire" -- that is the essence of Mod/Demodulate. An ethernet repeater, for example, could be said to "modulate" the line, but would you call it a MODEM? Alas, no. BoomYoureDone. * ''Yes, newswire modems used audio signals "on top of the wire".'' * That is incorrect. * ''What is incorrect about it? Are you referring to some devices that used current loop signalling, like some Morse Code transceivers and Telex? It's true that early newswire systems didn't modulate a tone -- that came later -- but they used audible clicks. Whether current loop signalling of telex and telegraph, or early modems, the reality is that it's been an interconnected, networked, data-connected world much longer than you appear to think.'' ---- CategoryPhilosophy CategoryHumor ---- SeptemberThirteen