All posts

The site

This series of posts is for anything and everything related to the actual operations of this site. Expect to see a mix of general status updates and deep-dives into how I put this site together.

Announcing 'Spark', my site generator

After I rewrote my site generator in C, I decided I should make it open source and share it with the world. Anyone is free to use it and modify it as they like. I present to you: Spark, the static blog site generator.

I'm rewriting the site generator in C

It turns out that having a 300 line shell script to create HTML for pages and posts can be a bottleneck once there's more than a couple dozen pages, especially when your server is using an SSD. So, I'm rewriting the whole thing in C, both for its speed, and because it's been far too long since I've developed in C.

How the site is built

I basically built a rudimentary blogging platform from scratch over the course of a few days to build this site, though that wasn't my exact intention. In this post, I detail how this came to be, and how I'm able to rebuild the entire site with a single command.

How I removed the .html file suffix in site URLs

I updated my nginx configuration so that you don't need .html at the end of URLs. Here's how I did that.

Details on how the site is hosted

In this post I go over the details on how I am building this site, including hosting provider, technologies used, and more.

Welcome to!

My first post! Welcome to my site!

Effective coding

Expect to see posts about the process of writing code.

How to effectively comment code

There are no hard and fast rules when it comes to commenting, but there are definitely some things that should and should not be done to help the reader understand the high level design and intent behind code.

Appropriate use of single letter variable names

The misuse of single-letter variable names is extremely detrimental to the readability of code. In this post, I'll go over the proper use of such names.

What is "clean" code?

Different people have different views on what constitutes readable code. In this post, I explain what my take on the matter is, and lay the foundation for what I mean when I reference "clean code" on this site.

Effective Coding: Series Intro

Start here to understand what I am hoping to accomplish in the series on effective coding.

Fundamental concepts

This series will have posts on concepts that are important to understand. There are three categories/target audiences: Beginner, Novice, and Advanced. I will be making a post that has a suggested reading list for all posts in this series, it will be linked here when it is ready.

Program modeling

Modeling a program is the process of coming up with a representation of a program that allows the reader to understand how it works. It's an important topic to understand, because it's applicable not just when trying to understand existing programs, but also when trying to design and create new programs.

Version control

When you're working on something and you realize you made a mistake, it's really nice to be able to undo those changes. While the undo button is sufficient for a single file, what happens if you are changing multiple files at once? This is where version control systems come in, to allow you to manage the entire history of a project.


Functions allow a programmer to reuse blocks of code throughout a program. Proper use of functions leads to code that is smaller and easier to understand.


Comments are how programmers can convey information to the reader of a piece of code. Proper use of comments is key, especially in larger projects, because good comments make it easier to understand code, which means it's easier to maintain too.


Loops enable programmers to direct the computer to perform some sequence of actions repeatedly. They are frequently employed when dealing with arrays, though they have other uses as well.

Conditional statements

Conditional statements are what programmers use to cause the computer to perform different operations when certain conditions are met; as such, they are present in almost every useful program.

Data structures and variables

Data structures and variables are present in every single program. Through proper naming and use of them, they allow a programmer to convey information simultaneously to both the reader of the programmer and the computer.


Operators are key to performing work in a program, because without them, it would be impossible to manipulate data.

Primitive data types

Primitive data types are those which cannot be broken down into smaller components. Read this to learn more about them.

What is a program?

Computers are like small children -- they do what you say, not what you mean. In this post, I begin to talk about what programmers have at their disposal when creating programs for the computer to execute.

Fundamental concepts reading guide

This post has the topics I'll be writing about in the fundamental concepts series. As I write posts in the series, I will link them in.