RTL-SDR basic setup

What is a Software Defined Radio (SDR) I recently got my hands on a RTL-SDR which is a software defined radio (SDR). A software-defined radio (SDR) is a radio communication system where components that have been traditionally implemented in hardware (e.g. mixers, filters, amplifiers, modulators/demodulators, detectors, etc.) are instead implemented by a means of software on a personal computer or embedded system. In recent years SDRs have become very affordable using commedy hardware. [Read More]

Automatic CMake Header Dependency

Download dependencies

Often times 3rd party dependencies can be the hardest part of setting up a C++ project. CMake has eased this pain, but it is still often quite difficult to deal with with the numerous different types of build system. CMake includes the FetchContent library call which allows a dependency to either be cloned from a git repository or tar.gz archive to be included into the project. This is a very convenient feature which allows your projects dependencies to be neatly downloaded without having to include the source in your project. [Read More]
cmake  c++ 

PC / Desk Setup

I spend a lot of time at my PC so I've put a lot of though into the parts that make the experience a pleasent one. I have a modest PC I build back in 2015 when I was still in high school. It's served me quite well over the years. Here are the major components that make up my system. I'm also planning on updating this post whenever I add new equipment to my desk setup. [Read More]
pc  desk 

Raspberry Pi IR Receiver

I recently got my hands on a IR Receiver and Transmitter module from a ELEGOO Upgraded 37 in 1 Sensor Modules Kit V2.0. I wanted to learn how the technology works and figure how to the IR transmitter with my Raspberry Pi 4. EEVblog has an excellent video describing how the IR transmitter and receiver work in excellent detail. EEVblog #506 - IR Remote Control Arduino Protocol Tutorial Signal Basics The IR transmitter works by using OOK (on off keying) to modulate a carrier frequency. [Read More]

Vim Plug Autoload

This post is about how to write some vim-script to autoload the plugin manager from the .vimrc. This makes the process of getting up and running on a new system easier because the plugin manager is automatically downloaded as well as the plugins are also automatically downloaded. Using the commands from https://github.com/junegunn/vim-plug I was able to create a script to auto download VimPlug for vim and NeoVim on windows and on Linux. [Read More]

CMake Dependencies using Fetch Content

Simple built-in method to download and build dependencies

I recently have been wanted to play around a bit with learning the Vulkan graphics API. Before I was able to get started with that I needed a couple if libraries as dependencies to make things easier to work with cross platform. GLFW is an Open Source, multi-platform library for OpenGL, OpenGL ES and Vulkan development on the desktop. It provides a simple API for creating windows, contexts and surfaces, receiving input and events. [Read More]

Git Issue in Docker

Failed to Initialize Git Repository in Docker

Failed to Initialize Git Repo in Docker http://blog.johngoulah.com/2016/03/running-strace-in-docker/ While working with Docker I was trying to automate the build of a project. The project automatically downloaded the source code for several dependencies using Git. When running this command on Linux everything worked flawlessly as expected. When I tested the same build setup on Docker for Windows on my PC things worked as expected there were no build issues. Then as other people started to use the build script they ran into a weird error that I have never seen before that is shown below. [Read More]
git  docker  wsl 

TestDisk Saved My Data

Using Testdisk to Recover a Formatted Partition

It started a couple days ago when I was trying to format a flash drive on Linux. I ran the following commands to format the flash drive to exfat so that I could use it to take some files to work that I needed. mkfs.exfat /dev/sdc1 The only problem was that I didn't double check the device I was formatting. This is something that you should always check, when you are running a destructive command. [Read More]

Wireguard VPN behind NAT

How to Setup VPN without Port Forwarding (Keep Alive Packets)

In this blog post I would like to show my setup on how I set a VPN to my work account without setting up port forwarding. Currently I work at a small company that does not have a large IT infrastructure. The building that we are leasing manages the network for us which means that we cannot customize the network to our needs. My goal was to be able to ssh into my work PC in case I forget to push some code and didn't want to wait until the next time I came in the office. [Read More]

Decreasing Elf Size


Recently I had a problem of reducing the size of an ARM executable that was being loaded onto a embedded platform with only 640K of flash storage. I ran into an issue where the executable was much larger than it should have been. For this post I'll create an example empty c file to demonstrate what is happening. // main.c int main() {}; I'll go ahead and compile the simple program using the arm cross compile. [Read More]
gcc  arm  embedded