Originally published on: Fri, 29 Jul 2011.
After a short stint as a programmer on IBM mainframes, I spent the next several years doing a job that I absolutely loved; coding in C for MS-DOS and Windows applications.
I had delved into the personal telecommunications scene years before my professional career began. I was a participant in the local BBS community and was a member of the CompuServe online service.
I knew a little about the Internet … mainly that it was a network of computers. Although I had thought that this network was limited to university and government computers, friends of mine who were running their own BBS’s were beginning to offer Usenet newsgroups and Internet e-mail gateways via their systems.
At the time, I was pretty impressed that someone could send an e-mail to firstname.lastname@example.org and I would receive the e-mail in my CompuServe inbox.
In the early 90’s, one could use CompuServe’s graphical browser ( WinCIM ) to navigate their system, a third-party browser, or one could stick to an old-fashioned terminal interface. One day in late 1994, the monthly newsletter from CompuServe arrived. In it was a diskette containing a “web browser”. The instructions described how to access this strange beast known as the World Wide Web from the web browser using CompuServe as a SLIP ( Serial Line Internet Protocol ) gateway onto the Internet. I believe that we were licensed with a special version of Trumpet Winsock which provided the TCP stack.
To surf he web, I had to perform the following ritual:
- Fire up Windows 3.1 ( by typing “WIN” at an MS-DOS prompt )
- Dial up CompuServe
- Go to the area that provided SLIP ( maybe by entering the command GO SLIP ? )
- Fire up Trumpet Winsock to initiate the SLIP session
- Fire up Spry Mosaic
Hopping around the web on a 486sx machine with Windows 3.1 on a dialup connection was a bit of a different experience in those days, but it was still fun. A few of my cohorts at work were also trying out the WWW. Yahoo was sort of a staple to help guide us to various places that we’d never have otherwise found. Very interesting stuff.
A short while later, a group of us was doing our usual post-lunch perusal of the tech magazines and books at a local bookstore and I saw it:
The HTML Sourcebook : A Complete Guide to HTML by Ian S. Graham.
The book described how to write code for the WWW. I had to have it! I bought it and began reading it hungrily that night. While it probably wasn’t the best book, it was still a great starter-book. It either described web-related topics or gave me enough information to seek out better documentation on particular subjects.
A local CP/M wizard, Jack Winslade or jsw as he is known to his friends, had been offering Internet e-mail from his BBS ( DRBBS Tech BBS in Omaha, NE ). He was also one of the people offering read-only Usenet newsgroup access for a select set of newsgroups. He was doing this all and was running DRBBS as a FIDONet node on a 64K CP/M machine.
jsw and a group of friends soon created a for-pay dialup Unix service called GONIX ( Greater Omaha public access uNIX ). One could pay about $10 a month for a “shell” account or one could pay a little more for SLIP access. I decided to start with a shell account.
A shell account meant that I had straight TTY access to Unix via my favorite terminal program ( which, at the time, was QModem for MS-DOS ). To transfer files to and from my account, I used the zmodem commands sz ( send zmodem ) and rz ( receive zmodem ).
I constructed my first set of web pages in 1995 on Gonix under the username cjbr. Other friends were finding ways to access the Internet through university accounts. One friend was using a program called slipknot that could allow a dialup terminal session from a university computer system to behave kind of like a SLIP connection; so they were getting a free TCP stack on the Internet just by being a student. Of course, many sysadmins put a stop to this practice. But, it was cool to be able to publish something for the whole world to see.
I personally could not view the web pages with graphics support through my shell account. After I had finished uploading what I wanted, I could then use Lynx to do a text-mode browse. For the full effect, I’d have to hang up the phone connection to GONIX, dial up CompuServe and go through the procedures listed above. Then, I could view my pages on Spry Mosaic.
Over the course of the next few months, I pored over the Common Gateway Interface documentation for the NCSA Web Server. a precursor to the Apache Web Server. I began experimenting with C and Perl CGI programs.
When I had initially encountered Perl years before, I thought it was a rather ugly, but it became very handy and seemed to be incredibly popular amongst other CGI’ers. The Usenet newsgroup comp.infosystems.www.authoring.cgi became a regular haunt of mine. A gentleman named Thomas Boutell seemed to be a CGI wizard and posted there regularly. Tom later wrote a book on CGI programming in C and Perl.
As I had published the occasional article in then-prominent tech magazines, I wrote the article Client / Server Development and the World Wide Web for the Nov/Dec 1995 Dr. Dobbs Sourcebook for Internet and WWW Programming. My code and another author’s code in that journal are what I believe to be the first CGI articles in print.
You can try to read the archival version of the article here: http://drdobbs.com/architecture-and-design/184409740?pgno=1 , although the formatting is somewhat disjointed, at present.
The article I wrote presented a simple trivia game that maintained game state as a series of GET-style parameters. Server-side sessions were not possible at the time, as I don’t think Netscape Communications had yet invented the “magic cookie”.
Here’s a screencap excerpted from the article
The company I was working for did not see the Internet and the web in its future; I saw both in mine, so we parted ways. I went to work for a contracting firm and secured a new account with the new Internet Service Provide in the building Radiks Internet Access. Radiks is now owned by Earthlink.
Radiks was run by a great bunch of guys ( Scott, Grant, and Greg … the barefoot sysadmin with a Windows logo tatooed on his ankle. ) Their business grew as everyone, businesses and consumers, were trying to experiment with the Internet.
At Radiks, I had both shell and PPP access onto their Solaris system. The shell account was necessary mainly to compile C code. Otherwise, I was using an FTP client in one window, a browser in another, a text-editor in a third, and an early edition of the Eudora SMTP/POP3 e-mail client in another. At this point, I had a newer PC at home running Windows 95.
I bought the book Perl in 21 Days in order to learn more about the language. Many dismissed the book as being pretty lame and said that it contained a lot of errors. I never really tripped over any of the errors. It was a great intro, although I soon picked up the venerable Programming in Perl O’Reilly book.
I ended my relationships with Gonix and CompuServe and went exclusively with Radiks as my ISP.
At this time, I added Perl-based hit-counters and a guestbook to my Radiks page. The Perl hit-counter that I liked the best cheated the LZW compression technique used by GIF files so that it very simply encoded a series of digit-characters into a GIF without actually compressing them. ( See my post : Cheating the LZW. )
At my new job, I wrote similar programs in Perl targeting the O’Reilly and Associates WebSite for Windows 95 for the company web site that I created. I remember that ORA WebSite was distributed on three 3.5-inch diskettes. The box was much bigger than it needed to be just for the three diskettes … because there was an ORA WebSite t-shirt stuffed inside.
One of our clients had written some CGI’s in Visual BASIC that didn’t quite work with ORA WebSite, so I had to spend a day tweaking some code to make things function properly.
I taught an HTML course while working at this consulting firm and was planning to teach a Perl CGI course, but I left before that ever came to fruition.
I left so that I could consult on my own in my spare time while also teaching. I went back to a day job as a developer during this time.
I bought Kris Jamsa’s book Internet Programming, which dealt with C and C++ source code for popular TCP clients. I had never written any TCP clients prior to this, so I tinkered with this type of programming.
The freelance Perl code I was writing at this time was interesting; no two clients seemed to have similar installations of Perl. They would have different versions of the interpreter in different locations. Some would have their CGI settings in Apache so that code required a .cgi extension instead of .pl.
I had a lot of fun working on those projects, though. In additon to Perl I did some CGI work with TCL and PostgreSQL and Microsoft IIS / ASP / SQL server.
I would scour Usenet for people looking for web consultants by using the DejaNews search engine.
At around this time, Matt Wright, a high-school student in Colorado, had been publishing his CGI scripts on an extremely popular site called Matt’s Script Archive ( see: http://en.wikipedia.org/wiki/Matt%27s_Script_Archive ). I believe that Matt soon got a book deal on CGI programming that included scripts from this site.
Java technologies started to gain traction in the trade-press at this point, so I bought Microsoft’s Visual J++ starter kit and noodled with a few applets that were little more than fancy applications. Soon, I found that I liked Java as a better alternative to C++.
The day-job began to transition from desktop, thick-client technologies to web technologies, so Java web technologies took over my focus. I began teaching Java and later XML technologies at a local community college and for some private firms.
I was also still writing tech articles here and there. When reviewing the Thompson Automation AWK compiler (TAWK) for the May 1997 Dr. Dobbs Journal, I wrote a client for the finger protocol in AWK as a sample program mimicking the techniques I had learned from Jamsa’s book and from another Internet programming book.
I soon expanded the finger client into an SMTP mail client and began selling the utility under the name MailSend. ( The current successor to MailSend is now called MailWrench and can be found here: http://www.mailsend-online.com/mailwrench/. The more detailed story behind MailSend can be found here: My Big Shareware Splash )
From 1997 to 2000, I like to tell people that if I was awake… I was either coding or teaching people how to code. I was very tempted, just before this, by two different offers to bankroll me for development of some web products. I hesitated as I found out when I went freelance that being an accounts-receivable clerk ( chasing down my due payments ) was a job that took more of my time than it should.
I decided to pare down my extra-curricular coding for a while just as the Internet bubble had burst; investors pulled the plug on efforts that weren’t yielding revenue to their expectations and many Internet firms went bust.
Nowadays, web programming isn’t an arcane discipline as it was in the early days of CGI programming, although I would argue that it is more intricate. 15+ years of empirical evidence of successes and failures in the web software communities have helped to shape modern web programming into very complete sets of disciplines that help one to write safe, scalable code quickly.
While I still work with modern web technologies, I have a fondness for those old days and the spartan toolsets that I wielded.
Spry Mosaic image excerpted from Dr. Dobbs Journal.