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:
- Small is beautiful.
- Make each program do one thing well.
- Build a prototype as soon as possible.
- Choose portability over efficiency.
- Store data in flat text files.
- Use software leverage to your advantage.
- Use shell scripts to increase leverage and portability.
- Avoid captive user interfaces.
- 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
- Text editor: Vim (for all text editing)
- Terminal emulator: Alacritty
- Window manager: Awesome WM
- Bible program: kjv
- Source-control: git (for posts too)
- GNU tools and utilities: grep, sed
- Custom shell scripts
My hardware stack
- Laptop: Dell XPS 13 9310 (purchased July 2022)
- Chromebook: Acer Chromebook 11 N7 11.6" 16GB (purchased March 2022)
NOTE: For both my laptop and my Chromebook, I run Arch Linux.
-
Monitors:
- HP monitor
- Dell Ultra HD 4K Monitor P2415Q 24-Inch Screen LED-Lit Monitor (purchased August 2020)
- Bluetooth keyboard: Anne Pro 2 (purchased May 2020)
- Mouse: Logitech MX Master 3 (purchased March 2021)
On my desk
- Gravity cube timer
- Headset: Audio-technica ATH-M50x
- Microphone: Razer Seiren Mini USB Condenser Microphone (purchased Apr 2022)
- Toy: Funko Pop! Marvel Bobblehead Captain Marvel
- Bluetooth headphones: Bose Comfort Quiet 35 III
- Speakers: Bose Companion 2 Series III Multimedia Speaker System (purchased August 2020)
- Hard drive: Samsung Portable SSD T7 1 TB
-
MIDI controllers:
- Akai Professional LPD8 (purchased January 2021)
- Launchpad Mini MK3 (purchased March 2021)
-
MIDI pianos:
- Yamaha Piaggero NP-11 (purchased December 2020)
- Yamaha Reface CP (purchased Oct 2020)
Why do I have this setup?
- It's simple!
- Using Arch Linux on both computers makes it easier to set up the same software on both computers.
- Using Arch Linux on both computers allows them to use the same scripts.
- Because the Chromebook only has 16 GB of hard disk space, the tools I use must not be too large or I would run out of space quickly. This motivates me to keep my files as flat as possible and to use the GNU tools already present on the computer (or are very small in size once installed).
- With the Chromebook, I get to see how people with lower resources experience my site.
- It's easy to setup again if anything happens to my computers.
- Creating custom shell scripts to do specific tasks is quick and easy.
- pacman (not to be confused with Pac-Man) is the best package manager I have used. It's simple and straight to the point and it is Arch Linux's default package manager. I also use yay (not to be confused with the song "Ye" by Burna boy or the artist "Ye", though they are all pronounced the same way) to get a plethora of other packages not available on the standard Arch repositories.
The bottom line
Don't let anyone tell you what you can or cannot use.
Keep it simple. Choose whatever works for you.