As an inaugural post on this site, I thought it would be fitting to talk about all of the issues I ran into while setting up this website. This is a long story about Ruby, Jekyll, and a couple really fragile build environments.

I first got the idea to host my personal website on github after I saw how successfully leanprover, and the leanprover community used static site generators. I wasn’t looking for anything too fancy, but I wanted to have more structure and control over my website than a hosting service like Squarespace or Wordpress. I also spent some time earlier this year learning some basic CSS and JS and figured it would be a good chance to put that theoretical knowledge into practice.

So why Jekyll and Ruby? Mostly because that’s what all the examples I wanted to emulate used. I knew Ruby was nearly synonymous with web development because of the Rails framework, but I hadn’t heard of Jekyll until I looked closer into all of the SSG options that were available on github. I could have chosen a framework that was based on a language I knew better (like Hyde or Nikola implemented in Python), but looking into the Ruby programming language I realized I wanted an excuse to learn the language.

I shouldn’t spend too long on all of the things that make Ruby appealing, but some of the highlights from my very limited exposure are include: emphasis on objects and OOP, aspects of functional programming tools are easy to access, and the syntax and feel of the language are similar to Python so feel natural. Unlike Python though, Ruby seems to have a more well-defined structure for what constitutes a Ruby Project, and the dependencies and dependency management through Gems is so easy to navigate compared to the incredibly confusing Python package ecosystem. Also the Gems like Jekyll and Ruby on Rails are structured to be user friendly with a kind of plug-and-play perspective that comes from some of the cultural aspects around the language like the convention over configuration design decisions.

Unfortunately not everything went according to plan, though this is not in any way related to Ruby specifically. I currently tend to work on either my laptop which runs Manjaro linux, or my desktop which is running Windows 10 (though most of my programming work is done in ). I like to keep the option available to work on any of my projects on either computer, so I’ve taken some time developing a workflow built around hosting different projects in a variety of github (public and private) repos, Overleaf projects (though I use overleaf as mostly a git repo anyway), and synced Google drive folders. All the issues essentially boiled down to finding an intersection of dependencies that were compatible with the version of Jekyll supported on github pages, and the versions available to WSL which places some serious restrictions on Ruby and Gem versions.

Luckily most of the issues were resolvable by carefully configuring custom environments on each PC using Ruby Version Manager (RVM). This also was a nice eye-opening experience on version management in Ruby versus the massive amount of options for Python that all seem either over-engineered or under-engineered for the purposes I would need them for. It also took a bit of additional time getting the Beautiful Jekyll template configured appropriately for my purposes (and with the versions of Ruby I had available). In the end what you see now (or in a cached version from 2022) is pretty much the first verison of the product.

Going forward, there’s a ton on my todo list for this page. I’ve never been great about keeping disciplined with a blog, but I think writing posts relating to the various projects I have going on might be a good way of starting out and getting into the habit. Beyond that, there are a few page format and style changes I want to make which would involve an afternoon of figuring out how CSS works and copying the right code to the right place. Finally, the biggest goal for now is getting a tagging system to work, so I can organize the blog posts by category and make them easily searchable.