Medium syndication information

This commit is contained in:
Brandon Rozek 2023-01-05 14:04:45 -05:00
parent e5a96d735a
commit c5ff5538a6
No known key found for this signature in database
GPG key ID: 26E457DA82C9F480
276 changed files with 371 additions and 80 deletions

View file

@ -3,6 +3,7 @@ title: "Debugging and Performance"
date: 2019-06-15T10:59:30-04:00 date: 2019-06-15T10:59:30-04:00
draft: false draft: false
tags: [ "Testing" ] tags: [ "Testing" ]
medium_enabled: true
--- ---
I've come to like the GNU Debugger (GDB) and the `perf` tool recently. This post will be a short summary of the various interesting commands you can use. I've come to like the GNU Debugger (GDB) and the `perf` tool recently. This post will be a short summary of the various interesting commands you can use.

View file

@ -4,6 +4,7 @@ date: 2022-06-19T19:01:35-04:00
draft: false draft: false
tags: ["GPS"] tags: ["GPS"]
math: false math: false
medium_enabled: true
--- ---
For a new feature that I'm cooking up for my website, I need to grab the GPS information from the EXIF data stored in my images. Luckily, `imagemagick` For a new feature that I'm cooking up for my website, I need to grab the GPS information from the EXIF data stored in my images. Luckily, `imagemagick`

View file

@ -4,6 +4,7 @@ date: 2022-10-04T11:38:03-04:00
draft: false draft: false
tags: [] tags: []
math: false math: false
medium_enabled: true
--- ---
I [previously wrote](/blog/identifying-plants-with-inaturalist/) about using Seek to identify organisms and then uploading them separately to iNaturalist. Though after some thought I believe that by only uploading photos that Seek has blessed as knowing, I may be reinforcing peculiar features of the dataset and hence the model. I [previously wrote](/blog/identifying-plants-with-inaturalist/) about using Seek to identify organisms and then uploading them separately to iNaturalist. Though after some thought I believe that by only uploading photos that Seek has blessed as knowing, I may be reinforcing peculiar features of the dataset and hence the model.

View file

@ -3,6 +3,7 @@ title: "Algorithms in LaTex"
date: 2020-05-14T21:31:28-04:00 date: 2020-05-14T21:31:28-04:00
draft: false draft: false
tags: ["LaTex"] tags: ["LaTex"]
medium_enabled: true
--- ---
There's a great package in LaTex called [`algorithm`](https://ctan.org/pkg/algorithms?lang=en) to help format psuedo-code algorithms for scientific papers. Here's a simple example of its usage: There's a great package in LaTex called [`algorithm`](https://ctan.org/pkg/algorithms?lang=en) to help format psuedo-code algorithms for scientific papers. Here's a simple example of its usage:

View file

@ -4,6 +4,7 @@ date: 2021-07-25T10:43:11-04:00
draft: false draft: false
tags: ["Amateur Radio"] tags: ["Amateur Radio"]
math: false math: false
medium_enabled: true
--- ---
When a radio wave hits an antenna, the electrical component of the wave induces a difference of potential in the conductor which gives rise to an electric current. This is called electromotive force. The current induced is normally small, therefore, we usually design antennas to be as efficient as possible. When a radio wave hits an antenna, the electrical component of the wave induces a difference of potential in the conductor which gives rise to an electric current. This is called electromotive force. The current induced is normally small, therefore, we usually design antennas to be as efficient as possible.

View file

@ -3,6 +3,7 @@ title: "Deploying Binaries to other Linux Distros using Appimage"
date: 2020-10-19T21:53:52-04:00 date: 2020-10-19T21:53:52-04:00
draft: false draft: false
tags: ["Packaging", "Linux"] tags: ["Packaging", "Linux"]
medium_enabled: true
--- ---
One way to distribute to different Linux distributions is to compile the source under each of them and distribute it separately. This can be a pain to manage if you target multiple distributions and multiple versions of those distributions. Instead, let's take a look at AppImage. This allows us to package up our binaries and shared libraries under one file which we can distribute. One way to distribute to different Linux distributions is to compile the source under each of them and distribute it separately. This can be a pain to manage if you target multiple distributions and multiple versions of those distributions. Instead, let's take a look at AppImage. This allows us to package up our binaries and shared libraries under one file which we can distribute.

View file

@ -3,6 +3,7 @@ title: "Show Applications using the Internet"
date: 2020-05-09T11:30:36-04:00 date: 2020-05-09T11:30:36-04:00
draft: false draft: false
tags: ["Linux", "Networking"] tags: ["Linux", "Networking"]
medium_enabled: true
--- ---
There's a great thread on [ask ubuntu](https://askubuntu.com/questions/104739/which-applications-are-using-internet) on seeing which applications are using the Internet. I'm going to add my own spin on the answers for future reference. There's a great thread on [ask ubuntu](https://askubuntu.com/questions/104739/which-applications-are-using-internet) on seeing which applications are using the Internet. I'm going to add my own spin on the answers for future reference.

View file

@ -4,6 +4,7 @@ date: 2022-05-20T22:47:48-04:00
draft: false draft: false
tags: ["Hugo", "Mastodon", "Archive"] tags: ["Hugo", "Mastodon", "Archive"]
math: false math: false
medium_enabled: true
--- ---
In the spirit of [syndicating Mastodon toots](/blog/why-i-pesos-from-mastodon/) In the spirit of [syndicating Mastodon toots](/blog/why-i-pesos-from-mastodon/)
to my own site, I wrote a Python script that turns toots into Hugo markdown to my own site, I wrote a Python script that turns toots into Hugo markdown

View file

@ -3,6 +3,7 @@ title: "Mirroring or Archiving an Entire Website"
date: 2019-08-02T22:42:16-04:00 date: 2019-08-02T22:42:16-04:00
draft: false draft: false
tags: [ "Archive" ] tags: [ "Archive" ]
medium_enabled: true
--- ---
I have several old Wordpress sites lying around that I would like to archive but not maintain anymore. Since I don't intend to create any more content on these sites, we can use tools like `wget` to scrape an existing site and provide a somewhat *read-only* copy of it. I say read-only not because we can't edit it, but because it's not in the original source format of the website. I have several old Wordpress sites lying around that I would like to archive but not maintain anymore. Since I don't intend to create any more content on these sites, we can use tools like `wget` to scrape an existing site and provide a somewhat *read-only* copy of it. I say read-only not because we can't edit it, but because it's not in the original source format of the website.

View file

@ -3,6 +3,7 @@ title: "aspell"
date: 2019-12-10T22:20:48-05:00 date: 2019-12-10T22:20:48-05:00
draft: false draft: false
tags: [ "Linux" ] tags: [ "Linux" ]
medium_enabled: true
--- ---
When I was working on my honors thesis, I realized that I needed a way to spell check the file. After a quick search, I stumbled upon `aspell` which is a `curses` based tool to provide an interactive way for dealing with misspellings. Try it out when you have the chance! When I was working on my honors thesis, I realized that I needed a way to spell check the file. After a quick search, I stumbled upon `aspell` which is a `curses` based tool to provide an interactive way for dealing with misspellings. Try it out when you have the chance!

View file

@ -3,6 +3,7 @@ title: "Quick Python: Async Callbacks"
date: 2020-07-11T20:23:29-04:00 date: 2020-07-11T20:23:29-04:00
draft: false draft: false
tags: ["Python"] tags: ["Python"]
medium_enabled: true
--- ---
I've written a post on using [callbacks in Python](/blog/pysubscribepattern/). Though to add callbacks to `asyncio` functions, you'll have to interact with the loop object directly. Replace the emit function in the previous post with the following: I've written a post on using [callbacks in Python](/blog/pysubscribepattern/). Though to add callbacks to `asyncio` functions, you'll have to interact with the loop object directly. Replace the emit function in the previous post with the following:

View file

@ -3,6 +3,7 @@ title: "Replace Audio in Video"
date: 2020-04-20T20:32:26-04:00 date: 2020-04-20T20:32:26-04:00
draft: false draft: false
tags: ["Audio-Video"] tags: ["Audio-Video"]
medium_enabled: true
--- ---
I recorded a video and wanted to touch up my audio in audacity. Here's how I used `ffmpeg` to extract the audio, and then replace it with a modified version. I recorded a video and wanted to touch up my audio in audacity. Here's how I used `ffmpeg` to extract the audio, and then replace it with a modified version.

View file

@ -4,6 +4,7 @@ date: 2022-05-15T22:20:47-04:00
draft: false draft: false
tags: ["Linux", "Containers"] tags: ["Linux", "Containers"]
math: false math: false
medium_enabled: true
--- ---
Recently, I have been [transitioning to Podman](/blog/rootless-docker-compose-podman) for running my container infrastructure. In the process, I brought over Watchtower which I have previously used for auto-updating docker containers. Before doing so, I didn't check its [compatibility](https://github.com/containrrr/watchtower/issues/1060) (whoops) and found a few of my containers would every other week or so not come back up. Recently, I have been [transitioning to Podman](/blog/rootless-docker-compose-podman) for running my container infrastructure. In the process, I brought over Watchtower which I have previously used for auto-updating docker containers. Before doing so, I didn't check its [compatibility](https://github.com/containrrr/watchtower/issues/1060) (whoops) and found a few of my containers would every other week or so not come back up.

View file

@ -3,6 +3,7 @@ title: "Auto-Deploy Docker Applications"
date: 2020-05-09T10:20:34-04:00 date: 2020-05-09T10:20:34-04:00
draft: false draft: false
tags: ["Containers"] tags: ["Containers"]
medium_enabled: true
--- ---
This post will combine that last three posts on [Packer](/blog/snapshotswithpacker/), [Terraform](/blog/autodeployterraform/), and their [configuration](/blog/sharedpackerterraformconfig/) to show an entire example of how to deploy a docker-compose application. We will specifically look at deploying a game called [`minetest`](https://www.minetest.net/) on DigitalOcean, but these principles can be adjusted to deploy your application as well. The entire setup is [documented on Github](https://github.com/Brandon-Rozek/minetest-deploy). This post will combine that last three posts on [Packer](/blog/snapshotswithpacker/), [Terraform](/blog/autodeployterraform/), and their [configuration](/blog/sharedpackerterraformconfig/) to show an entire example of how to deploy a docker-compose application. We will specifically look at deploying a game called [`minetest`](https://www.minetest.net/) on DigitalOcean, but these principles can be adjusted to deploy your application as well. The entire setup is [documented on Github](https://github.com/Brandon-Rozek/minetest-deploy).

View file

@ -3,6 +3,7 @@ title: "Automatic Deployments with Terraform"
date: 2020-05-08T22:45:18-04:00 date: 2020-05-08T22:45:18-04:00
draft: false draft: false
tags: ["Deployment"] tags: ["Deployment"]
medium_enabled: true
--- ---
I have recently written about [Packer](/blog/snapshotswithpacker/) to create system images or snapshots. This post will go over another [HashiCorp](https://www.hashicorp.com/) project named [Terraform](https://www.terraform.io/) that we can use to deploy that image to a VPS. Like before, I am going to go over how to setup this up in DigitalOcean. Check out [this list](https://www.terraform.io/docs/providers/index.html) for documentation on your favorite cloud provider. I have recently written about [Packer](/blog/snapshotswithpacker/) to create system images or snapshots. This post will go over another [HashiCorp](https://www.hashicorp.com/) project named [Terraform](https://www.terraform.io/) that we can use to deploy that image to a VPS. Like before, I am going to go over how to setup this up in DigitalOcean. Check out [this list](https://www.terraform.io/docs/providers/index.html) for documentation on your favorite cloud provider.

View file

@ -3,6 +3,7 @@ title: "Auto Purge Old Docker Images"
date: 2020-09-28T23:30:22-04:00 date: 2020-09-28T23:30:22-04:00
draft: false draft: false
tags: ["Containers"] tags: ["Containers"]
medium_enabled: true
--- ---
I use [Watchtower](https://github.com/containrrr/watchtower) to automatically update the docker images I use. After leaving it for several months, I've realized that I have been storing over 100GB of old docker images. I needed a way to automatically purge old images and [Systemd Timers](https://opensource.com/article/20/7/systemd-timers) is the solution. I use [Watchtower](https://github.com/containrrr/watchtower) to automatically update the docker images I use. After leaving it for several months, I've realized that I have been storing over 100GB of old docker images. I needed a way to automatically purge old images and [Systemd Timers](https://opensource.com/article/20/7/systemd-timers) is the solution.

View file

@ -3,6 +3,7 @@ title: "Autostart Desktop Applications"
date: 2020-11-29T13:45:28-05:00 date: 2020-11-29T13:45:28-05:00
draft: false draft: false
tags: ["Linux"] tags: ["Linux"]
medium_enabled: true
--- ---
The [freedesktop specification](https://specifications.freedesktop.org/autostart-spec/0.5/ar01s02.html) describes how to identify file types, launch applications, and other useful desktop functions. A useful spec I've found recently is for launching desktop applications when you log into your machine. The [freedesktop specification](https://specifications.freedesktop.org/autostart-spec/0.5/ar01s02.html) describes how to identify file types, launch applications, and other useful desktop functions. A useful spec I've found recently is for launching desktop applications when you log into your machine.

View file

@ -3,6 +3,7 @@ title: "Bandwidth Limiting Applications"
date: 2020-10-22T21:51:27-04:00 date: 2020-10-22T21:51:27-04:00
draft: false draft: false
tags: ["Linux", "Networking"] tags: ["Linux", "Networking"]
medium_enabled: true
--- ---
Whether it's web scraping or testing low latency connections, we want to be able to bandwidth limit certain applications. I've written about [rate limiting network interfaces](/blog/limitbandwidth/) before. This post focuses on the application level instead. Whether it's web scraping or testing low latency connections, we want to be able to bandwidth limit certain applications. I've written about [rate limiting network interfaces](/blog/limitbandwidth/) before. This post focuses on the application level instead.

View file

@ -3,6 +3,7 @@ title: "Bash Flags"
date: 2019-08-06T16:55:47-04:00 date: 2019-08-06T16:55:47-04:00
draft: false draft: false
tags: [ "Bash" ] tags: [ "Bash" ]
medium_enabled: true
--- ---
I was creating a bash script and was looking around for a solution for parsing command line arguments. [This StackOverflow post](https://stackoverflow.com/questions/192249/how-do-i-parse-command-line-arguments-in-bash) has a variety of different solutions available. I want to describe my favorite of these posts. I was creating a bash script and was looking around for a solution for parsing command line arguments. [This StackOverflow post](https://stackoverflow.com/questions/192249/how-do-i-parse-command-line-arguments-in-bash) has a variety of different solutions available. I want to describe my favorite of these posts.

View file

@ -3,6 +3,7 @@ title: "Partial Argument Parse and Passing in Bash"
date: 2020-09-07T21:33:26-04:00 date: 2020-09-07T21:33:26-04:00
draft: false draft: false
tags: ["Bash"] tags: ["Bash"]
medium_enabled: true
--- ---
Let's say we want to augment an existing terminal command (like for example `wget`). We then want to be able to add or edit command line options. The rest of this post provides an example that hopefully you can use in your bash script. Let's say we want to augment an existing terminal command (like for example `wget`). We then want to be able to add or edit command line options. The rest of this post provides an example that hopefully you can use in your bash script.

View file

@ -3,6 +3,7 @@ title: "Handling Background Processes in Bash"
date: 2019-06-17T19:50:30-04:00 date: 2019-06-17T19:50:30-04:00
draft: false draft: false
tags: [ "Bash" ] tags: [ "Bash" ]
medium_enabled: true
--- ---
For multi-process applications, I want to be able to start it up using the `bash` command processor and be able to stop all the processes just by hitting `CTRL-C`. For multi-process applications, I want to be able to start it up using the `bash` command processor and be able to stop all the processes just by hitting `CTRL-C`.

View file

@ -3,6 +3,7 @@ title: "TCP/UDP with Bash"
date: 2020-05-25T23:10:15-04:00 date: 2020-05-25T23:10:15-04:00
draft: false draft: false
tags: ["Bash", "Networking"] tags: ["Bash", "Networking"]
medium_enabled: true
--- ---
The bash shell contains pseudo-devices to send packets with TCP/UDP. The pseudo files are formatted like the following: The bash shell contains pseudo-devices to send packets with TCP/UDP. The pseudo files are formatted like the following:

View file

@ -3,6 +3,7 @@ title: "Quick Bash: Validate IP Address"
date: 2020-12-19T20:15:24-05:00 date: 2020-12-19T20:15:24-05:00
draft: false draft: false
tags: ["Bash", "Networking"] tags: ["Bash", "Networking"]
medium_enabled: true
--- ---
`ipcalc` is a terminal tool that lets you validate an IP address. This proves useful to me as I have scripts that automate certain remote tasks given an IP address. Instead of trusting that an argument passed is a valid IP, why not check it? `ipcalc` is a terminal tool that lets you validate an IP address. This proves useful to me as I have scripts that automate certain remote tasks given an IP address. Instead of trusting that an argument passed is a valid IP, why not check it?

View file

@ -3,6 +3,7 @@ title: "Bat: The user friendly cat"
date: 2020-02-01T06:26:18-05:00 date: 2020-02-01T06:26:18-05:00
draft: false draft: false
tags: [ "Linux" ] tags: [ "Linux" ]
medium_enabled: true
--- ---
`bat` is a more human pleasing replacement of `cat` with the following features: `bat` is a more human pleasing replacement of `cat` with the following features:

View file

@ -3,6 +3,7 @@ title: "Birthday Music"
date: 2020-03-29T13:23:01-04:00 date: 2020-03-29T13:23:01-04:00
draft: false draft: false
tags: ["Music"] tags: ["Music"]
medium_enabled: true
--- ---
I was scrolling around in the [Free Music Archive](https://freemusicarchive.org/) and I stumbled upon the entries of their [The New Birthday Song Contest](https://www.freemusicarchive.org/music/Happy_Birthday_Song_Contest/The_New_Birthday_Song_Contest) back in 2012. One of my favorites is an entry by [Kevin Lax](http://www.kevinlax.com/) titled [Happy Birthday](https://files.freemusicarchive.org/storage-freemusicarchive-org/music/WFMU/Kevin_Lax/The_New_Birthday_Song_Contest/Kevin_Lax_-_Happy_Birthday.mp3) licensed under [Creative Commons Attributioni v3](https://creativecommons.org/licenses/by/3.0/). I was scrolling around in the [Free Music Archive](https://freemusicarchive.org/) and I stumbled upon the entries of their [The New Birthday Song Contest](https://www.freemusicarchive.org/music/Happy_Birthday_Song_Contest/The_New_Birthday_Song_Contest) back in 2012. One of my favorites is an entry by [Kevin Lax](http://www.kevinlax.com/) titled [Happy Birthday](https://files.freemusicarchive.org/storage-freemusicarchive-org/music/WFMU/Kevin_Lax/The_New_Birthday_Song_Contest/Kevin_Lax_-_Happy_Birthday.mp3) licensed under [Creative Commons Attributioni v3](https://creativecommons.org/licenses/by/3.0/).

View file

@ -1,9 +1,11 @@
--- ---
title: "Blogroll From Subscriptions" date: 2022-12-18 13:05:49-05:00
date: 2022-12-18T13:05:49-05:00
draft: false draft: false
tags: []
math: false math: false
medium_enabled: true
medium_post_id: 913b5fa85507
tags: []
title: Blogroll From Subscriptions
--- ---
While I was browsing around personal websites, I found a fun little piece of code from Jake Bauer's [links page](https://www.paritybit.ca/links). While I was browsing around personal websites, I found a fun little piece of code from Jake Bauer's [links page](https://www.paritybit.ca/links).
@ -55,4 +57,3 @@ REPLACE_EXPR="s/$XML_EXPR/$HTML_EXPR/g"
grep "xmlUrl" "$1" | sed "$REPLACE_EXPR" grep "xmlUrl" "$1" | sed "$REPLACE_EXPR"
``` ```

View file

@ -3,6 +3,7 @@ title: "Blog Workflow"
date: 2019-10-28T00:16:44-04:00 date: 2019-10-28T00:16:44-04:00
draft: false draft: false
tags: ["Hugo"] tags: ["Hugo"]
medium_enabled: true
--- ---
You may be curious on how I create content for this blog. There's pros and cons to my approach. One pro is that it's relatively easy for me to crank something out and upload it to my site. The downside is that it's not as easily customizable. You may be curious on how I create content for this blog. There's pros and cons to my approach. One pro is that it's relatively easy for me to crank something out and upload it to my site. The downside is that it's not as easily customizable.

View file

@ -3,6 +3,7 @@ title: "Borg Backup"
date: 2019-05-21T22:35:31-04:00 date: 2019-05-21T22:35:31-04:00
draft: false draft: false
tags: ["Backup"] tags: ["Backup"]
medium_enabled: true
--- ---
I started using [Borg Backup](https://www.borgbackup.org/) in order to efficiently and securely do my backups. I did some research before choosing this solution as I required three things: I started using [Borg Backup](https://www.borgbackup.org/) in order to efficiently and securely do my backups. I did some research before choosing this solution as I required three things:

View file

@ -1,9 +1,11 @@
--- ---
title: "Capturing Quoted Strings in Sed" date: 2022-12-18 12:55:32-05:00
date: 2022-12-18T12:55:32-05:00
draft: false draft: false
tags: []
math: false math: false
medium_enabled: true
medium_post_id: 9801b2556737
tags: []
title: Capturing Quoted Strings in Sed
--- ---
*Disclaimer: This posts assumes some knowledge about regular expressions.* *Disclaimer: This posts assumes some knowledge about regular expressions.*
@ -62,4 +64,3 @@ INPUT="\<a href=\"https://brandonrozek.com\" rel=\"me\"\>\</a\>"
echo "$INPUT" | sed "$REPLACE_EXPR" echo "$INPUT" | sed "$REPLACE_EXPR"
``` ```

View file

@ -3,6 +3,7 @@ title: "Checkinstall"
date: 2020-04-26T12:11:30-04:00 date: 2020-04-26T12:11:30-04:00
draft: false draft: false
tags: ["Packaging", "Linux"] tags: ["Packaging", "Linux"]
medium_enabled: true
--- ---
To create a quick and dirty Debian or RPM package, check out `checkinstall`! Be forewarned though that this isn't the recommended way of creating packages. This post on [AskUbuntu](https://askubuntu.com/questions/1138384/why-is-checkinstall-no-longer-being-maintained) gives good reasons for why. Though if it is between running a `make install` or running this utility, I would consider running `checkinstall` instead. To create a quick and dirty Debian or RPM package, check out `checkinstall`! Be forewarned though that this isn't the recommended way of creating packages. This post on [AskUbuntu](https://askubuntu.com/questions/1138384/why-is-checkinstall-no-longer-being-maintained) gives good reasons for why. Though if it is between running a `make install` or running this utility, I would consider running `checkinstall` instead.

View file

@ -3,6 +3,7 @@ title: "Chirp"
date: 2019-09-27T22:46:52-04:00 date: 2019-09-27T22:46:52-04:00
draft: false draft: false
tags: [ "Linux", "Amateur Radio" ] tags: [ "Linux", "Amateur Radio" ]
medium_enabled: true
--- ---
In the land of Ham Radio, you can program your radio with a very popular open source software called `chirp`. For Ubuntu users to install it, it is recommended you use the PPA to keep up to date with radio software... In the land of Ham Radio, you can program your radio with a very popular open source software called `chirp`. For Ubuntu users to install it, it is recommended you use the PPA to keep up to date with radio software...

View file

@ -3,6 +3,7 @@ title: "Chroot and Virtual Filesystems"
date: 2020-11-29T10:52:07-05:00 date: 2020-11-29T10:52:07-05:00
draft: false draft: false
tags: ["Linux"] tags: ["Linux"]
medium_enabled: true
--- ---
When running applications under a [`chroot`](https://en.wikipedia.org/wiki/Chroot) environment, it can be annoying when certain [virtual filesystems](https://opensource.com/article/19/3/virtual-filesystems-linux) are unavailable. Here are the commands to mount the most common ones: When running applications under a [`chroot`](https://en.wikipedia.org/wiki/Chroot) environment, it can be annoying when certain [virtual filesystems](https://opensource.com/article/19/3/virtual-filesystems-linux) are unavailable. Here are the commands to mount the most common ones:

View file

@ -3,6 +3,7 @@ title: "Clearing Systemd Logs"
date: 2021-02-21T16:08:51-05:00 date: 2021-02-21T16:08:51-05:00
draft: false draft: false
tags: ["Linux"] tags: ["Linux"]
medium_enabled: true
--- ---
Short post today. I wanted to clear out some disk space usage on one of my servers and noticed that the systemd logs were taking up a decent bit. Here are two options to clear out old logs. Short post today. I wanted to clear out some disk space usage on one of my servers and noticed that the systemd logs were taking up a decent bit. Here are two options to clear out old logs.

View file

@ -3,6 +3,7 @@ title: "cloc"
date: 2020-01-25T10:24:16-05:00 date: 2020-01-25T10:24:16-05:00
draft: false draft: false
images: [] images: []
medium_enabled: true
--- ---
**C**ount **L**ines **o**f **C**ode is an application included in the standard Ubuntu repositories that counts the lines of code separated by programming language. **C**ount **L**ines **o**f **C**ode is an application included in the standard Ubuntu repositories that counts the lines of code separated by programming language.

View file

@ -4,6 +4,7 @@ date: 2022-01-26T23:11:37-05:00
draft: false draft: false
tags: ["LaTex"] tags: ["LaTex"]
math: false math: false
medium_enabled: true
--- ---
I commonly use the [`listings` package](/blog/latexcode/) to showcase code in my LaTex documents. I tried doing the same in my Beamer slidedecks and I ran into an issue where the LaTex source code failed to compile. After digging around, I figured out its because every slide or frame that includes code (or any verbatim environment) needs to be marked as `fragile`. A minimal example is presented below: I commonly use the [`listings` package](/blog/latexcode/) to showcase code in my LaTex documents. I tried doing the same in my Beamer slidedecks and I ran into an issue where the LaTex source code failed to compile. After digging around, I figured out its because every slide or frame that includes code (or any verbatim environment) needs to be marked as `fragile`. A minimal example is presented below:

View file

@ -4,6 +4,7 @@ date: 2022-01-27T09:15:10-05:00
draft: false draft: false
tags: ["LaTex"] tags: ["LaTex"]
math: false math: false
medium_enabled: true
--- ---
Working on a tool paper, I had the desire to share code alongside its output. With a combination of the `listings`, `caption`, and `color` packages, we can get a result that's nice looking. Working on a tool paper, I had the desire to share code alongside its output. With a combination of the `listings`, `caption`, and `color` packages, we can get a result that's nice looking.

View file

@ -2,6 +2,7 @@
title: "Collaborating on Beamer Pandoc Slides" title: "Collaborating on Beamer Pandoc Slides"
date: 2019-11-22T14:49:19-05:00 date: 2019-11-22T14:49:19-05:00
draft: false draft: false
medium_enabled: true
--- ---
Recently I've been making slides using Pandoc with Beamer. However, I came across the issue where I needed to collaborate with someone using already existing slides written in Markdown. Recently I've been making slides using Pandoc with Beamer. However, I came across the issue where I needed to collaborate with someone using already existing slides written in Markdown.

View file

@ -3,6 +3,7 @@ title: "Color Manipulation with Sass"
date: 2019-05-21T23:10:06-04:00 date: 2019-05-21T23:10:06-04:00
draft: false draft: false
tags: ["Web", "CSS"] tags: ["Web", "CSS"]
medium_enabled: true
--- ---
There are many times that I need to slightly mess with a color. The easiest way I found to do it is to use one of the many color functions in the program `Sass`. [Sass](https://sass-lang.com/) is a CSS preprocessor, meaning that it has it's own syntax and it compiles down to CSS. I remember using this before CSS variables became a thing and that was one of the main driving points of Sass. There are many times that I need to slightly mess with a color. The easiest way I found to do it is to use one of the many color functions in the program `Sass`. [Sass](https://sass-lang.com/) is a CSS preprocessor, meaning that it has it's own syntax and it compiles down to CSS. I remember using this before CSS variables became a thing and that was one of the main driving points of Sass.

View file

@ -4,6 +4,7 @@ date: 2022-05-15T22:49:34-04:00
draft: false draft: false
tags: ["Math"] tags: ["Math"]
math: true math: true
medium_enabled: true
--- ---
One of the most common mistakes I see in induction proofs is assuming the recursive case and working backwards towards the induction hypothesis. This may be fine for formulas that are symmetric like those involving equality, but this way of proving induction fails if not. This post will show such example. One of the most common mistakes I see in induction proofs is assuming the recursive case and working backwards towards the induction hypothesis. This may be fine for formulas that are symmetric like those involving equality, but this way of proving induction fails if not. This post will show such example.

View file

@ -4,6 +4,7 @@ date: 2021-06-18T01:09:45-04:00
draft: false draft: false
tags: [] tags: []
math: true math: true
medium_enabled: true
--- ---
This post is heavily derived from the Wikipedia post on [Digital Comparators](https://en.wikipedia.org/wiki/Digital_comparator) and therefore can be distributed under the Creative Commons Attribution-ShareAlike 3.0 license. This post is heavily derived from the Wikipedia post on [Digital Comparators](https://en.wikipedia.org/wiki/Digital_comparator) and therefore can be distributed under the Creative Commons Attribution-ShareAlike 3.0 license.

View file

@ -3,6 +3,7 @@ title: "Ensuring Docker Compose Startup with Systemd"
date: 2019-12-16T20:57:36-05:00 date: 2019-12-16T20:57:36-05:00
draft: false draft: false
tags: [ "Linux", "Containers" ] tags: [ "Linux", "Containers" ]
medium_enabled: true
--- ---
I've been having trouble getting some docker containers such as `nginx` to start automatically on bootup, even with the `restart: always` flag. I've been having trouble getting some docker containers such as `nginx` to start automatically on bootup, even with the `restart: always` flag.

View file

@ -1,9 +1,11 @@
--- ---
title: "Concatenating PDF files in Linux" date: 2022-12-18 18:38:44-05:00
date: 2022-12-18T18:38:44-05:00
draft: false draft: false
tags: []
math: false math: false
medium_enabled: true
medium_post_id: 21f4d18fcb56
tags: []
title: Concatenating PDF files in Linux
--- ---
Every so often I need to combine several images into a single PDF. First, to convert an image to a PDF we can use `imagemagick`. Every so often I need to combine several images into a single PDF. First, to convert an image to a PDF we can use `imagemagick`.

View file

@ -4,6 +4,7 @@ date: 2022-06-19T18:49:47-04:00
draft: false draft: false
tags: ["Bash"] tags: ["Bash"]
math: false math: false
medium_enabled: true
--- ---
Many programming languages include an quick way to perform a Many programming languages include an quick way to perform a

View file

@ -4,6 +4,7 @@ date: 2021-08-27T22:00:00-04:00
draft: false draft: false
tags: [] tags: []
math: false math: false
medium_enabled: true
--- ---
I've recently come across the DJVU file format before and needed to convert it to a PDF. The most reliable way I've found to do it is via the following command. I've recently come across the DJVU file format before and needed to convert it to a PDF. The most reliable way I've found to do it is via the following command.

View file

@ -3,6 +3,7 @@ title: "Quick Python: Copy Decorator"
date: 2020-04-08T18:49:54-04:00 date: 2020-04-08T18:49:54-04:00
draft: false draft: false
tags: ["Python"] tags: ["Python"]
medium_enabled: true
--- ---
If you want to guarantee that your function doesn't modify any of the references and don't mind paying a price in memory consumption, here is a decorator you can easily add to your functions. If you want to guarantee that your function doesn't modify any of the references and don't mind paying a price in memory consumption, here is a decorator you can easily add to your functions.

View file

@ -3,6 +3,7 @@ title: "Copy to RAM Please"
date: 2019-08-02T22:37:12-04:00 date: 2019-08-02T22:37:12-04:00
draft: false draft: false
tags: [ "Linux" ] tags: [ "Linux" ]
medium_enabled: true
--- ---
I bought a 1U server recently, and I forgot to purchase a SSD to actually hold data. Since I couldn't hold my excitement to play with the server, I decided to load an operating system entirely into RAM and never turn it off for the meantime. I bought a 1U server recently, and I forgot to purchase a SSD to actually hold data. Since I couldn't hold my excitement to play with the server, I decided to load an operating system entirely into RAM and never turn it off for the meantime.

View file

@ -4,6 +4,7 @@ date: 2022-11-12T10:45:04-05:00
draft: false draft: false
tags: ["Scala", "Functional Programming"] tags: ["Scala", "Functional Programming"]
math: true math: true
medium_enabled: true
--- ---
Recursion takes a large problem and breaks it down until it reaches some base cases. One popular example, is the factorial function. Recursion takes a large problem and breaks it down until it reaches some base cases. One popular example, is the factorial function.

View file

@ -3,6 +3,7 @@ title: "coredns"
date: 2019-12-13T02:00:29-05:00 date: 2019-12-13T02:00:29-05:00
draft: false draft: false
tags: [ "Linux", "Networking", "Containers" ] tags: [ "Linux", "Networking", "Containers" ]
medium_enabled: true
--- ---
Domain names are the easiest way for a reverse proxy to split up services in a homelab. Since I'm going full docker-compose in my homelab, I decided to use `coredns`. Domain names are the easiest way for a reverse proxy to split up services in a homelab. Since I'm going full docker-compose in my homelab, I decided to use `coredns`.

View file

@ -3,6 +3,7 @@ title: "C++ Overloads"
date: 2020-03-07T13:52:05-05:00 date: 2020-03-07T13:52:05-05:00
draft: false draft: false
tags: [ "C++" ] tags: [ "C++" ]
medium_enabled: true
--- ---
One thing I like about a lot of common languages like C++ and Python is that you can overload operators. This makes it easy to create libraries for other developers that are easy to use. We are going to explain common operators you may want to overload in C++. One thing I like about a lot of common languages like C++ and Python is that you can overload operators. This makes it easy to create libraries for other developers that are easy to use. We are going to explain common operators you may want to overload in C++.

View file

@ -3,6 +3,7 @@ title: "Creating QR Codes from the Terminal"
date: 2020-09-26T22:13:25-04:00 date: 2020-09-26T22:13:25-04:00
draft: false draft: false
tags: [] tags: []
medium_enabled: true
--- ---
With the tool `qrencode`, it is surprisingly simple to create a QR code. With the tool `qrencode`, it is surprisingly simple to create a QR code.

View file

@ -4,6 +4,7 @@ date: 2020-01-13T21:35:09-05:00
draft: false draft: false
math: true math: true
tags: ["Security"] tags: ["Security"]
medium_enabled: true
--- ---
When analyzing cryptographic algorithms, we characterize the strength of the crypto-system by analyzing what happens in various crypto games. Below are a couple examples of crypto games used in literature. When analyzing cryptographic algorithms, we characterize the strength of the crypto-system by analyzing what happens in various crypto games. Below are a couple examples of crypto games used in literature.

View file

@ -3,6 +3,7 @@ title: "Capture The Flag"
date: 2019-05-22T21:25:22-04:00 date: 2019-05-22T21:25:22-04:00
draft: false draft: false
tags: ["Security"] tags: ["Security"]
medium_enabled: true
--- ---
There is an event in Computer Security called "Capture The Flag". The purpose is to test the skills of security engineers and students through a variety of tasks in order to get a pass phrase which is called a flag. I noticed that Dr. Andrew Marshall wanted to set up this event at the University of Mary Washington for a while, so I and a few others decided to help make this a reality for him. There is an event in Computer Security called "Capture The Flag". The purpose is to test the skills of security engineers and students through a variety of tasks in order to get a pass phrase which is called a flag. I noticed that Dr. Andrew Marshall wanted to set up this event at the University of Mary Washington for a while, so I and a few others decided to help make this a reality for him.

View file

@ -5,6 +5,7 @@ draft: false
aliases: aliases:
- /blog/adding-fonts - /blog/adding-fonts
tags: ['Ubuntu', 'Linux'] tags: ['Ubuntu', 'Linux']
medium_enabled: true
--- ---
**Warning: This blog post partially applies to Ubuntu-based operating systems** **Warning: This blog post partially applies to Ubuntu-based operating systems**

View file

@ -3,6 +3,7 @@ title: "Custom Executables"
date: 2020-02-03T20:10:34-05:00 date: 2020-02-03T20:10:34-05:00
draft: false draft: false
tags: [ "Linux" ] tags: [ "Linux" ]
medium_enabled: true
--- ---
As time goes on more and more scripts start to accumulate in my scripts folder. It turns out though, that there is a standard way of having local user scripts that get automatically added to your path. I started noticing this in Ubuntu when more and more projects started utilizing the `~/.local/bin` directory. As time goes on more and more scripts start to accumulate in my scripts folder. It turns out though, that there is a standard way of having local user scripts that get automatically added to your path. I started noticing this in Ubuntu when more and more projects started utilizing the `~/.local/bin` directory.

View file

@ -3,6 +3,7 @@ title: "Custom Device Paths with UDEV rules"
date: 2020-11-10T20:58:37-05:00 date: 2020-11-10T20:58:37-05:00
draft: false draft: false
tags: ["Linux"] tags: ["Linux"]
medium_enabled: true
--- ---
I wanted to create a rule so that when I plug in my rtlsdr, a symlink to the device will appear in `/dev/rtlsdr`. I wanted to create a rule so that when I plug in my rtlsdr, a symlink to the device will appear in `/dev/rtlsdr`.

View file

@ -4,6 +4,7 @@ date: 2022-02-04T19:43:12-05:00
draft: false draft: false
tags: ["Formal Methods"] tags: ["Formal Methods"]
math: false math: false
medium_enabled: true
--- ---
*Warning: `extractcounterexample` is a new flag in Dafny and the command to extract it will likely change* *Warning: `extractcounterexample` is a new flag in Dafny and the command to extract it will likely change*

View file

@ -4,6 +4,7 @@ date: 2022-02-05T00:22:58-05:00
draft: false draft: false
tags: ["Formal Methods"] tags: ["Formal Methods"]
math: true math: true
medium_enabled: true
--- ---
Dafny treats loops like a black box. It could be annoying the first time you experience this and have no clue why the code is not verifying properly. There are two properties that Dafny needs you to prove: partial correctness and termination. Together these form *total correctness*. Dafny treats loops like a black box. It could be annoying the first time you experience this and have no clue why the code is not verifying properly. There are two properties that Dafny needs you to prove: partial correctness and termination. Together these form *total correctness*.

View file

@ -3,6 +3,7 @@ title: "Dbcli"
date: 2020-02-29T18:45:51-05:00 date: 2020-02-29T18:45:51-05:00
draft: false draft: false
tags: ["Python", "DB"] tags: ["Python", "DB"]
medium_enabled: true
--- ---
The [DBLCI](https://www.dbcli.com/) project creates command line database clients with auto-completion and syntax highlighting. These clients are often nicer to work with than the one a database comes with. In this post we're going to demo the [LiteCLI](https://litecli.com/) client. The [DBLCI](https://www.dbcli.com/) project creates command line database clients with auto-completion and syntax highlighting. These clients are often nicer to work with than the one a database comes with. In this post we're going to demo the [LiteCLI](https://litecli.com/) client.

View file

@ -3,6 +3,7 @@ title: "Burning ISOs with dd/pv"
date: 2020-01-20T10:23:20-05:00 date: 2020-01-20T10:23:20-05:00
draft: false draft: false
tags: [ "Linux" ] tags: [ "Linux" ]
medium_enabled: true
--- ---
While there are nice graphical tools like [Etcher](https://www.balena.io/etcher/), what is almost always a constant is the tool `dd`. Therefore, for future reference I'll just paste the `dd` command I use to make ISO images. While there are nice graphical tools like [Etcher](https://www.balena.io/etcher/), what is almost always a constant is the tool `dd`. Therefore, for future reference I'll just paste the `dd` command I use to make ISO images.

View file

@ -1,9 +1,11 @@
--- ---
title: "The Promise of Decentralized Currency and the Issues with Custodians" date: 2022-12-04 19:54:58-05:00
date: 2022-12-04T19:54:58-05:00
draft: false draft: false
tags: []
math: false math: false
medium_enabled: true
medium_post_id: 88190b25cbc4
tags: []
title: The Promise of Decentralized Currency and the Issues with Custodians
--- ---
*Disclaimer: I'm not an active participant in the Bitcoin community and the comments of this post are from an outside perspective.* *Disclaimer: I'm not an active participant in the Bitcoin community and the comments of this post are from an outside perspective.*

View file

@ -1,9 +1,12 @@
--- ---
title: "Decentralized Identities with PGP Annotations and Keyoxide" date: 2023-01-04 09:00:14-05:00
date: 2023-01-04T09:00:14-05:00
draft: false draft: false
tags: ["GPG/PGP"]
math: false math: false
medium_enabled: true
medium_post_id: 5703b335e3a8
tags:
- GPG/PGP
title: Decentralized Identities with PGP Annotations and Keyoxide
--- ---
Under asymmetric encryption, for you to send me a message that only I can read you would need to encrypt the message with my public key. I then would have a corresponding private key that can decrypt the message. Public keys are then usually stored onto keyservers for others to query. When querying for a key, how do you know that the public key actually belongs to me? It turns out, you can't since anyone can upload a key pretending to be me. Under asymmetric encryption, for you to send me a message that only I can read you would need to encrypt the message with my public key. I then would have a corresponding private key that can decrypt the message. Public keys are then usually stored onto keyservers for others to query. When querying for a key, how do you know that the public key actually belongs to me? It turns out, you can't since anyone can upload a key pretending to be me.

View file

@ -1,9 +1,12 @@
--- ---
title: "Decentralized PGP Keys with WKD" date: 2023-01-04 09:06:38-05:00
date: 2023-01-04T09:06:38-05:00
draft: false draft: false
tags: ["GPG/PGP"]
math: false math: false
medium_enabled: true
medium_post_id: 7b6197f860fc
tags:
- GPG/PGP
title: Decentralized PGP Keys with WKD
--- ---
After creating a PGP key, it is common to distribute it to various keyservers. However, anyone can upload to these keyservers impersonating someone else. One solution is to use a decentralized identities approach, however, if your email is on your own domain that you tell every soul about, why not have your own website host the key? This is where the Web Key Directory (WKD) protocol comes in. After creating a PGP key, it is common to distribute it to various keyservers. However, anyone can upload to these keyservers impersonating someone else. One solution is to use a decentralized identities approach, however, if your email is on your own domain that you tell every soul about, why not have your own website host the key? This is where the Web Key Directory (WKD) protocol comes in.

View file

@ -4,6 +4,7 @@ date: 2022-11-11T14:45:17-05:00
draft: false draft: false
tags: ["Scala", "Functional Programming"] tags: ["Scala", "Functional Programming"]
math: false math: false
medium_enabled: true
--- ---
In functional programming, we often look at a list in terms of its head (first-element) and tail (rest-of-list). This allows us to define operations on a list recursively. For example, how do we sum a list of integers such as `[1, 2, 3, 4]`? In functional programming, we often look at a list in terms of its head (first-element) and tail (rest-of-list). This allows us to define operations on a list recursively. For example, how do we sum a list of integers such as `[1, 2, 3, 4]`?

View file

@ -1,9 +1,12 @@
--- ---
title: "Deploying my Hugo Website through GitHub Actions" date: 2022-12-04 22:02:08-05:00
date: 2022-12-04T22:02:08-05:00
draft: false draft: false
tags: ["Hugo"]
math: false math: false
medium_enabled: true
medium_post_id: b08e82293bd2
tags:
- Hugo
title: Deploying my Hugo Website through GitHub Actions
--- ---
For the longest time I've held out on deploying my website through GitHub actions. My rationale at the time was: For the longest time I've held out on deploying my website through GitHub actions. My rationale at the time was:
@ -186,4 +189,3 @@ jobs:
- name: Deploy - name: Deploy
run: ./deploy.sh run: ./deploy.sh
``` ```

View file

@ -3,6 +3,7 @@ title: "Detect Python Version"
date: 2021-03-15T18:09:38-04:00 date: 2021-03-15T18:09:38-04:00
draft: false draft: false
tags: ["Python"] tags: ["Python"]
medium_enabled: true
--- ---
I was working on a distribution recently where `python` was mapped to `python2`. It mixed me up for a bit since I was writing a script for `python3` but it ran partially under `python2`. To lower confusion in the future, I think it's a great idea to check the python version and exit if it isn't the version you expect. I was working on a distribution recently where `python` was mapped to `python2`. It mixed me up for a bit since I was writing a script for `python3` but it ran partially under `python2`. To lower confusion in the future, I think it's a great idea to check the python version and exit if it isn't the version you expect.

View file

@ -3,6 +3,7 @@ title: "Diceware"
date: 2020-05-01T00:22:31-04:00 date: 2020-05-01T00:22:31-04:00
draft: false draft: false
tags: ["Security"] tags: ["Security"]
medium_enabled: true
--- ---
Diceware is a passphrase generator proposed by [Arnold G. Reinhold](http://diceware.com/). Passphrases contain multiple words which are chosen according to a sequence of dice rolls. Let's look at a simplified example where we have binary dice (0 or 1) and we have a wordlist of two dice rolls. Diceware is a passphrase generator proposed by [Arnold G. Reinhold](http://diceware.com/). Passphrases contain multiple words which are chosen according to a sequence of dice rolls. Let's look at a simplified example where we have binary dice (0 or 1) and we have a wordlist of two dice rolls.

View file

@ -4,6 +4,7 @@ date: 2022-11-09T17:45:26-05:00
draft: false draft: false
tags: ["Scala", "Functional Programming"] tags: ["Scala", "Functional Programming"]
math: true math: true
medium_enabled: true
--- ---
Fold is a functional programming pattern that operates over some sequence with a binary operation and a starting value. There are two variants: Fold is a functional programming pattern that operates over some sequence with a binary operation and a starting value. There are two variants:

View file

@ -5,6 +5,7 @@ draft: false
aliases: aliases:
- /blog/digialmodes - /blog/digialmodes
tags: [ "Amateur Radio" ] tags: [ "Amateur Radio" ]
medium_enabled: true
--- ---
This blog post is going to describe what steps I took to be able to decode signals using digital modes. Hardware wise, you will either need a RTL-SDR receiver or a transceiver radio with a cable plugging into the computer's soundcard. This blog post is going to describe what steps I took to be able to decode signals using digital modes. Hardware wise, you will either need a RTL-SDR receiver or a transceiver radio with a cable plugging into the computer's soundcard.

View file

@ -4,6 +4,7 @@ date: 2020-03-28T22:08:19-04:00
draft: false draft: false
tags: ["Python", "Statistics"] tags: ["Python", "Statistics"]
math: true math: true
medium_enabled: true
--- ---
I've been following along with [Bayesian Methods for Hackers](https://github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/tree/master/) and I wanted to try using PyMC3 with my own small dataset. I've been following along with [Bayesian Methods for Hackers](https://github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/tree/master/) and I wanted to try using PyMC3 with my own small dataset.

View file

@ -3,6 +3,7 @@ title: "Discovering Ham Radio"
date: 2019-07-01T22:06:23-04:00 date: 2019-07-01T22:06:23-04:00
draft: false draft: false
tags: [ "Amateur Radio" ] tags: [ "Amateur Radio" ]
medium_enabled: true
--- ---
I feel like Ham Radio has been hiding in the background as I move through life. I knew someone that kept a Ham radio in his car, Noah talks about it frequently on his [podcast](http://www.asknoahshow.com/), and it seemed like the next step after [playing with](https://github.com/brandon-rozek/radiotuner) [software defined radio](https://www.amazon.com/RTL-SDR-Blog-RTL2832U-Software-Telescopic/dp/B011HVUEME/ref=sr_1_3). I feel like Ham Radio has been hiding in the background as I move through life. I knew someone that kept a Ham radio in his car, Noah talks about it frequently on his [podcast](http://www.asknoahshow.com/), and it seemed like the next step after [playing with](https://github.com/brandon-rozek/radiotuner) [software defined radio](https://www.amazon.com/RTL-SDR-Blog-RTL2832U-Software-Telescopic/dp/B011HVUEME/ref=sr_1_3).

View file

@ -4,6 +4,7 @@ date: 2022-05-20T16:57:11-04:00
draft: false draft: false
tags: ["Hugo"] tags: ["Hugo"]
math: false math: false
medium_enabled: true
--- ---
Mastodon for me is a nice friendly place and I enjoy participating in that community. With that, I want to be able to share the great toots out there in my own website as well as keep an archive of all the toots I made. This post will go over the code I wrote in Hugo to display a single toot into a blog post. Mastodon for me is a nice friendly place and I enjoy participating in that community. With that, I want to be able to share the great toots out there in my own website as well as keep an archive of all the toots I made. This post will go over the code I wrote in Hugo to display a single toot into a blog post.

View file

@ -4,6 +4,7 @@ date: 2022-05-23T16:35:01-04:00
draft: false draft: false
tags: ["Hugo", "GPS"] tags: ["Hugo", "GPS"]
math: false math: false
medium_enabled: true
--- ---
As the weather gets warmer, I am starting to go on more hikes. Several people on their websites share a Strava embed which highlights a path taken during their workout. I believe as a community this has great potential for sharing our favorite hiking paths. I don't, however, want to rely on Strava to host my GPS data. Instead, we will showcase how to accomplish the same effect but with open technologies. As the weather gets warmer, I am starting to go on more hikes. Several people on their websites share a Strava embed which highlights a path taken during their workout. I believe as a community this has great potential for sharing our favorite hiking paths. I don't, however, want to rely on Strava to host my GPS data. Instead, we will showcase how to accomplish the same effect but with open technologies.

View file

@ -4,6 +4,7 @@ date: 2021-08-27T21:50:02-04:00
draft: false draft: false
tags: [] tags: []
math: false math: false
medium_enabled: true
--- ---
Some languages like C, C++, and Java have a concept of a Do-While loop which normally look like the following: Some languages like C, C++, and Java have a concept of a Do-While loop which normally look like the following:

View file

@ -3,6 +3,7 @@ title: "Digital Ocean API"
date: 2020-05-06T22:45:30-04:00 date: 2020-05-06T22:45:30-04:00
draft: false draft: false
tags: ["Deployment"] tags: ["Deployment"]
medium_enabled: true
--- ---
This post is meant for the times that you want to quickly query the Digital Ocean API v2, but do not want to download their great client [`doctl`](https://github.com/digitalocean/doctl). The prerequisite for this post is that you have a [personal access token](https://www.digitalocean.com/docs/apis-clis/api/create-personal-access-token/) configured inside the `$DO_TOKEN` environmental variable. This post is meant for the times that you want to quickly query the Digital Ocean API v2, but do not want to download their great client [`doctl`](https://github.com/digitalocean/doctl). The prerequisite for this post is that you have a [personal access token](https://www.digitalocean.com/docs/apis-clis/api/create-personal-access-token/) configured inside the `$DO_TOKEN` environmental variable.

View file

@ -3,6 +3,7 @@ title: "Advanced Docker Image Construction with Bash"
date: 2019-12-26T21:01:37-05:00 date: 2019-12-26T21:01:37-05:00
draft: false draft: false
tags: [ "Linux", "Containers" ] tags: [ "Linux", "Containers" ]
medium_enabled: true
--- ---
On current versions of Docker, you can't mount volumes during image construction. This poses an issue for me as I don't want to replicate gigabytes of data already existing on my disk when it won't appear on the final build. Therefore, instead of building an image with a traditional Dockerfile, we're going to use a bash script on a running base image container and export the filesystem to create the image from. On current versions of Docker, you can't mount volumes during image construction. This poses an issue for me as I don't want to replicate gigabytes of data already existing on my disk when it won't appear on the final build. Therefore, instead of building an image with a traditional Dockerfile, we're going to use a bash script on a running base image container and export the filesystem to create the image from.

View file

@ -4,6 +4,7 @@ date: 2022-02-04T23:59:13-05:00
draft: false draft: false
tags: ["Containers"] tags: ["Containers"]
math: false math: false
medium_enabled: true
--- ---
I try to keep secrets such as passwords and keys out in their own separate files so that I can `.gitignore` them and commit the rest of my configuration. With `docker-compose` we can do that with the `env_file` field. Here is an example with a postgres configuration: I try to keep secrets such as passwords and keys out in their own separate files so that I can `.gitignore` them and commit the rest of my configuration. With `docker-compose` we can do that with the `env_file` field. Here is an example with a postgres configuration:

View file

@ -3,6 +3,7 @@ title: "Docker Macvlan Networks"
date: 2020-05-26T01:01:43-04:00 date: 2020-05-26T01:01:43-04:00
draft: false draft: false
tags: ["Containers"] tags: ["Containers"]
medium_enabled: true
--- ---
It is useful to have some docker containers live in the same network as your host machine. We can accomplish this by creating a new MAC address for the container and using the `macvlan` driver. Here is example Docker Compose configuration It is useful to have some docker containers live in the same network as your host machine. We can accomplish this by creating a new MAC address for the container and using the `macvlan` driver. Here is example Docker Compose configuration

View file

@ -4,6 +4,7 @@ date: 2022-05-19T21:24:52-04:00
draft: false draft: false
tags: ["Documentation"] tags: ["Documentation"]
math: false math: false
medium_enabled: true
--- ---
Microsoft Word, Apple Pages, Google Docs, Libreoffice Writer all provide a method of writing and formatting text. This is then normally stored in a "binary" file. I put binary in quotes as they are often stored in a zip archive of XML files. However, because it's in a zip archive, I cannot use standard plaintext tools to search within the document. Microsoft Word, Apple Pages, Google Docs, Libreoffice Writer all provide a method of writing and formatting text. This is then normally stored in a "binary" file. I put binary in quotes as they are often stored in a zip archive of XML files. However, because it's in a zip archive, I cannot use standard plaintext tools to search within the document.

View file

@ -3,6 +3,7 @@ title: "Download Changes"
date: 2020-04-12T15:28:31-04:00 date: 2020-04-12T15:28:31-04:00
draft: false draft: false
tags: [] tags: []
medium_enabled: true
--- ---
When testing daily ISO images, it is useful to only download the parts of the ISO that has changed since the previous days. That way we can preserve time and bandwidth. When testing daily ISO images, it is useful to only download the parts of the ISO that has changed since the previous days. That way we can preserve time and bandwidth.

View file

@ -1,9 +1,12 @@
--- ---
title: "Drawing Trees in LaTex with Tikz" date: 2022-12-06 11:01:24-05:00
date: 2022-12-06T11:01:24-05:00
draft: false draft: false
tags: ["LaTex"]
math: false math: false
medium_enabled: true
medium_post_id: f80065fbf92f
tags:
- LaTex
title: Drawing Trees in LaTex with Tikz
--- ---
For the longest time I've been avoiding Tikz because I imagined it being too difficult to learn. Usually I create a graphic using a program like [Draw.IO](https://draw.io) and import it as an image. Though this time around, I decided that I'm going to learn how to make trees in Tikz. It turns out, it's not as bad as I anticipated. For the longest time I've been avoiding Tikz because I imagined it being too difficult to learn. Usually I create a graphic using a program like [Draw.IO](https://draw.io) and import it as an image. Though this time around, I decided that I'm going to learn how to make trees in Tikz. It turns out, it's not as bad as I anticipated.

View file

@ -3,6 +3,7 @@ title: "Espeak"
date: 2020-03-01T10:33:33-05:00 date: 2020-03-01T10:33:33-05:00
draft: false draft: false
tags: [] tags: []
medium_enabled: true
--- ---
`espeak` is a command line tool that lets you type in messages and have it said back to you. `espeak` is a command line tool that lets you type in messages and have it said back to you.

View file

@ -3,6 +3,7 @@ title: "Quick Python: Export Decorator"
date: 2020-06-14T22:15:38-04:00 date: 2020-06-14T22:15:38-04:00
draft: false draft: false
tags: ["Python"] tags: ["Python"]
medium_enabled: true
--- ---
A great [StackOverflow post](https://stackoverflow.com/a/35710527) by [Aaron Hall](https://stackoverflow.com/users/541136/aaron-hall) that shows how you can create an `export` decorator in order to not have to specify all the names you want to expose via [`__all__`](/blog/pythonall/). A great [StackOverflow post](https://stackoverflow.com/a/35710527) by [Aaron Hall](https://stackoverflow.com/users/541136/aaron-hall) that shows how you can create an `export` decorator in order to not have to specify all the names you want to expose via [`__all__`](/blog/pythonall/).

View file

@ -3,6 +3,7 @@ title: "External Media Formats"
date: 2019-05-22T22:03:38-04:00 date: 2019-05-22T22:03:38-04:00
draft: false draft: false
tags: [ "Storage" ] tags: [ "Storage" ]
medium_enabled: true
--- ---
I received an external SSD recently and I decided that it would be a great place to offload some of my backups. Before I got started, I became curious as to what filesystem to put on the SSD. After some research, it seems that if I want to be able to access it using Windows I am actually quite limited. In fact only three make sense: I received an external SSD recently and I decided that it would be a great place to offload some of my backups. Before I got started, I became curious as to what filesystem to put on the SSD. After some research, it seems that if I want to be able to access it using Windows I am actually quite limited. In fact only three make sense:

View file

@ -3,6 +3,7 @@ title: "Extract All the Things"
date: 2020-06-14T22:23:37-04:00 date: 2020-06-14T22:23:37-04:00
draft: false draft: false
tags: ["Linux"] tags: ["Linux"]
medium_enabled: true
--- ---
[Sandra Henry-Stocker](https://www.networkworld.com/author/Sandra-Henry_Stocker/) from Network World wrote a [great post](https://www.networkworld.com/article/3244007/extracting-from-compressed-files-on-linux.html) on how to standardize extracting files on Linux. It's a shell script that works so well, that I placed it in my [`~/.local/bin` directory](https://brandonrozek.com/blog/customexec/) in order to call upon it at any time. Here's part of it, check out the post for more. [Sandra Henry-Stocker](https://www.networkworld.com/author/Sandra-Henry_Stocker/) from Network World wrote a [great post](https://www.networkworld.com/article/3244007/extracting-from-compressed-files-on-linux.html) on how to standardize extracting files on Linux. It's a shell script that works so well, that I placed it in my [`~/.local/bin` directory](https://brandonrozek.com/blog/customexec/) in order to call upon it at any time. Here's part of it, check out the post for more.

View file

@ -3,6 +3,7 @@ title: "V4l2 Webcam"
date: 2020-05-25T23:49:08-04:00 date: 2020-05-25T23:49:08-04:00
draft: false draft: false
tags: ["Audio-Video"] tags: ["Audio-Video"]
medium_enabled: true
--- ---
In Linux you can create a fake webcam by making use of the `v4l2loopback` kernel module. In Linux you can create a fake webcam by making use of the `v4l2loopback` kernel module.

View file

@ -4,6 +4,7 @@ date: 2022-05-15T20:39:35-04:00
draft: false draft: false
tags: ["Mastodon"] tags: ["Mastodon"]
math: false math: false
medium_enabled: true
--- ---
Mastodon is a cool federated micro-blogging platform that can serve as an alternative to Twitter. One of its primary features is that it shows what they call toots from only people you follow in reverse-chronological order. Nowadays, large tech companies employ recommendation engines to surface content from users (you don't even need to follow) in a non-chronological order driven by the number of interactions users similar to you had with the content. The lack of recommendation engine in Mastodon can be a blessing as low-quality emotional content tends to drive more interactions. However, this can also be a curse as cool new people don't naturally surface in your feed. The following are the techniques I employ to consistently seek out cool new people: Mastodon is a cool federated micro-blogging platform that can serve as an alternative to Twitter. One of its primary features is that it shows what they call toots from only people you follow in reverse-chronological order. Nowadays, large tech companies employ recommendation engines to surface content from users (you don't even need to follow) in a non-chronological order driven by the number of interactions users similar to you had with the content. The lack of recommendation engine in Mastodon can be a blessing as low-quality emotional content tends to drive more interactions. However, this can also be a curse as cool new people don't naturally surface in your feed. The following are the techniques I employ to consistently seek out cool new people:

View file

@ -4,6 +4,7 @@ date: 2022-03-08T10:53:43-05:00
draft: false draft: false
tags: [] tags: []
math: false math: false
medium_enabled: true
--- ---
When cuda fails, it fails silently. To combat this, I have gotten into a habit of checking for a failed status for every cuda memory allocation, kernel execution etc. The following is a C++ macro I wrote that checks if a previous cuda call has failed and then prints the current line and file of the macro. When cuda fails, it fails silently. To combat this, I have gotten into a habit of checking for a failed status for every cuda memory allocation, kernel execution etc. The following is a C++ macro I wrote that checks if a previous cuda call has failed and then prints the current line and file of the macro.

View file

@ -3,6 +3,7 @@ title: "Firefox Privacy Configuration"
date: 2020-06-26T22:35:05-04:00 date: 2020-06-26T22:35:05-04:00
draft: false draft: false
tags: [] tags: []
medium_enabled: true
--- ---
Firefox has a great number of configurable options when it comes to privacy. I first discovered this as I was browsing [privacytools.io](https://www.privacytools.io/browsers/) recommendations. Mozilla also has a [privacy task force](https://wiki.mozilla.org/Privacy/Privacy_Task_Force/firefox_about_config_privacy_tweeks) documenting some these options. I later learned that there is a website called [Firefox Profilemaker](https://ffprofile.com/) that takes the user step by step creating a privacy preserving profile. Firefox has a great number of configurable options when it comes to privacy. I first discovered this as I was browsing [privacytools.io](https://www.privacytools.io/browsers/) recommendations. Mozilla also has a [privacy task force](https://wiki.mozilla.org/Privacy/Privacy_Task_Force/firefox_about_config_privacy_tweeks) documenting some these options. I later learned that there is a website called [Firefox Profilemaker](https://ffprofile.com/) that takes the user step by step creating a privacy preserving profile.

View file

@ -3,6 +3,7 @@ title: "Getting Started with FM Digital Modes"
date: 2020-11-07T21:31:52-05:00 date: 2020-11-07T21:31:52-05:00
draft: false draft: false
tags: ["Amateur Radio"] tags: ["Amateur Radio"]
medium_enabled: true
--- ---
In this post, I will describe a low cost way to get started with digital modes using FM. We will extend off my [previous post](/blog/digitalmodes). Even though some of these instructions are hardware specific, I hope that the general principles will apply to whatever hardware you're working with. In this post, I will describe a low cost way to get started with digital modes using FM. We will extend off my [previous post](/blog/digitalmodes). Even though some of these instructions are hardware specific, I hope that the general principles will apply to whatever hardware you're working with.

View file

@ -4,6 +4,7 @@ date: 2022-11-09T15:15:10-05:00
draft: false draft: false
tags: ["Functional Programming", "Scala", "Haskell"] tags: ["Functional Programming", "Scala", "Haskell"]
math: false math: false
medium_enabled: true
--- ---
One misconception when first learning about fold is that it takes a list of elements of a certain type (`List[T]`) and "reduces" it to a single item of type `T`. One misconception when first learning about fold is that it takes a list of elements of a certain type (`List[T]`) and "reduces" it to a single item of type `T`.

View file

@ -3,6 +3,7 @@ title: "Gevent"
date: 2020-04-09T17:22:52-04:00 date: 2020-04-09T17:22:52-04:00
draft: false draft: false
tags: ["Python"] tags: ["Python"]
medium_enabled: true
--- ---
In my last post I spoke about [concurrency with asyncio](/blog/pyasyncio/). Now what if you don't want to concern yourself with async/await practices and just want to write synchronous code that executes I/O asynchronously? That's where the library [gevent](http://www.gevent.org/) comes in. It does this by modifying Python's standard library during runtime to call it's own asynchronous versions. In my last post I spoke about [concurrency with asyncio](/blog/pyasyncio/). Now what if you don't want to concern yourself with async/await practices and just want to write synchronous code that executes I/O asynchronously? That's where the library [gevent](http://www.gevent.org/) comes in. It does this by modifying Python's standard library during runtime to call it's own asynchronous versions.

View file

@ -4,6 +4,7 @@ date: 2022-05-03T01:15:55-04:00
draft: false draft: false
tags: ["Git"] tags: ["Git"]
math: false math: false
medium_enabled: true
--- ---
Lets imagine a scenario where in the latest merge a test Lets imagine a scenario where in the latest merge a test

View file

@ -4,6 +4,7 @@ date: 2022-02-04T21:23:30-05:00
draft: false draft: false
tags: ["Git"] tags: ["Git"]
math: false math: false
medium_enabled: true
--- ---
When working in LaTex it is often more useful to see the changes by words as opposed to lines. Luckily, it's pretty easy to view this in the terminal. When working in LaTex it is often more useful to see the changes by words as opposed to lines. Luckily, it's pretty easy to view this in the terminal.

View file

@ -4,6 +4,7 @@ date: 2022-02-07T17:07:08-05:00
draft: false draft: false
tags: ["Git"] tags: ["Git"]
math: false math: false
medium_enabled: true
--- ---
I recently was introduced to [Sparse Directories in SVN](https://svnbook.red-bean.com/en/1.8/svn.advanced.sparsedirs.html). In SVN, you can initially clone a repository and have it be empty until you checkout the specific files needed. I wondered if I can do the same with `git`. For the *tl;dr* skip to the conclusion section. I recently was introduced to [Sparse Directories in SVN](https://svnbook.red-bean.com/en/1.8/svn.advanced.sparsedirs.html). In SVN, you can initially clone a repository and have it be empty until you checkout the specific files needed. I wondered if I can do the same with `git`. For the *tl;dr* skip to the conclusion section.

View file

@ -4,6 +4,7 @@ date: 2022-06-02T21:19:29-04:00
draft: false draft: false
tags: ["Git"] tags: ["Git"]
math: false math: false
medium_enabled: true
--- ---
Git's greatest strength is its first-class support for decentralization. Git's greatest strength is its first-class support for decentralization.

View file

@ -3,6 +3,7 @@ title: "Git Bundle"
date: 2020-03-20T16:22:01-04:00 date: 2020-03-20T16:22:01-04:00
draft: false draft: false
tags: ["Git"] tags: ["Git"]
medium_enabled: true
--- ---
If you have a large software repository, sometimes you only want to share part of it with a group. You can accomplish this by using `git bundle` If you have a large software repository, sometimes you only want to share part of it with a group. You can accomplish this by using `git bundle`

View file

@ -3,6 +3,7 @@ title: "Git Credential Store"
date: 2020-05-25T22:30:49-04:00 date: 2020-05-25T22:30:49-04:00
draft: false draft: false
tags: ["Git"] tags: ["Git"]
medium_enabled: true
--- ---
Normally it is recommended to setup a SSH key with your Git hosting tool with choice. Though if that is not practical, another way you can avoid having to put in your git username and password every time you push your code is to make use of Git's credential store. Normally it is recommended to setup a SSH key with your Git hosting tool with choice. Though if that is not practical, another way you can avoid having to put in your git username and password every time you push your code is to make use of Git's credential store.

View file

@ -3,6 +3,7 @@ title: "How to Drop Commits in Git"
date: 2020-05-26T00:48:37-04:00 date: 2020-05-26T00:48:37-04:00
draft: false draft: false
tags: ["Git"] tags: ["Git"]
medium_enabled: true
--- ---
Even though it is not recommended to rewrite history in Git, it can be useful to drop certain commits from a pull request. The easiest way I've found to achieve this is with `git rebase`. To look back at the last 5 commits Even though it is not recommended to rewrite history in Git, it can be useful to drop certain commits from a pull request. The easiest way I've found to achieve this is with `git rebase`. To look back at the last 5 commits

View file

@ -2,6 +2,7 @@
title: "Gitlab CI/CD" title: "Gitlab CI/CD"
date: 2019-07-01T21:36:56-04:00 date: 2019-07-01T21:36:56-04:00
draft: false draft: false
medium_enabled: true
--- ---
One of the greatest benefits I believe of integrating Gitlab's CI/CD into your workload is code linting and building. This immediately eliminates the easy mistakes that developers make and wastes less people's time. One of the greatest benefits I believe of integrating Gitlab's CI/CD into your workload is code linting and building. This immediately eliminates the easy mistakes that developers make and wastes less people's time.

View file

@ -3,6 +3,7 @@ title: "Git Line Endings"
date: 2020-05-09T11:01:21-04:00 date: 2020-05-09T11:01:21-04:00
draft: false draft: false
tags: ["Git"] tags: ["Git"]
medium_enabled: true
--- ---
if you have worked with a team that has a mix of Windows and Linux developers, you might have noticed pull requests where Git reports changes in a file that is not visible. One explanation is that the line endings might have changed. if you have worked with a team that has a mix of Windows and Linux developers, you might have noticed pull requests where Git reports changes in a file that is not visible. One explanation is that the line endings might have changed.

Some files were not shown because too many files have changed in this diff Show more