Project background for sake, a task runner for servers
I usually make a project background document for my personal projects, it documents what I'm trying to solve, the core design decisions that will guide the code architecture and comparisons to other software. This is the one I made for
sake, a task runner for servers.
Writing a Transpiler For a Subset of the Markdown Language
For a personal project, I needed to create a Table of Contents are given markdown content, however, the markdown content was to produce a different HTML output than the CommonMarkdown specification. The rules for getting from Markdown to HTML were similar to how Rust mdBook handles Table of Content.
mani, a CLI Tool to Manage Multiple Repositories
TL;DR - Mani is a many-repo tool that helps you manage multiple repositories. It's useful when you are working with microservices, multi-project systems, or just a bunch of personal repositories and want a central place for pulling all repositories and running commands over them.
Working with IndexedDB
When searching for indexedDB on google, the top search results don't provide a good introduction to indexedDB. So I thought it might help others who want to persist some data in the browser (and avoid hitting the limit of localStorages 5 Mb size cap) to more easily get started.
A Brief Intro to SSH
Because I haven't posted in a long time, and I want to maintain the image of being an active blogger, it's time to go over the basics of internet communication, bit by bit... sorry :S
Explaining SOLID through Code
Man is a consumer and a producer, a pattern interpreter and pattern producer; thus the code we produce and consume ought to have characteristics that favor such activities. So, how do we produce easily consumed code? We do so by following patterns and code principles that enable us to increase encapsulation (information hiding), modularity, maintainability, readability, etc., all properties of a well-designed system.
Setting up a private Docker Registry
This tutorial covers setting up a private Docker Registry on AWS with Nginx setup as a reverse proxy and generated Let's Encrypt SSL certificates. While the steps are specific to particular environments (Ubuntu, S3), they can easily be replicated to others. Also keep in mind that Let's Encrypt certificates are only valid for a limited amount of time (something like three months).
97 Things Every Programmer Should Know
"97 things every programmer should know" is a rich book containing programming wisdom from famous software developers. The "things" range from practical advice on how to write code, to the more social aspect of coding and the importance of it. I believe all points combined produce an accurate list of properties of a complete and accomplished programmer.
Recording terminal commands and generating GIFS
In this post, we'll go through how to create a script that records commands on the command-line and generates GIFS (Graphics Interchange Format) without having to record them manually.
Validating BEM using regex
BEM (Block-Element-Modifier) is a naming pattern that helps you reason about your implementations. Any text that embeds a hierarchy or structure is a suitable candidate for BEM. For instance, it can be used to name your CSS components or even keys in your configuration files.
Generate Boilerplates with Bash
I often find myseld creating the same files over and over again. So, in the spirit of automation, I created a boilerplate generator in bash. No need for the old googling and ctrl-c + ctrl-c anymore. You can find the project at github.
Using jsonb in Postgres and Making it Work with BI Software by Leveraging Views
Json (or more recently Jsonb) is a great addition to Postgres, and soon many other established SQL solutions will follow suit. It enables us to relax some of the conditions relational databases come with, such as enforcing a schema (perhaps where no schema is to be found) or having a predefined type. For me, one of the biggest problems it helps tackle is situations where you are faced with a varying number of attributes, usually needed to be dynamically added / removed by the end user. Old solutions include the dreading EAV (entity-attribute-value) model, which treats each additional column or attribute as a row in a table.