Kicking Off My New Blog

Why I am starting a blog and how I made it.

Posted:
Updated:
A road disappearing into the horizon
"The Long Road" by Corey Leopold / CC by 2.0 .

What is this strange place?

This is my first post on this brand new blog. Welcome!

In high school and college, I participated on the speech and debate team. One of my primary events was informative speaking. Since I am an unashamed nerd, I used this event to give speeches about all kinds of nerdy topics. I have competed with speeches in the following:

  • Fermi Paradox
  • Competitive math
  • General relativity
  • Parliamentary government
  • Blockchain
  • Turing test

Beyond formal competition, I was known among my college friends for extemporaneous rants on a wide variety of subjects. I loved being able to dive deep in a topic and then tell everyone else about it. I am no longer competing in speech and debate, but this blog is meant to be a continuation of that effort. Here, I will be sharing the nuggets of knowledge I dig up from the deep burrows of Wikipedia. The rants will be from a random splattering of topics. My main areas of interest are math and computer science, so expect more posts leaning toward those fields, but don’t count out an occasional literary analysis or philosophical question. Knowing me, most of the posts will probably be quite long on the assumption that you find the details as interesting as I do.

Project tenets

So, beyond the content that will be posted here, what is the reason this place exists? After all, there are easier ways to blog then making a website from scratch. I had a few goals in mind when starting this project. First, I want to part of the Indie Web. This is a group of technology hipsters who believe that the social networks of the future should be built off open web standards rather than proprietary platforms like Facebook and Twitter. On the Indie Web, every user hosts their own content on their own websites, but published with standards that make it convenient to syndicate elsewhere. This is a group of people helping preserve the values of a free and open internet that I stand strongly behind, and so by making my own website I take a step toward contributing to this ecosystem. Supporting features of the IndieWeb (like RSS feeds) will come in due time.

Second, self-hosting gives me total creative control over what I post and how it looks like. For example, I have LaTeX\LaTeX enabled on this blog so I can write all of the math I want and in a format I am comfortable with. I also think that this kind of control offers a creativity that is not otherwise accessible. For example, XKCD is a independent website hosting comics of the same name. Most of the comics are static images, but every once in a while a comic like Emojidome is posted. This was a comic where website viewers voted on emojis put in a single-elimination bracket until only one remained. Enabling these kinds of interactive experiences would be much more difficult if this website wasn’t my own.

Third, I’ve been inspired by minimalist websites. For a satirical explanation of the underlying philosophy, see this site.[1] The idea is that the websites that are the fastest, most accessible, and mobile-friendly are the websites that are dead simple. To that end, my website is going to be kept to a minimum in terms of file sizes and run as much as possible without JavaScript. But I do not want simplicity to trade off for quality in any way: the website must still be beautiful, accessible, secure, and indexable.

Technologies

This section is going to get a bit technical so if you’re not much into programming you should probably skip to the next section.

The reason front-end frameworks like React have been getting popular lately is because they offer a lot of developer ergonomics that regular web development lacks. I did not want to have to sacrifice my time and sanity building the web-pages just so the file sizes stay low. The inevitable conclusion is that I needed a front-end build system that could convert a convenient development format and turn it into simple and accessible HTML.

This quickly led me to the Jamstack. This is a group of technologies meant to allow fast, serverless websites. Static site generators (SSGs) rebuild static web-pages whenever you make a change, like uploading a new blog post. These web-pages are uploaded to a content delivery network, where copies are stored in various geographic regions in high availability data centers to keep response times fast and prevent downtime. Dynamic behaviors are triggered through microservices, which can potentially cause the webpage to rebuild. The result is pages that are fast for users to load, easy for web crawlers to index, and cheaper to host compared to a dedicated server. This comes at the cost of being slightly more difficult to dynamically change content. For instance, a web page that shows the current date (if we ignore that JavaScript can do this for us client-side) would be easy with a server but becomes a hassle with a serverless application. Still, for my minimalist bent it seemed perfect.

Most SSGs I found let the author write content in markdown or another similar system. This content is then built into custom webpages based on some predefined templates that specify where the content goes and what other elements like the header and menu bar look like. Many of them appeared to be opinionated on how they could be used, such as only working with Vue or only with certain predefined sections. After trying a few SSGs, I settled on Eleventy specifically because it was not opinionated. I can use any front end technologies and structure my templates in any way I want. The templating language is powerful enough to create components like a header or an OK button in separate files and reuse them throughout my site.

For hosting, I am using Netlify. They have a really nice workflow of reading straight from a git repo to build and deploy the website. There are also some nifty command line tools if I wanted to have a fancier CI system instead. They perform free hosting for a limited maximum bandwidth and build time, but it should more than suffice for now. I saw some stuff on their wiki about services for deploying Lambdas from the same repo connected to form or JavaScript events, but I am not at a place where that is of use to me right now. Still, it is good to know there’s an easy path to add some serverless dynamics (like a comment section).

The Jamstack website also encourages the use of a headless CMS, which as far as I can tell is basically a WYSIWYG editor hooked into the website. This would be helpful if I needed non-technical users to be able to write and publish blog posts without learning how to use git. Since this doesn’t apply to me I am skipping this step. If anything, I prefer markdown with a live preview to a WYSIWYG.

So, I get to write my content in markdown, build page templates with JavaScript and Nunjucks (a template language I am choosing that Eleventy supports), and get a live preview with Eleventy. I have some markdown plugins for things like math and footnotes to make my life easier. When I’m happy, I push and Netlify builds and deploys. I still have some CI tools like linters to set up, but for the most part it will now be relatively straightforward to write blog entries.

And so we begin

As this project is early, a lot more technical work needs to be done. As such, I’ll probably be rotating my free time between blog writing and website development until I get to a point where I’m happy, so the pace of these first few posts will be slow. I won’t be writing blog posts about progress on the webpage again, at least until I make a substantial change. The next blog will be answering why, when computing the standard deviation of a sample, you divide by n1n-1 instead of nn. Hope to see you there!


Footnotes

  1. Also see the the sequels on styling, nitpicking, and accessibility. There are others of varying quality that can be found with a quick search. ↩︎

✉️ Subscribe To The Newsletter

Recieve an email whenever I publish a new blog post.

Your email address is private and won't be used for any other purpose.


Next: Poisoned Wine Bottles Can Teach Us How to Save Covid Tests