Two Steps Forward

My blog on software development, the universe, and everything.

An Interview with Olaf, Part II

Note: Read part one for more context first!

Ah yes, the old punch a hole in the floppy to double the storage trick. Unfortunately, my drive was one sided or something, so it didn’t work for me, but I had friends who did that. If only it were so easy to increase storage capacity in these days!

How do you store your work environment customizations? Do you have a dotfiles repo or something similar?

I keep my dotfiles repo at https://github.com/oalders/dot-files I use mostly the same setup for both home and work. For my personal use I have an Ansible setup that will install my dotfiles on other machines that I need to work on. So, it’s quite portable and I can develop in a familiar environment in most situations.

Any tips or tricks?

I have my dotfiles running Continuous Integration via GitHub Workflows. So, I can tell immediately if I’ve broken something. I find it helpful to take care of little issues as they come up rather then when I’m setting up a new account. That’s not the time I want to be fixing things.

And why did you hate the Fortran 77 class?

The class consisted of sitting in a dark amphitheatre early in the morning and watching a guy in mock turtleneck scribble on transparencies that we viewed via his overhead projector. From where I was sitting it looked like he was just phoning it in. It was dull, there was no effort to make things interesting and it wasn’t clear to me why I’d want to be learning this language at all. I don’t remember anything that I learned in this class other than the fact that I probably didn’t want to write software. So, after I took a few years off from University, I switched over to the Humanities. I learned Greek and Latin. Those languages seemed to have way more day to day applications for me than Fortan 77. I also began enjoying my education.

And are there any interesting intersections between your experiences with the humanities and programming?

There’s some overlap between learning natural languages and machine languages. If you can sit down and learn Ancient Greek, you can probably sit down and learn to do some programming. In both situations you’re learning to parse constructs which, at the outset, probably seem foreign, but begin to make sense once you learn the rules. Natural languages are much more expressive and the rules in natural languages have more exceptions, so if you can master reading a new natural language there’s a lot you can apply to breaking down a machine language.

I also find with both of these that there’s a difference between a passive and active understanding of the language. Just because you can read Latin doesn’t mean you’re just as proficient at writing it. The same can be said for machine languages. Reading and writing are two different skills. Clear and succint writing is a valuable skill in both natural and machine languages.

I have to confess I’m really curious why you went the HTML route to digitize the book instead of using something like a word processor. Was there a particular reason behind the decision, or perhaps was it something like “HTML and web browsers look cool, so….”?

At the time, you could still use Gopher on the University network, but web sites were starting to become popular. I was in the Classics department and had, with some others, also been looking at digitizing the University’s ancient coin collection. There was some friction with getting getting access to the coins. If we had pushed harder we may have been able to make that happen, but it quickly became less fun as we tried to get the right permissions. It reminds me of when a Professor of mine encouraged me to ask a local manuscript collector if it would be possible to see a particular parchment that was in his collection. The collector looked at me and said, “possible, but not probable.”

And why on earth was this guy building a server in a fridge? For cooling purposes? If I learn nothing else from this interview I’d love to hear about that. [If you happen to have any pictures, I’d love to share them as well.]

As much as I’d like to have some real insight here, I think the form factor of the fridge was close enough to that of a server rack that it was just a quirky place to build his project. I’m pretty sure it had been gutted and no longer contained a compressor, so I don’t think he would have been able to use the fridge to actively manage CPU temperature. I remember two things that he told me. One was “you should really buy a book on Unix”. (This was told to me when I dropped by his office to ask for help.) The other thing he said was “Windows is for jerks”.

Do you remember any of your early experiences with CPAN, reinventing or discovering existing wheels?

A number of years ago I was spending my free time playing in a band and recording songs. Initially we shared our music on mp3.com, but the real action ended up being on MySpace. (I remember how Tom was my first friend – he was everybody’s first friend). In the early days of MySpace things were not all that locked down and you could automate stuff fairly easily. I found WWW::Myspace on CPAN, which was a module which used WWW::Mechanize to automate using MySpace. Since there was no actual API, this was as close as you could get to having an API. I wrote a script which used WWW::Myspace to get, for example, a list of people who were friends with the Dixie Chicks (now The Chicks) so that I could add them as friends of my band. Some people would inevitably add you back as a friend and your network would grow.

As I was doing this I also wrote a kind of data model for MySpace. It allowed you to log in to MySpace with an arbitrary number of accounts and keep information about your friends in a database. This was necessary so that you wouldn’t try to add the same friends twice.

I was getting really into this friend adding. I bought an old 386 from a used computer shop and I set it up in my office so that I could have a machine dedicated to this hobby. It would run for hours at a time. I have even had it sleeping at random intervals to make it look more human. Eventually MySpace added CAPTCHAs to the process at random(ish) intervals. So I had to tweak my script to stop if it detected a CAPTCHA and launch a FireFox window so that I could manually enter the CAPTCHA and then enter the correct keystroke so that the script could continue. Using this method I eventually got over 20,000 friends for my band.

You may be asking yourself why am I spending so much time on this story. As it happens, as I was working on the MySpace code, I contacted Grant Grueninger, the author of WWW::Myspace and told him what I was working on. He said I should publish it as a CPAN module. He was really encouraging. So I got a PAUSE account and started uploading. He taught me about SVN and got me started using version control for the first time. I collaborated with him on the project and also uploaded my own modules. I learned a lot from him. He got me started with Open Source Software and made me realize that it wasn’t a scary thing. It could be a very fun, collaborative and creative way to spend your time.

I remember when I submitted my first bug report. I got a message back from the author thanking me for the report and taking a few minutes to explain some things. I hadn’t been expecting to hear back at all and to get a really kind response back was very encouraging for me. I don’t think it took a lot of time out of his day, but it made me feel like this was something that I could do and feel good about.

How did you get the motivation to write MetaCPAN?

I had just gotten the first iPhone. They weren’t being sold in Canada or officially supported on any mobile networks here, so I had to drive to Buffalo to pick one up there. I got it back home to Toronto and eventually decided to jailbreak it and install the Cydia app store. I still have that phone and, to this day, when you boot it up, you see a pineapple with a bite out of it rather than an apple. I loved that phone. It was such a pleasure just to hold it in your hand.

Eventually when Apple opened things up I wanted to write an iPhone app. I decided that I wanted all of CPAN’s documentation on my phone and in one app, so that I could browse docs on the subway, where there was no cell signal. I was commuting to work on the subway a lot at the time and I figured browsing random CPAN modules was a good way for me to learn.

I eventually wrote iCPAN along with Mark Jubenville. The app got a lot of the documentation out of CPAN and stored it in an SQLite database, which my Objective-C app could then display on your phone. I had to upload a new release anytime I wanted to update the docs, but you had to start somewhere.

As I was writing this I came to realize that what I really wanted was an API which already had the data I was looking for. I was at a meeting of the Toronto Perl Mongers and somebody mentioned this new thing called ElasticSearch (now Elasticsearch), which was basically an API in a box. I went home and started playing with it. After maybe 8 weeks of evenings and weekends I had the first version of the MetaCPAN API. I remember asking for help on the ElasticSearch IRC channel in the early days. Two people in particular were very helpful to me. One of them (Clinton Gormley) went on to become head of Elastic Stack development at Elastic and the other (Shay Banon) became Elastic’s founder and CEO.

The first version of MetaCPAN was basically just ElasticSearch exposed to the Internet, running in a tiny cloud instance. The funding was paid for by folks from Toronto.pm who handed me some cash one evening at a pub. A friend from Toronto.pm, Mark Jubenville, built a JavaScript front end to demonstrate that the API actually worked. It had customizable author profiles. Once we published the URL, people almost immediately got in touch to find out how they could customize their author profiles. From there the interest continued to pick up.

I had to rush to build MetaCPAN since our second child was on the way and I wanted to get something together before my free time disappeared completely. By the time our little girl was born, the project was already up and running and kind of took on a life of its own. I was able to step back a bit and it became more of a collaboration. It also became pretty clear that more people were interested in MetaCPAN than iCPAN. So, my attention shifted away from iOS apps and over to OSSaaS (Open Source Software as a Service).

An Interview with Olaf, Part I

Narsa introduces the subject:

Man, myth, creator of website of legend. Olaf Alders.

Olaf was and is developer #1 on metacpan.org, Senior Software Developer at MaxMind, someone I’ve enjoyed working with, and someone about whom I want to learn more.

Personally, I find MetaCPAN one of the highest utility sites I interact with. As a part-time-plus Perl-programmer at my day job, I find the site to be incredibly useful. Moreover it’s a pleasure to use. I’d like to see more software like MetaCPAN. Hence the interview with Olaf!

For the uninitiated, here’s an excerpt from Wikipedia about the CPAN:


The Comprehensive Perl Archive Network (CPAN) is a repository of over 250,000 software modules and accompanying documentation for 39,000 distributions, written in the Perl programming language by over 12,000 contributors. … Most software on CPAN is free and open source software. … CPAN was conceived in 1993 and has been active online since October 1995.


So, CPAN is a giant warehouse or library full of mostly free, open-source Perl code, ripe for use. MetaCPAN is a search engine for the CPAN and a tool that helps to navigate the sea of packages and to drill down to details about an individual module as well.

Without further ado, let’s dive in. Olaf, what can you tell me about your introduction to programming? Let’s take the scenic route to how you became a founder of MetaCPAN, and your views on software development up to today.

Some initial questions… how did you get started writing code? What languages did you use? What was your path to Perl? And once we get there, how did you find CPAN? What effect did it have on your programming?

And Olaf responds:

I got started programming in High School. We had a computer lab with networked Commodore 64s. There were two rows of tables with a shared hard drive at the end of each row. We also brought in our own floppy disks to keep our work. Our teachers would make us buy a one-sided disk and they would punch the other side so that we could flip them over to double the storage. We learned Waterloo BASIC. I took a typing class in order to make my programming easier. It was a decent way to meet girls too.

At $work I write a lot of Perl and some Go. I’ve got a mix of that in my personal projects as well. I find I’ve been writing a lot of Bash scripts in order to customize my various work environments. Right now I’m reading up on Rust and hoping to mess around with that in some future projects. I’ve dabbled in Python, Java, PHP, JavaScript, ColdFusion and even ASP.

When I got started at University, I was in the Science stream and I took a course in Fortran 77. I hated it so much that I gave up on computers. After my first year I took 3 years off. When I re-enrolled, I went into the Humanities to learn Greek and Latin, which was a much better fit for me. I didn’t own a computer. I was writing my papers by hand. I studied abroad for my second year, in Freiburg, Germany. I had heard about email, so I got an account at the computer lab which the University had. I learned how to use Pine for email and talk for chatting. By the time I got back I didn’t hate computers so much. I had a friend in my Greek class who was building computers for a living. He sold me a machine to run Windows NT on and I slowly got back into things.

By the time I got to grad school I found an old book from the Classics Club that went back to the 1940s. I decided to digitize the book, so I had to learn how to write HTML. There was a guy on campus in the Comp Sci department who was building a server in an old fridge. He would host classes on how to build web sites, so I hung out there. Eventually I wanted to see who was visiting the web pages that I was building, so I learned how to write a CGI script in Perl. I wrote it in Perl because I was told to. That was my start with the language.

Once I got really interested in writing code, I would work for hours at a time. I would be up late at night (badly) re-inventing wheels. When I found CPAN, it was a revelation for me and it freed me up to do more advanced things, since I could just borrow someone else’s code for the basic stuff. I still re-invented some wheels, because I didn’t always know where to look for code that I needed, but it gave me a really big head start in getting my own projects done.

Wrap up of Part I

This was a lot of fun. To preserve and prolong interest in this interview series, we’re gonna keep it short and pick up again real soon!

We must, after all, learn more about this fridge server.

Hello, world.

Here I am!

This is my new blog, powered by Hugo, LetsEncrypt, Nginx, and a VPS.

I’m coming over from Medium which has turned into Tedium the last few years with all the rate limiting.

I wanted a cheap alternative under my own control. And here we are! No analytics, no cookies, no GDPR notice. Noice.

My second post, I promise, will be much more interesting… An interview with Olaf Alders, Coder #1 on https://metacpan.org! Stay tuned…

The best piece of software I’ve written

The best piece of software I’ve written is not interesting at all. It is dead boring, in fact. But it made a difference. Back in 2013, I made the Ruby gem HTTParty use OpenSSL’s VERIFY_PEER by default.

This requires the HTTP client the gem provides to verify the server’s certificate. Without it, SSL/TLS is subject to man-in-the-middle.

The reason I think it’s important is that the gem has the most use of any software I’ve written, with over 40m downloads. I think about 5–10 of those happened before my code was written, so I’ve got about 30m downloads plus of verifying peers.

And then there’s this :)

On web authorship trends

It seems like every web post has an accompanying headshot of the author. One of the things I like most about the internet is the casual anonymity, like we don’t know who the other people are at all, all we have are their words and their ideas. We evaluate them solely based on what they say and no other criteria. It seems kind of democratizing.

I have been using computer/text communication in some form or another from 1987 (modems) to now (PC, cell phone, etc.). For most of that time, you had some kind of handle, like Twitter without the verification or the real name, and no photo of any kind. I really think it works fine.