Beej's Bio

CV Resume

The first digital photo of me ever taken, 1993, 136x117 GIF. My hair has since radically changed to be a lot more gray and lot less. And I literally have a gray beard.

Overview

Education: MS in Computer Science. BS in Computer Science, math minor.

The Field: Software Developer, 20 years experience. Hewlett-Packard, Freestyle Interactive (a dot-com startup), Z-AXIS (an Activision studio), independent contracting, and co-founded Robot Stampede (a webdev company).

Hobbies: Dual-sport motorcycling (DR-Z400S), caving, hiking, mountain biking, GIS (with qGIS), GPS, maps, survey, compass navigation. If you need some kind of fun GIS work, drop me a line. 😁

Currently: Computer Science Instructor at OSU-Cascades. Writing more free books, as always. As it is my passion, I'm going to be in education for the duration.

What's Up Now

So... about me!

The longest gig I'd had was the last one, the company I co-founded. That lasted 9 years. And after that it was time to turn to my next career: education. In a way, this was coming a full circle. I'd started off with Beej's Guide to Network Programming back in 1995 or so, and it was time to pursue that aspect of the field.

To that end, I worked at a CS-oriented bootcamp for a number of years, developing curriculum and instructing. I also occasionally teach Computer Science as an adjunct at the local community college and state university.

And now I'm working on the guides once again.

The way I see it, it's the educators who hold all the power in the world.

No, stop laughing and hear me out.

A good instructor can, over the course of their career, create hundreds of millions or even billions of dollars of GDP.

Let's say a teacher teaches 40 students a year for 30 years. And Each of those students goes on to work for 40 years. And, due to the quality of instruction, they earn $10,000 more per year than they would have otherwise.

That's $480 million in extra revenue. From one good instructor.

At the bootcamp, each instructor saw a new cohort every month. We went through way more than 40 students per instructor per year.

And so, I'm returning to it. It's the same reason I had the Network Programming guide out there in the first place: the hope that people will take the help I've giving and then, either individually or collectively, go on to accomplish more amazing things than I could even think of.

What Was Up Then

The first computer I saw was around 1978. Someone brought a semi-portable machine to my first grade classroom that had some kind of Lunar Lander game on it.

I seem to remember it was graphical to a certain extent... but by now those details are fuzzy.

Regardless, I was hooked. That was awesome.

A few years progressed, and my elementary school got some Apple ][s. I remember doing some LOGO programming (mostly doodling) and playing Oregon Trail. (Later I would move to Oregon. I have not yet died of dysentery.)

But I didn't get into programming until 1983 when I was lucky enough to have my folks buy their first "home computer". This was a rare enough occurrence at the time that our local newspaper did a story on our family to share the excitement with our small town, as if we'd acquired a novel flying machine, or some other such curiosity.

Osborne 1

The Osborne 1 was a classic CP/M machine noted for being "portable". It was lovingly referred more commonly to as "luggable" at 11 kg (25 lbs).

It had a 128 column screen, 52 of which were visible at any one time on its 5-inch screen. Memory-mapped display, 64 KB RAM. We had the double-density floppy upgrade, so 92 KB on each disk. Twin floppy drives.

My parents bought this, and a daisywheel printer so that Mom could type up her dissertation on it. Total purchase cost was probably somewhere north of $6000 (2022 USD).

And I was lucky enough to learn to program in BASIC on it. And play a lot of Adventure and various other games we got on the First Osborne Group (FOG) disks.

There was a program dad had purchased from one Eric S. Ruff called SuperGraphics. It was a character graphics drawing tool with one important feature: BASIC export. It would export BASIC code that would redraw the image in a way that you could incorporate it into your own code. I learned that I could tweak the code and get different graphical output.

And that's how it all began. So thank you, Mr. Ruff!

This logo faithfully recreated in UTF-8 from the assembly sources in the Osborne 1 Reference Manual. The Osborne 1 font used below was obtained by taking the character ROMs and converting them to TTF with FontForge. The codepoints were remapped to the closest corresponding Unicode code points.


▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
                            ◢████████████████████◣
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄◣
                          ◢██████◤          ◥██████◣
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
                          ███████            ███████
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
                          ███████            ███████
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
                          ███████            ███████
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
                          ◥██████◣          ◢██████◤
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄◤
                            ◥████████████████████◤



              LOADING CP/M AND HELP...


           Osborne Computer Corporation
                26538 Danti Court
                Hayward, CA 94545

You can emulate the Osborne 1 today with the MAME emulator.

Commodore 64

As the next couple years went by, I'd head over to the local department stores and check out the new personal computer offerings. (Department stores sold computers back then.)

And it didn't take long for me to want to break away from the black and white tiny screen of the Osborne 1 to something more colorful and, frankly, game-oriented.

The Commodore 64 was the machine I was wanting, and I don't know, but I convinced mom and dad to buy me one along with a glacially-slow Commodore 1541 floppy drive.

64 KB RAM, BASIC in ROM, a cartridge port, sound, graphics, twin joystick ports. And a bunch of memory-mapped hardware for easy access wtih PEEK and POKE. A paradise for learning how machines worked. (It remains so to this day.)

Unlike the Osborne (which utilized the index hole of the floppy disk), it was easy to make your Commodore 64 disks double sided by cutting out a new write-protect notch with a hole punch. This effectively doubled the number of games I was able to pirate from my other local hacker friends.

For my birthday, my uncle gave me a book called Assembly Language for Kids that came with the Merlin macro assembler. (If you were unlucky enough to get the book without the Merlin package, the book contained an assembler written in BASIC you could type in. Which was fine, because we were used to typing in all kinds of code from various magazines back then.)

I decided to write an assembly program that would move a sprite when you pressed the joystick. I'd written such a thing in BASIC already, and it took the sprite a good 10 seconds to cross the screen moving a pixel at once. I'd heard assembly was faster.

So I coded it up, and pressed left. The sprite moved very slowly left and warped into a parallelogram. What was wrong? Turns out, the sprite was moving so far so fast that it would loop around the screen several times before the next raster line was drawn. Holy crap, that was fast! I was 14 and all-powerful!

A nested loop of NOPs later, and I had it running at a reasonable blistering pace.

It was a great machine for a kid.

The reproduced Commodore 64 bootup screen below was created with the PetMe fonts.


    **** COMMODORE 64 BASIC V2 ****

 64K RAM SYSTEM  38911 BASIC BYTES FREE 

READY.
█

















You can emulate the Commodore 64 today with VICE, the VersatIle Commodore Emulator.

What Was Up Between Then and Now

I saved up for a new PC: 386sx, 2 MB RAM, and a 40 MB hard disk. And 3.5" floppy drive. My folks helped subsidize the $2000 purchase.

I got Turbo Pascal for that machine, and eventually Turbo C.

When I went to college at De Anza Community College in Silicon Valley, that's when I got my first exposure to mainframes. The school had some VAX/VMS machines the students mostly used. I didn't like how verbose VMS was.

But when I took a Unix course, we got accounts on the MicroVax II running the Ultrix variant of Unix, and that's where the love affair began. I never used VMS again.

And De Anza College was on the Internet! This was my first exposure, around 1991. As a student, I got a job as a computer operator (that was a job then) and spent a lot of time in the extraordinarily loud and air-conditioned server room.

Moving on to California State University, Chico, I got access to more powerful HP 9000 series 800 mainframes running HP-UX (which we called "H-pucks"), and HP 710 and HP 735 workstations, running X.

Right about then I got a 486 and installed Slackware Linux, kernel 1.0.8. Having had more than a few choice words for Microsoft back then, I was Unix for life. (And still am, until the next best thing happens.)

And then in 1994, someone installed the NCSA Mosaic web browser. No more Gopher for me, thank you! I built the Internet Pizza Server during this time, back when it was a real novelty to have something interactive like that on the web.

I had a couple internships, got a BS and MS in CS, and entered real life.

Years passed, punctuated by eating sushi on San Francisco rooftops paid for by optimistic and doomed dot-com investors, and machines became more and more mainstream.

Now we don't even think about them—just another tool to use daily for better or worse.

But I still love working with people when they get that spark, when they see what I saw way back then, the opening of doors to new computing worlds to explore.