My setup

Mountains

For a dream cometh through the multitude of business; and a fool's voice is known by multitude of words.

Ecclesiastes 5:3, The Bible

Complexity has always been a sworn enemy of mine. I have abandoned whole codebases and projects because of complexity. I try my best to keep it out of my life because it brings about unnecessary stress.

That being said, I have a setup that gives me control and scale without sacrificing simplicity. In this blog post, I would like to discuss the computer setup that works for me and why it does.

The UNIX philosophy

For in the multitude of dreams and many words there are also divers vanities: but fear thou God.

Ecclesiastes 5:7, The Bible

I use the UNIX philosophy to help guide my decisions:

  1. Small is beautiful.
  2. Make each program do one thing well.
  3. Build a prototype as soon as possible.
  4. Choose portability over efficiency.
  5. Store data in flat text files.
  6. Use software leverage to your advantage.
  7. Use shell scripts to increase leverage and portability.
  8. Avoid captive user interfaces.
  9. Make every program a filter.

My software stack

Let's talk about my software stack from the ground up:

Operating system

I use Arch Linux (BTW). I find it to be the easiest Linux distribution I've used so far, though I would only recommend it to people who understand Linux very well, or are willing to learn.

Linux tries to follow all the Unix philosophy rules, as Linux is a free version of Unix.

Reverse proxy server

My reverse proxy server of choice is Nginx.

Web server

My web server of choice is uWSGI. I previously used gunicorn, but it seemed to take too much RAM, so I swapped it out.

Database

For my database, I use the Linux filesystem. No SQL, no NoSQL, just the filesystem. I prefer to store my posts as Markdown (.md) files. I find this easier to manage.

I never actually thought that this style could scale until I tried it for myself. So far, I'm loving the freedom it brings; I could go to any saved file and read it directly. No passwords, no checking if the database is up and running, no trying to optimize SQL queries, nada!

This method affords me the luxury of using any file format I want, depending on what I require at the time. For any structured data, I plan to use the JSON file format, JSON Schema, and jq as a query language.

Web framework

My web framework of choice is Flask. I love it because it's a microframework and it just stays out of the way after it hands its requests to me.

Server-side scripting

Let the snake take its rightful place! Python is my language of choice due to its simplicity and online support. I also like that it's a language that you could do whatever you like with as it's not closed source in any way.

Python gets a bad rap for its speed, but it has not proven to be a problem since I have started using it. I did get a long lag on loading my pages before, but that was because of a poorly thought-out code.

Content and structure

I create all my website structure with HTML using Jinja2 as my template engine of choice.

Layout and styling

I create my layouts and styling with CSS. I don't use any libraries or frameworks.

Client-side scripting

I create my client-side scripts with JavaScript. I don't use any frameworks, but I do use libraries when necessary (like of rendering code snippets).

My software tools

My hardware stack

NOTE: For both my laptop and my Chromebook, I run Arch Linux.

On my desk

Why do I have this setup?

The bottom line

Don't let anyone tell you what you can or cannot use.

Keep it simple. Choose whatever works for you.

If you would like to reply to or comment on this blog post, feel free to email me at efe@mmhq.me.