Vinay Pai

A Trip Down Memory Lane

Sometimes it pays to be a digital hoarder. I have a growing collection of old files unceremoniously dumped into an “arch” directory. That collection now spans more than 25 years and has turned into an accidental time capsule.

One fun discovery was my old website from ca.1998. The web was a different place back then. Google was the new kid on the block, barely a year old with “beta” in their logo.

My website was hosted on Geocities at the time, and featured all the greatest fads the late 90s has to offer. Tiled textured background? Check. Visitor count? Check. Frame-based layout? You betcha! Guestbook? Check.

I’m actually a bit surprised at how well it still renders on modern browsers. Let’s dive in.

Welcome to Vinay’s World of Programming!

Here’s the home page in all its late ’90s glory! I’ll casually drop in a 560kB screenshot here, which would have absolutely extravagant at the time. The whole website clocked in at under 650kB. A lot of people (myself included) accessed the internet over a dial-up modem at the time, which peaked at about 3-4 kB/sec. It would have taken several minutes to download an image that large.

Screenshot of the homepage

Vinay’s World of Programming. My website from ca.1998.

World of Programming, You Say?

When I discovered Geocities, I learned that I could have my very own website. But what should that website be about? I had learned C a few years ago and just had to share my knowledge with the world!

Screenshot of C Tutorial

Feel free to dive in and start learning! I believe I started writing the tutorial the summer before I started college. I didn’t quite get it done before the summer break ended though, so be sure to take notice of this note at the top.

The C tutorial is still under construction. However all chapters given below are independent and you can start right away, and go through rest of the chapters as they become available, over the next few days.

Feel free to get started with the tutorial right now, and check back in a few days! editor’s note: 26 years and counting.

Netscape Now!

For a second I was a little confused that I was missing a button imploring visitors to use Netscape. You see, back then we were at war. The browser war.

The evil empire Microsoft was using underhanded tactics to undermine the competition. They were using their entrenched position in one market sector to stifle competition and dominate other sectors.

Luckily the government’s anti-trust lawsuit put an end to all that and we have no such problems with tech giants today. editor’s note: check this.

In any case, the first line of defense was small websites like mine making sure their visitors knew what the right choice was.

Netscape Now

On closer inspection, I spotted a broken image referencing a missing now_anim_button.gif. It didn’t take long to find that trusty old gif on another website of the same vintage.

Before the “Like” Button: Visitor Counter

This was half a decade before Facebook’s “like” button and refreshing the page to see how many people liked your post. Vanity metrics took a different form back then.

You are visitor number  to Vinay’s World of Programming

Every time someone visited a page, it incremented a counter and dynamically generated an image to proudly display the number of people who have visited the page.

Sadly, I don’t know what the ultimate count was because I switched from my own CGI script to hosted service called thecounter.com. That service is long gone and the domain now belongs to a burger joint.

Link rot is real, folks.

Behold the Guestbook

Back then, it was pretty common for websites to have a “guestbook”. Visitors could fill out a form to leave their name, a comment, and a link back to their own page. That info would the be appended to the “guestbook” page for future visitors to see.

That’s right! you could have form for people to append a link to a page, and it wasn’t immediately get overrun by spam. What a world we lived in!

There was some of this:

I have visited your site before, and you have seen mine as well. But I have totally revamped my site with some nice graphics and other stuff and I am on a new server. Check it out, its really cool! Please sign the guest book.

And some of this:

hi vinay,ur site was pretty ok….very ok actually.ummm….but there’s always room for improvement…try being a little more creative…and a lot more original….and im sure u will have a 5* site in your hands..take care….and best of luck…u’ll probab y need it…

Ouch. Can’t win ’em all, I guess.

My very first front-end app: HYPERSearch

In 1999, searching a website probably typically involved calling a Perl CGI script to search some kind of index. What I chose to do instead was build my frontend app. This was about 15 years before React, and the DOM wasn’t even really a thing yet.

I’ll let my former self explain:

About HYPERSearch

This search system is made using client-side JavaScript, unlike other search systems that rely on server-side technology like CGI. When the page loads, the database is downloaded to your computer, and is searched by the script, giving you the search results instantly, unlike a CGI search where it takes a lot of time to send the query to the server, perform the search, and retrieve the results. Moreover, because the results page is generated on your computer, all search results can be displayed on one page, without worrying about download times. Even if the results page were hundreds of kilobytes long, it would take only a couple of seconds to load.

The database itself, is stored as efficiently as possible to minimize download time, so that it takes only a few seconds to load. Of course, no matter how long it takes to load, it needs to be done only once per session, unless you have disabled caching on your browser. However, while this system is great for small websites like mine, it may be impractical for large websites, with, say, more than a couple of hundred pages or so.

I put meta tags with keywords in my pages and had C++ program that parsed it out and created an index in a JavaScript file that looked like this:

SK=new Array(356)
SK[0]="sign";
SK[1]="comment";
SK[2]="comments";
SK[3]="suggestion";
SK[4]="suggestions";
SK[5]="feedback";
.
.
.
SK[353]="faqs";
SK[354]="pc";
SK[355]="pcs";

SU=new Array(25)
SU[0]="(Untitled Page 1);;;addbook.html";
SU[1]="Feedback form;;;feedback.html;0;1;2;3;4;5;6;7;8;9;10;11;12;13;14";
SU[2]="Guestbook;;;guestbook.html;15;16;17;0;1;2;3;4;5;6;7";
SU[3]="Vinay's World of Programming (Frameset);;;";
SU[4]="Home Page;;;main.html;18;19;20;21;22;23;24;25;26";
.
.
.

I’m not really sure why I chose to assign the array that way. Maybe it was a performance thing (this was pre-V8 JavaScript… not exactly a speed demon). Or it might have been out of a C/C++ habit of initializing arrays by allocating space with malloc or calloc and then assigning values to elements.

In any case, pressing “Search” triggered a function that searched the index for matching words and used document.write to spit out the results.

DOM support in browsers was in its infancy, so the only way to insert content into an already loaded page was to write out HTML and hope you didn’t forget to close a tag or escape something.


function PrintURLs ()
{
	document.writeln ("<H3>Search Hits</H3>");
	document.write ("<P><B>Your search query for ");
	if (LegalWords > 1)
		document.write (parent.SearchMatchAny ? "any of" : "all of");
	document.write (" the word");
	document.write ((LegalWords> 1 ? "s" : "")+ " \"" +parent.SearchString + "\" ");
 	document.write ("over the ");
	switch (parent.SearchArea)
	{
		case 0 : document.write ("whole site"); break;
		case 1 : document.write ("Beginners Section"); break;
		case 2 : document.write ("C Tutorial"); break;
		case 3 : document.write ("Advanced Section"); break;
		case 4 : document.write ("Links Section"); break;
	}
	document.write (" resulted in " + SearchHits + " match");
	document.writeln ((SearchHits != 1 ? "es" : "") + "</B><P>");
.
.
.

All kinds of things about this code is deprecated, but the most astonishing thing is still works on modern browsers, over 25 years later!

HYPERSearch: for loop

If you are tempted to use this for your own site, please take note:

HYPERSearch - Copyright © 1999 TECNOLEC Software.

This script is copyrighted. Any kind of unauthorized use is strictly forbidden. Contact the author for more information or permission to use the scripts.

TECNOLEC Software?!

Tecnolec… sorry TECNOLEC… was my first “company”. Although not a real company but the “brand” I used for various projects. The company was pretty diversified with products. Some of these include:

  • HYPERSearch: The vaunted search system mentioned above
  • SmartFormat: A program to format floppy disks and deal with bad sectors and increase capacity from 1.44MB to a mighty 1.72MB.
  • A piano program. Use keys on the keyboard to play shrill monotone sounds on SoundBlaster hardware.
  • An image editor. I think it was called PrintMaster, sadly lost to time.
  • Super Car: Drive a car along an infinite randomly generated road. Uses some rudimentary perspective projection so it looks 3D if you squint.

Taking Inspiration From my Past Self

I kept my web presence current for a while. Vinay’s World of Programming gave way to other home pages. When I first moved away from home, my website because the place to share photos with friend and family. That fell by the wayside when Facebook came along and I jumped on the bandwagon and started sharing things there. When I jumped back off that bandwagon several years ago, I just stopped sharing much stuff publicly.

Lovingly handcrafted HTML pages gave way to a WordPress site, a Django-based CMS, and other similar things. One day when I reconfigured my server and never got around to setting up the web server properly, and my website spent an embarrassingly long time displaying the “Welcome to nginx!” page.

Well, I have now come nearly full circle. Static HTML pages lovingly generated with Hugo. Medium, Substack, and various forms of social media may be all the rage, but there’s no reason I can’t ignore all that and just post stuff on my own little corner of the web.

So, this will be the primary place I share stuff. I might throw Mark Zuckerberg a bone and share an occasional link on Facebook or other social media when I feel so inclined.