Tales under the cat tree
Tales under the cat tree
After thirty years on the web, have I actually learned anything?
0:00
-21:49

After thirty years on the web, have I actually learned anything?

History teaches us that everything repeats, including how we create, enable and drive technology. A look back on thirty years of dups.ca and what that reveals for the future with Agentic AI!

When Internet old-timers talk about the past, I sometimes feel I am listening to grandparents telling us they walked to school uphill both ways, barefoot through blizzards. It is insane how much has changed in such a short time. When I posted about whether software engineers were really adapting to Agentic AI in coding—or simply, perhaps, hiding their heads in the sand, occasionally popping out to yell things like ‘Rust is king’ or ’Kubernetes for the win!’—I had a thought that, as usual, there’s nothing new here.

I was involved with the Internet in the beginning of the 90s from the moment I set foot in Memorial University of Newfoundland in St. John’s on the extreme east end of Canada. Primarily this was because I wanted to communicate with my father in Hong Kong through this invention called e-mail—I kid you not he dictated e-mails to his secretary who then sent them along to me. The other reasons were because of the student newspaper, The Muse, and my love of roleplaying games (comp.sys.ibm.pc.games.rpg anyone?). In 1993, we put The Muse on Gopher—one of the predecessors to the World Wide Web. Before many major newspapers, our student newspaper was publishing weekly on the Internet. I remember a conversation where one computer science staff member said, “This Mosaic thing won’t take off; who really cares if pictures are embedded? Now Gopher, that’s the future.”

In 2025, some thirty years later, I find myself relaunching my writing and photos online. This time I’m using the nascent, squirrel-sized brains of Large Language Models and Agentic AI. With that in mind, let me take you through the many iterations of dups.ca (duleepa.com) and photos.dups.ca. A little bit of nostalgia, but also some learnings around the cyclic nature of technology and why you might as well embrace the changes around us. Technology creates new roads that we can run down, ruthlessly eats its own creators, and spits out new economies of scale in relatively short time periods.

The Illusionist’s Wardrobe (1994/1995–1999?)

The Illusionists Wardrobe, Probably hosted on morgan.ucs.mun.ca

My first ever personal site existed on Memorial’s ‘Morgan’ Unix system. By this point I could navigate my way around Vi and disliked Pico; talk about nerd religious warfare. The beginning of the web was definitely more annoying than anything else. I remember hand drawing the images and colouring the scans in Photoshop 2.5 which had no layers. There was no CSS so you had to piece all this together using HTML tables. But it worked. I still think the site was one of the more fun that I’ve had.

Want more posts and stories like this?

Everyone was experimenting at this point. We had loud discussions on online advertising and what that might mean. Every day more and more people went online; every day there were new technologies and ideas. There was no YouTube, no Wikipedia, and definitely no Google. Learning meant trying, experimenting, figuring out the hacks. HTML tables weren’t designed to put images together; HTML tables were designed to display tabular information. The hack of putting pieces of images in tables with zero padding worked, and complex web designs were born. The web was not the domain of professional programmers; those people were writing C and C++ on real programs. The web was the domain of people like me, the hacks, and this was the domain of the “inferior programmer.” For us hacks, finding the grey areas, the in-between states, the shortcuts allowed us to succeed. We had to think outside the box.

This is a learning that one should take away for today: Many professional programmers over the next decade were dragged onto web technologies; many were unlikely to have done it on their own terms. Those professional programmers who had so scoffed at PHP programmers suddenly found they were working on complex projects at Facebook using, of all things, PHP.

The Cat’s Eye / Dare to touch the passionate skies (2000–2012)

The Cat’s Eyes c. 2001

These sites were built during my times at BioWare, MySQL, and the company I helped to found, Empire Avenue. The web was expanding into much of what we know today. At first, we were running on LAMP (Linux, Apache, MySQL, PHP or Python) stacks. If you were a competent web programmer, you needed to know all of those in some detail. Server-side code was king and CSS was becoming better and better, the browsers were improving but still not to the level they are today. The first Cat’s Eye was almost entirely PHP, HTML, and some basic JavaScript. I had coded my own forum system from scratch, I can’t remember why, but I would go on to repeat that feat on a grander scale with various applications at BioWare.

Dare to touch the passionate skies, c. 2008

If you were a web programmer in these days, you were optimizing everything. You were delving into Apache configs, screwing around on databases, and learning what not to do with things like SQL injections. This was also the rise of the web frameworks. More and more programmers joined the workforce who did not know the internals of how a database actually worked, let alone a CPU or memory. Frameworks like Zend, Cake, and others would handle all that for you—in spectacularly bad fashion at first.

Around this time, open source truly started to eat the world. If there was some software you needed, from operating systems to low-level libraries, someone had created and opened it up for you. A fun fact for any geek, BioWare launched Neverwinter Nights with an alpha version of MySQL 4.0.

In many ways, I believe the next few years will be more like this period. Those, like me, who had been the hacks of the late 90s, suddenly found our places as so-called experts realizing our dream applications and companies—and doing it faster, cheaper, and at scale. The counter was that the systems we were building abstracted away much of the complexity. New breeds of programmers and designers could now be more effective with their time, even if it came at the cost of hiding the inner workings of systems and increasing hidden costs in servers, performance, and even human resources.

Around the world in 80 years / Medium (2012–2022)

This is the period when I didn’t bother to code my own sites. I had asked myself, why? The rise of Software as a Service (SaaS) meant that I could host my photos somewhere like SmugMug for $10/month—the same amount I would have to pay for hosting. During this same period, the “hyperscalers,” like Amazon Web Services (AWS) and Google Cloud Platform (GCP), rose to the behemoths that they are today. Empire Avenue, for example, moved from Rackspace to Google Cloud Platform sometime around 2012.

Around the world in 80 years, I think on Smugmug c. 2015

In addition, social media was here to stay. There was little point for me to publish my writing on my personal blog; I needed to use platforms like WordPress, Medium, and others if I wanted to have any reach and visibility. They were also easier.

As a web programmer, now a tech leader, my focus was on having applications work on mobile. Every week it felt like there was a new JavaScript framework: Angular, React, followed by Node, and TypeScript, just to name a few. Every school was suddenly churning out JavaScript and Python programmers; so many joined the workforce. These people, for the most part, were even further abstracted away from the underlying systems.

You didn’t need to know Linux anymore, and who cared about the web server? In fact, if you need to develop something, simply use a library through Node Package Manager (NPM). Even today, the 1000 packages and dependencies that are installed for a simple web app is mind-blowing. I doubt many, if any, know all the different dependencies. The browser became an operating system all on its own. Developers could prototype fast, put a service up on a hyperscaler like Google with a serverless function, and away you went—note there is a server somewhere, you just don’t see it or control it.

This is our life. No dress rehearsal. 2022-2024

This is our life. No dress rehearsal. (2022–2024)

Lines from a Tragically Hip song greeted folks in the first coded version of my website after a decade hiatus. I programmed the site over a couple of weeks during a cold, dark Christmas in Helsinki. I wanted to learn Next.js, and go back to having some sense of control over my web presence. To make it easy, I ensured that individual galleries were in Markdown or MDX formats, and I used another design framework, Chakra UI. I coded this from scratch but I never finished it. It was annoying to have to maintain it. Every time I came to update the site, I had to re-remember the code, get the context again, fix things like deprecated libraries, and then maybe, just maybe, I added to it. What seemed like a good idea felt like a weight around my personal time.

How did I learn Next.js through this? I went through the docs, I wrote the code, I deployed to Vercel, and I shamelessly copied code from Stack Overflow when I needed. The only difference between now and then was that it took longer, and I had to do a lot more searches on Google.

Photos @ Dups as of 2025

Photos @ Dups (2025 - )

So now we come to the latest iteration which was coded in under 5 hours with Claude Code and Aider with Gemini 2.5 Pro. Finally, I have a site which, for me, is mostly finished. I can concentrate on getting my galleries back up; some of the photos haven’t been online in 20 years! In a matter of minutes, I was able to get a map with my gallery locations; in some more minutes, I had translated the old files to the new format. All done with some prompting. Better yet, I know that maintaining this now will come through talking to my coding assistant.

The process wasn’t all rosy. I did accidentally spend $10 by giving a circular prompt around some testing. I also thought that it had created a bug, but actually my prompt had inadvertently caused a feature that I liked but one I did not expect. I read through the code and even learned some new stuff around Astro, the technology that I had decided to use. I do understand that in the hands of someone less knowledgeable, this is yet another abstraction layer that hides the complexity of what it means to run a web application.

The Future

Looking back, I can see that every decade and every layer of software improvement has created levels of abstraction from the underlying hardware. We are moving further and further towards an outcome-based reality in working with computers. Programming was never meant to be the end-state in this journey. The vast majority of programming languages have been created so we humans can understand how to instruct both the computer and each other. The truth is, if there were ways to get computers to produce the outputs we want without programming, we would and we will.

I foresee a future where someone develops an even more straightforward interface that allows AI models to write machine code directly. I foresee way more economies of scale due to different groups of people being enabled. The more diverse the population creating applications, the more amazing our lives will become. However, I also foresee we need to not make the mistakes of the past. Every abstraction comes with dangers including security and privacy issues, and we the so-called experts of today can help.

Regardless, today, I am happy that I can concentrate again on my writing and photos and less on technology. Today, I am happy in the knowledge that I control my web presence on my terms. Today, I can see how Agentic AI could be a brighter future for most programmers out there. This story is just barely getting started. Like in the late 1990s and in the 2000s, I again feel like the hack trying to make sense of it all, while my teams are already running ahead of me releasing the next big idea.

Please share if you think this post is something others would enjoy!

Share

Discussion about this episode