After several months of putting it off, I have finally retired my old website and replaced it with a shiny new one. And it was about time. I created the old website when I started my PhD at the Max Planck Institute for Software Systems, which was in September 2012. Having in mind how fast things change on the Internet, a face-lift after more than seven years seemed to be long overdue.
Not that I was unhappy with the old website. I liked it a lot! I was proud of its minimalist design, gray headings combined with light-blue hyperlinks—a combination of colors I find aesthetically very pleasing—and its minimal content contained within a single page. I thought it looked elegant, and I was not alone: at least ten people at the MPI-SWS and Penn liked it enough to use it as a template for their own personal web pages.
Nevertheless, the website had its shortcomings. For one, it wasn’t mobile-friendly. At the time it was created, smartphones were not so ubiquitous, and I was completely unaware of concepts like mobile-first design. But one can certainly live with their page being rendered poorly on mobile. More importantly, I’ve always wanted to have a blog, and integrating one with the old website would have required effort which I was never really inclined to expend.
The new website has a blog (you’re reading the first post! ), and it looks great on screens big and small. It is statically generated using Jekyll, and it is hosted on GitHub Pages. I decided to go with a statically generated site because I felt it was perfectly suited for a personal website with a blog: it is simple, secure, and there’s no overhead of running a server with a database. Out of several static generators, I chose Jekyll mainly because of its maturity, large user base, well-written documentation, and shareable themes. As a bonus, Jekyll is natively supported by GitHub Pages, so publishing a blog post is as simple as writing a Markdown-formatted file and pushing it to my GitHub repository.
Choosing a theme for the website was not so simple. I went through hundreds of Jekyll themes available online in search for a clean, elegant design—a theme that would be well-suited for an academic that needs to put forward a short summary of their research and a list of publications. At the end I chose Minimal Mistakes, a theme created by Michael Rose. There is also a theme called Academicpages, which is based on Minimal Mistakes and geared towards academics, but I felt it was a bit too extreme in trying to make every aspect (publications, talks, teaching materials) data-driven and generated from data files. Maybe I’ll regret this decision once my number of publications reaches 100.
One thing that doesn’t play well with statically generated blogs are comments. By their nature, comments are dynamically generated by the readers as they interact with the blog post. While there are solutions for integrating comments into static blogs, all of the solutions I’ve seen so far have drawbacks. For instance, a very popular solution is Disqus. The idea behind it is that you outsource commenting to a third-party service: Disqus provides the comments section for you to embed into your pages. While being simple, with simplicity you also get their ads, user tracking, and security vulnerabilities, and they get to keep your readers’ comments on their servers and use them for any purpose they see fit. On top of that, the comment form that goes on your pages is incredibly ugly!
For websites hosted on GitHub Pages, there are solutions like utterances and Staticman. They use the GitHub API to turn a submitted comment into a GitHub pull request that adds a file containing the comment directly into the repository. The file is then processed by Jekyll and integrated into the corresponding blog post. The idea is pretty neat, and it doesn’t suffer from any of the Disqus’s drawbacks. However, it assumes that there is a principal authenticated with GitHub who can actually issue the pull request. With utterances, the principal is the reader submitting the comment—it is assumed that the reader is also a GitHub user logged into their account. With Staticman, the principal is an external service holding a GitHub authentication token. This service processes the reader’s comment and issues a pull request, so the reader doesn’t have to be a GitHub user. But the service needs to be hosted somewhere. Staticman hosts a public instance of the service, but due to increased popularity, the instance quickly reaches the GitHub’s limit on the number of pull requests it can issue. So it seems that hosting a private Staticman instance is the only viable option.
Of all the options, I think I like Staticman the most. I certainly don’t want Disqus’s ads and trackers on my website, and I don’t want to require a rare soul that stumbles on my blog to be a GitHub user. On the other hand, it seems that running a private Staticman instance on a platform like Heroku shouldn’t be a big deal. The Staticman service is actually a perfect use case for serverless computing provided by systems like Amazon Lambda, but so far I haven’t seen a good solution along those lines. Perhaps I should implement one myself. Either way, I will try to enable comments as soon as possible.
With the technology in place, what am I going to blog about? Well, I don’t want to immediately limit the scope of the blog, but I imagine it’s mostly going to be about math, programming languages, and related topics. For instance, I’m a huge fan of math problems and puzzles, and over the years I’ve seen quite a few that are interesting, unusual, or insightful. Also, sometimes in my research I discover little mathematical bits or solve practical problems that are not important enough to make it into the papers, but they are still interesting. This blog will be an outlet for such topics.
Anyway, knowing myself, there’s a high probability that my enthusiasm will quickly drop and I will lose motivation to maintain the blog. Let’s see how long I can keep it going. Hopefully this post will not be the last one.