All things Technical

How can I find deleted stuff in Git?

September 2, 2021 - Estimated 7 minute read

I was working on an about module a few months ago. I wasn't satisfied with it so I deleted it with all its related files 😬 Now I need to recover parts of this data that I had so conveniently discarded. 🤦‍♀️ I can't remember the exact location of the fi…

A custom alias for a pretty Git log with a graph

September 2, 2021 - Estimated 3 minute read

I have added a git alias for by editing the global config so that it is not localized to a specific git repository. I added the following below the section 👇 will now print a pretty colored summarized log with a graph to indicate branching and m…

Debugging gatsby-plugin-google-gtag for Google Analytics 4 with Gatsby

August 31, 2021 - Estimated 5 minute read

In this article I will cover how I installed and configured the plugin, added my custom track event, tried to test it and it didn't work so I went through a checklist of debugging the thing. Prerequisites I assume that you are already familiar with …

Feature Development Lifecycle with minimum viable features

August 30, 2021 - Estimated 7 minute read

Successful features are in small bite-sized chunks that are released iteratively and regularly through the Feature Development Lifecycle. I just rewrote my blog. It took a while because I was pedantic about getting numerous features live. I think I …

What I did to build a high performing and SEO happy Gatsby blog

August 29, 2021 - Estimated 7 minute read

As much as I want an attractive blog, I prefer a blog that is more discoverable and outperforms others. That makes the eye-candy totally worth it and I feel great knowing that I do the best I possibly can to make - what I hope to be - a great experi…

Emulating rendering options in Chrome DevTools

August 27, 2021 - Estimated 3 minute read

I wrote an article about Simulating mobile devices in Chrome way back in 2016. I decided to extend it with this article where I cover different rendering options that can be emulated from simple to extreme accessibility features. Let's dive right in…

How I got started with my first Gatsby source & remark plugin

May 2, 2020 - Estimated 3 minute read

I created my first npm package - EVER! 🎉 It's a Gatsby source and transformer remark plugin called gatsby-remark-interactive-gifs. What that means is that it both extends the Gatsby GraphQL schema with what I call interactive gif data and it transla…

Git aliases

September 2, 2019 - Estimated 1 minute read

You can create Git aliases for long or repetitive commands which map to short cuts. This can make your workflow more efficient as it decreases the number of keystrokes involved. You create your alias using the Git config command which updates the Gi…

gatsby-remark-emoji

September 1, 2019 - Estimated 1 minute read

I use this plugin for emojis on my website. The reference to all possible emojis are hidden here. The current emojis include the following. You can reference an emoji by surrounding the keyword with colons such as :emoji-key: 💯 A better, more accura…

Setup macOS development environment

August 31, 2019 - Estimated 9 minute read

Note: I am running macOS Mojave on a 2.8 GHz Intel Core i7 with 16 GB 2133 MHz LPDDR3 RAM. I am setting up my environment to write some awesome Clojure code. This environment is for Clojure and NodeJS development using the Spacemacs configuration wi…

Look, I have a MacBook Pro now

August 30, 2019 - Estimated 1 minute read

Hooray, I now have a new MacBook Pro! I never thought the day would come where that would happen. I've always been a Microsoft junkie, hacking away at daddy's computer as a young girl while other girls were having sleep overs and pillow fights and w…

The Silver Searcher

August 29, 2019 - Estimated 2 minute read

The utility was designed to replace 99% of the uses of grep. As stated in the man page Ack searches the named input FILEs (or standard input if no files are named, or the file name - is given) for lines containing a match to the given PATTERN . By …

Creating a Clojure solution using IntelliJ

April 17, 2019 - Estimated 2 minute read

I am creating a simple Clojure web app and API. In this post I explore how to create each with the command and what references I need to use. I plan to work on a monolith IntelliJ and git solution so that I don't need to maintain multiple projects …

Greet users with the message of the day

February 15, 2019 - Estimated 1 minute read

The message of the day is known as motd. It's used to send a message to users after logging into a shell, commonly used on hosts. You can generate ASCII art and paste it into the motd file to spice things up. I found that patorjk.com offers a nice w…

Cisco ASA cheat sheet

February 10, 2019 - Estimated 3 minute read

Cisco Adaptive Security Appliancy is known as the Cisco ASA. It is used to protect networks and data centres. It offers firewall, VPN and facilitates dynamic routing amongst other features and capabilities. It runs on Linux using a single Executable…

Getting started with Cisco Adaptive Security Virtual Appliance in AWS

February 9, 2019 - Estimated 5 minute read

I work with NATs and ACLs on Cisco ASA (Adaptive Security Appliance) in the terminal. I want a sandbox environment for me to go bonkers. I couldn't find an image from Cisco to download and install so I chose to go shopping on the AWS Marketplace. I …

Installing Elasticsearch and Kibana

February 5, 2019 - Estimated 6 minute read

An NRT (near-realtime) search platform. It's about a one second delay from the time a document is indexed until it is searchable. Elasticsearch Installation There are a lot of ways to install Elasticsearch and on many different platforms. Pick your …

Migrate my search from Solr to Elasticsearch

February 5, 2019 - Estimated 6 minute read

An NRT (near-realtime) search platform. It's about a one second delay from the time a document is indexed until it is searchable. I have been using Solr for my search but have been wanting to migrate to Elasticsearch for experience in this technolog…

Uninstall an app from the terminal

February 4, 2019 - Estimated 1 minute read

I installed an application. It misbehaved. I wanted to try out a time tracking app. It should let me track reminders and record activity spent in meetings, out-of-office and on tasks I am working on, etc. I need to be able to interact with it in the…

SSH for Days

February 3, 2019 - Estimated 3 minute read

Mosh - the mobile shell. This remote terminal let's you roam with intermittent connectivity without breaking your SSH tunnel. The package must be installed on both the client and server and does not need to be run as a super user. It replaces intera…

Set $JAVA_HOME in Linux

February 2, 2019 - Estimated 1 minute read

$JAVA_HOME an environment variable. It is the root path of the JRE or JDK which some applications and services use to access Java. I know that Java is installed but its not in the path , the output is empty. Configure for single user Open the shell…

Working With Git Remotes

January 29, 2019 - Estimated 4 minute read

I have a repository with two remotes. origin is my personal repository and bitbucket is by BitBucket repository. The nugget of this post is to push to both branches in one command. The git remote command lets you create, view, and delete connections…

Create a symlink for hidden files

January 27, 2019 - Estimated 1 minute read

I want to create a symlink for all hidden files excluding the hidden directories. I want to put my configuration files in my home directory into version control. I need to exclude the hidden directories because they contain binaries and what not. Us…

Why I Create Atomic Commits In Git

January 26, 2019 - Estimated 3 minute read

I wrote about crafting changes into small atomic commits using Git. It looked like there was some confusion. I want to share what I understand about atomic and monolithic commits and why I create atomic commits in Git. I got a question in Reddit by …

How To Craft Your Changes Into Small Atomic Commits Using Git

January 15, 2019 - Estimated 7 minute read

Small, atomic commits makes it easier for code reviews, browsing the history and reverting changes. Life happens and commits can touch more lines and files than I want but the changes committed should be distinct. "Don't mix your apples with your to…

Using the tar Command in Linux

January 14, 2019 - Estimated 10 minute read

I used to right-click on a zipped file and manage the archive using the GUI. Gone are those days. Now I mainly work with tar files and need a cheat sheet to remember the commands for the terminal. 😊 You can find that at the end of this post. This po…

Checking Disk Usage in Linux

January 13, 2019 - Estimated 11 minute read

I had to find out much free space was available on a file system on a Linux server. Now getting this information on the GUI is simple - a few clicks, modals and stuff, but the server doesn't have a GUI so it's off to the terminal I go 😋 The other sc…

A Service Has Gone Rogue. How Do I Manage It?

January 8, 2019 - Estimated 3 minute read

Once I installed a development service on port 3000 and I forgot about it. When I ran my project I couldn't start it because the port was in use. Baffled. 😕 This post forms part of a sequence of command line references that I will be writing where I…

Setting up Solr on Nginx with Let's Encrypt

December 16, 2018 - Estimated 15 minute read

I want to enable search on my blog. I started looking into different solutions. I started with ElasticSearch but came across too many issues to get it setup that I paused on that and moved on to Solr. I fully intend on working with ElasticSearch and…

Logging to Graylog in Clojure

November 30, 2018 - Estimated 2 minute read

It's simple. I wanted to log to Graylog from my Clojure application. I banged my head numerous times trying to figure out how and why it did't want to work. Here's what I did to complete my mission. Graylog Go to System > Inputs > Gelf UDP / TCP > L…

Setting up my environment in Fedora - Installing apps

October 20, 2018 - Estimated 5 minute read

I had to re-install so I documented my process. In this post, I focus on the installation of my most used apps. Get ready is Dandified YUM, a -based distribution package manager. To speed up the upgrade download times, try using fastest mirror. Ap…

Setting up my environment in Fedora - Customizing my shell

October 20, 2018 - Estimated 4 minute read

I had to re-install so I documented my process. In this post, I focus on configuring my shell for a personalized experience. Install Oh My Zsh zsh is an interactive shell with many features that improve the command line experience. Oh My Zsh is a ve…

Setting up my environment in Fedora - Creating a boot disk

October 20, 2018 - Estimated 1 minute read

I had to re-install so I documented my process. In this post, I focus on getting a Fedora 28 live media installation ready on a USB boot disk so that I can begin the installation process. Note: I am using a Lenovo Ideapad 330. When the logo appears …

Setting up my environment in Fedora - Creating backups

October 20, 2018 - Estimated 3 minute read

I had to re-install so I documented my process. In this post, I focus on getting my data backed up so that I can restore it after the installation. Whatever isn't in git gets archived. This is mainly my home directory. I want it backed up to my VM a…

Setting up my environment in Fedora

October 20, 2018 - Estimated 3 minute read

I needed to format my HDD because ... reasons. 😁 For a change, I decided to play around with Fedora instead of Ubuntu. The installation was painless and the user experience is much like what I am used to. I had a few hiccups on this journey mainly d…

Datomic Cheat Sheet Series - Queries (Part 5) - Transactions

October 18, 2018 - Estimated 3 minute read

In this post I work through transactions. The example queries are grabbed from the Datomic Docs. If you want to get started with Datomic, check out the first post in the series. If you want to see other queries, then check out part 1 and part 2. If …

Datomic Cheat Sheet Series - Queries (Part 4) - Pull

September 20, 2018 - Estimated 3 minute read

In this post I work through pull expressions using the Datomic MusicBrainz sample database. The example queries are grabbed from the Datomic Docs. If you want to get started with Datomic, check out the first post in the series. If you want to see ot…

Datomic Cheat Sheet Series - Queries (Part 3) - Rules

September 20, 2018 - Estimated 2 minute read

In this post I work through the creation of rules using the Datomic MusicBrainz sample database. The example queries are grabbed from the Datomic Docs and the Datomic mbrainz sample GitHub pages. If you want to get started with Datomic, check out th…

Datomic Cheat Sheet Series - Queries (Part 2)

September 20, 2018 - Estimated 7 minute read

In this post I work through more querying capabilities using the Datomic MusicBrainz sample database. The example queries are grabbed from the Datomic Docs. If you want to get started with Datomic, check out the first post in the series. If you want…

Datomic Cheat Sheet Series - Queries (Part 1)

September 15, 2018 - Estimated 3 minute read

In this post I work through querying the Datomic MusicBrainz sample database. The example queries are grabbed from the Datomic Docs. If you want to get started with Datomic, check out the previous post in the series. Relationship diagram Create a n…

Datomic Cheat Sheet Series - Getting Started

September 6, 2018 - Estimated 6 minute read

Get started with the essentials of Datomic from installing Datomic, running a transactor, working with the Datomic console, running the Datomic REPL, creating and restoring a database, creating a schema and furnishing it with data. The goal of this …

Behind the Scenes: My Blog

August 28, 2018 - Estimated 3 minute read

I developed corporate programmer using a Ruby-based static-site generator called Jekyll. It transforms Markdown, Liquid, HTML and CSS to a static website so that no is database required. While I was planning to leave the corporate world, I started r…

Clojure Buzzwords I am Learning

August 15, 2018 - Estimated 15 minute read

When I first started with Clojure, my mind was foggy and filled with a swarm of buzzwords. There were tools, plugins, libraries, patterns and frameworks with names that were all new to me. This is a blog post of all the buzzwords that I am learning.…

Learning Linux

July 27, 2018 - Estimated 6 minute read

I have used Windows for over twenty years. Oh my goodness that's a long bloody time. Now I've joined the Linux world. It's thrilling. I'm loving it, learning, sharing (and as always - documenting) what I love and learn. Ubuntu's APT (Advanced Packag…

A Trilogy About the Chrome DevTools in Many Parts

July 22, 2018 - Estimated 5 minute read

Don't take your knowledge for granted. Share it. Someone could learn something new. It also helps you remember it. Keep a record of what you learn in a blog, memo or even a paperback book. Whatever you choose, jot it down and help your future self a…

Building a Monitoring Display with a Rock64

July 12, 2018 - Estimated 8 minute read

There is a page that we want to monitor. It has a lot of valuable information on it and fits nicely on a 4K screen. A ROCK64 device will power this display. The use case is simple: when the device turns on, the user must log in automatically. A brow…

Byte order mark

October 9, 2016 - Estimated 9 minute read

The byte order mark or BOM is an invisible Unicode magic number that can be found at the beginning of a text stream. We recently changed static HTML on a web page and all Unicode characters displayed incorrectly. This was caused by the missing byte …

Contributing to the README

September 24, 2016 - Estimated 4 minute read

When someone new works on your repository, make sure it is easy to get setup. Imagine if we didn't have any documentation; if we all adopted the mindset of "I already know this, let others figure it out on their own." No more books. No more Wikipedi…

Discovering fiddles

June 19, 2016 - Estimated 5 minute read

If you are new to fiddles, it's an online code playground that let's you quickly experiment, visualize results and share code without having to start up an IDE, editor or server of some sort. They are generally free and include features such as synt…

Some new HTML5 elements

June 18, 2016 - Estimated 4 minute read

The HTML5 specification has introduced more elements to aid us with semantic markup. I've discussed some of the design changes as well as the introduction of structural elements. Note: There are many books, articles, wikis and posts relating to thes…

HTML5 structural semantics

June 17, 2016 - Estimated 6 minute read

In 2005 Google sampled (link since removed) over a billion documents. This highlighted popular class names, elements, attributes and other related metadata. The data surfaced many structural requirements related to 's with classes of , , , etc. As …

Design changes in HTML5

June 16, 2016 - Estimated 5 minute read

Elements, attributes, and attribute values are semantic according to the HTML5 Specification. These definitions allow HTML processors, such as Web browsers, screen readers or search engines, to present and use documents and applications in a wide va…

Simulating mobile devices in Chrome

June 8, 2016 - Estimated 6 minute read

Edited on Friday, 27 August 2021. Discover the simulation power behind the Device Mode feature in Google Chrome. Chrome DevTools has a feature called Device Mode since Chrome 49. This feature extends some previous features by allowing you to simulat…

The importance of Git history

May 14, 2016 - Estimated 6 minute read

Version control is like time travel for source code. If commits are monolithic and the messages suck... what exactly are you going back to? I use Git at work and in my personal playground. It gives me the confidence I need to explore options and exp…

Problems with microservices

May 13, 2016 - Estimated 4 minute read

After an interesting debate, I decided to explore some of the problems that teams may face with microservices architecture. Trying to decipher a monolithic app is a real pain. Changing it is scary. I don't always trust the test suites attached to co…