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
draft: false
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.

View file

@ -4,6 +4,7 @@ date: 2022-06-19T19:01:35-04:00
draft: false
tags: ["GPS"]
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`

View file

@ -4,6 +4,7 @@ date: 2022-10-04T11:38:03-04:00
draft: false
tags: []
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.

View file

@ -3,6 +3,7 @@ title: "Algorithms in LaTex"
date: 2020-05-14T21:31:28-04:00
draft: false
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:

View file

@ -4,6 +4,7 @@ date: 2021-07-25T10:43:11-04:00
draft: false
tags: ["Amateur Radio"]
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.

View file

@ -3,6 +3,7 @@ title: "Deploying Binaries to other Linux Distros using Appimage"
date: 2020-10-19T21:53:52-04:00
draft: false
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.

View file

@ -3,6 +3,7 @@ title: "Show Applications using the Internet"
date: 2020-05-09T11:30:36-04:00
draft: false
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.

View file

@ -4,6 +4,7 @@ date: 2022-05-20T22:47:48-04:00
draft: false
tags: ["Hugo", "Mastodon", "Archive"]
math: false
medium_enabled: true
---
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

View file

@ -3,6 +3,7 @@ title: "Mirroring or Archiving an Entire Website"
date: 2019-08-02T22:42:16-04:00
draft: false
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.

View file

@ -3,6 +3,7 @@ title: "aspell"
date: 2019-12-10T22:20:48-05:00
draft: false
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!

View file

@ -3,6 +3,7 @@ title: "Quick Python: Async Callbacks"
date: 2020-07-11T20:23:29-04:00
draft: false
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:

View file

@ -3,6 +3,7 @@ title: "Replace Audio in Video"
date: 2020-04-20T20:32:26-04:00
draft: false
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.

View file

@ -4,6 +4,7 @@ date: 2022-05-15T22:20:47-04:00
draft: false
tags: ["Linux", "Containers"]
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.

View file

@ -3,6 +3,7 @@ title: "Auto-Deploy Docker Applications"
date: 2020-05-09T10:20:34-04:00
draft: false
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).

View file

@ -3,6 +3,7 @@ title: "Automatic Deployments with Terraform"
date: 2020-05-08T22:45:18-04:00
draft: false
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.

View file

@ -3,6 +3,7 @@ title: "Auto Purge Old Docker Images"
date: 2020-09-28T23:30:22-04:00
draft: false
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.

View file

@ -3,6 +3,7 @@ title: "Autostart Desktop Applications"
date: 2020-11-29T13:45:28-05:00
draft: false
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.

View file

@ -3,6 +3,7 @@ title: "Bandwidth Limiting Applications"
date: 2020-10-22T21:51:27-04:00
draft: false
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.

View file

@ -3,6 +3,7 @@ title: "Bash Flags"
date: 2019-08-06T16:55:47-04:00
draft: false
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.

View file

@ -3,6 +3,7 @@ title: "Partial Argument Parse and Passing in Bash"
date: 2020-09-07T21:33:26-04:00
draft: false
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.

View file

@ -3,6 +3,7 @@ title: "Handling Background Processes in Bash"
date: 2019-06-17T19:50:30-04:00
draft: false
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`.

View file

@ -3,6 +3,7 @@ title: "TCP/UDP with Bash"
date: 2020-05-25T23:10:15-04:00
draft: false
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:

View file

@ -3,6 +3,7 @@ title: "Quick Bash: Validate IP Address"
date: 2020-12-19T20:15:24-05:00
draft: false
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?

View file

@ -3,6 +3,7 @@ title: "Bat: The user friendly cat"
date: 2020-02-01T06:26:18-05:00
draft: false
tags: [ "Linux" ]
medium_enabled: true
---
`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
draft: false
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/).

View file

@ -1,9 +1,11 @@
---
title: "Blogroll From Subscriptions"
date: 2022-12-18T13:05:49-05:00
date: 2022-12-18 13:05:49-05:00
draft: false
tags: []
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).
@ -54,5 +56,4 @@ HTML_EXPR="<li><a href=\"\3\">\1<\/a> (<a href=\"\2\">feed<\/a>)<\/li>"
REPLACE_EXPR="s/$XML_EXPR/$HTML_EXPR/g"
grep "xmlUrl" "$1" | sed "$REPLACE_EXPR"
```
```

View file

@ -3,6 +3,7 @@ title: "Blog Workflow"
date: 2019-10-28T00:16:44-04:00
draft: false
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.

View file

@ -3,6 +3,7 @@ title: "Borg Backup"
date: 2019-05-21T22:35:31-04:00
draft: false
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:

View file

@ -1,9 +1,11 @@
---
title: "Capturing Quoted Strings in Sed"
date: 2022-12-18T12:55:32-05:00
date: 2022-12-18 12:55:32-05:00
draft: false
tags: []
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.*
@ -61,5 +63,4 @@ REPLACE_EXPR="s/$BEFORE_TEXT/$AFTER_TEXT/g"
INPUT="\<a href=\"https://brandonrozek.com\" rel=\"me\"\>\</a\>"
echo "$INPUT" | sed "$REPLACE_EXPR"
```
```

View file

@ -3,6 +3,7 @@ title: "Checkinstall"
date: 2020-04-26T12:11:30-04:00
draft: false
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.

View file

@ -3,6 +3,7 @@ title: "Chirp"
date: 2019-09-27T22:46:52-04:00
draft: false
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...

View file

@ -3,6 +3,7 @@ title: "Chroot and Virtual Filesystems"
date: 2020-11-29T10:52:07-05:00
draft: false
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:

View file

@ -3,6 +3,7 @@ title: "Clearing Systemd Logs"
date: 2021-02-21T16:08:51-05:00
draft: false
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.

View file

@ -3,6 +3,7 @@ title: "cloc"
date: 2020-01-25T10:24:16-05:00
draft: false
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.

View file

@ -4,6 +4,7 @@ date: 2022-01-26T23:11:37-05:00
draft: false
tags: ["LaTex"]
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:

View file

@ -4,6 +4,7 @@ date: 2022-01-27T09:15:10-05:00
draft: false
tags: ["LaTex"]
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.

View file

@ -2,6 +2,7 @@
title: "Collaborating on Beamer Pandoc Slides"
date: 2019-11-22T14:49:19-05:00
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.

View file

@ -3,6 +3,7 @@ title: "Color Manipulation with Sass"
date: 2019-05-21T23:10:06-04:00
draft: false
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.

View file

@ -4,6 +4,7 @@ date: 2022-05-15T22:49:34-04:00
draft: false
tags: ["Math"]
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.

View file

@ -4,6 +4,7 @@ date: 2021-06-18T01:09:45-04:00
draft: false
tags: []
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.

View file

@ -3,6 +3,7 @@ title: "Ensuring Docker Compose Startup with Systemd"
date: 2019-12-16T20:57:36-05:00
draft: false
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.

View file

@ -1,9 +1,11 @@
---
title: "Concatenating PDF files in Linux"
date: 2022-12-18T18:38:44-05:00
date: 2022-12-18 18:38:44-05:00
draft: false
tags: []
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`.
@ -75,4 +77,4 @@ We can then use `imagemagick` to enforce a certain pixel density. The tradeoff b
convert -density 300 input.pdf output.pdf
```
If you happen to know a different way to enforce a pixel density that doesn't have a file size increase tradeoff. Please get in touch.
If you happen to know a different way to enforce a pixel density that doesn't have a file size increase tradeoff. Please get in touch.

View file

@ -4,6 +4,7 @@ date: 2022-06-19T18:49:47-04:00
draft: false
tags: ["Bash"]
math: false
medium_enabled: true
---
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
tags: []
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.

View file

@ -3,6 +3,7 @@ title: "Quick Python: Copy Decorator"
date: 2020-04-08T18:49:54-04:00
draft: false
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.

View file

@ -3,6 +3,7 @@ title: "Copy to RAM Please"
date: 2019-08-02T22:37:12-04:00
draft: false
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.

View file

@ -4,6 +4,7 @@ date: 2022-11-12T10:45:04-05:00
draft: false
tags: ["Scala", "Functional Programming"]
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.

View file

@ -3,6 +3,7 @@ title: "coredns"
date: 2019-12-13T02:00:29-05:00
draft: false
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`.

View file

@ -3,6 +3,7 @@ title: "C++ Overloads"
date: 2020-03-07T13:52:05-05:00
draft: false
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++.

View file

@ -3,6 +3,7 @@ title: "Creating QR Codes from the Terminal"
date: 2020-09-26T22:13:25-04:00
draft: false
tags: []
medium_enabled: true
---
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
math: true
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.

View file

@ -3,6 +3,7 @@ title: "Capture The Flag"
date: 2019-05-22T21:25:22-04:00
draft: false
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.

View file

@ -5,6 +5,7 @@ draft: false
aliases:
- /blog/adding-fonts
tags: ['Ubuntu', 'Linux']
medium_enabled: true
---
**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
draft: false
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.

View file

@ -3,6 +3,7 @@ title: "Custom Device Paths with UDEV rules"
date: 2020-11-10T20:58:37-05:00
draft: false
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`.

View file

@ -4,6 +4,7 @@ date: 2022-02-04T19:43:12-05:00
draft: false
tags: ["Formal Methods"]
math: false
medium_enabled: true
---
*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
tags: ["Formal Methods"]
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*.

View file

@ -3,6 +3,7 @@ title: "Dbcli"
date: 2020-02-29T18:45:51-05:00
draft: false
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.

View file

@ -3,6 +3,7 @@ title: "Burning ISOs with dd/pv"
date: 2020-01-20T10:23:20-05:00
draft: false
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.

View file

@ -1,9 +1,11 @@
---
title: "The Promise of Decentralized Currency and the Issues with Custodians"
date: 2022-12-04T19:54:58-05:00
draft: false
tags: []
date: 2022-12-04 19:54:58-05:00
draft: 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.*
@ -43,4 +45,4 @@ Often purchasing Bitcoin from an exchange passes through a *Know Your Customer*
[^1]: I understand other arguments more such as the un-sustainability of the *Proof-of-work* protocol.
[^1]: I understand other arguments more such as the un-sustainability of the *Proof-of-work* protocol.

View file

@ -1,9 +1,12 @@
---
title: "Decentralized Identities with PGP Annotations and Keyoxide"
date: 2023-01-04T09:00:14-05:00
date: 2023-01-04 09:00:14-05:00
draft: false
tags: ["GPG/PGP"]
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.
@ -62,4 +65,4 @@ Notice how nowhere in the process do we reference Keyoxide or their servers. Thi
My Keyoxide profile: https://keyoxide.org/wkd/brozek%40brandonrozek.com
In fact, Keyoxide is [open source](https://codeberg.org/keyoxide/) meaning that anyone can host their own instance to perform the validation checks.
In fact, Keyoxide is [open source](https://codeberg.org/keyoxide/) meaning that anyone can host their own instance to perform the validation checks.

View file

@ -1,9 +1,12 @@
---
title: "Decentralized PGP Keys with WKD"
date: 2023-01-04T09:06:38-05:00
draft: false
tags: ["GPG/PGP"]
date: 2023-01-04 09:06:38-05:00
draft: 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.
@ -85,4 +88,4 @@ With WKD, we didn't have to trust anyone but the DNS provider in order to retrie
- https://shibumi.dev/posts/how-to-setup-your-own-wkd-server/
- https://www.sindastra.de/p/1905/how-to-set-up-pgp-wkd-web-key-directory
- https://shivering-isles.com/Lets-discover-OpenPGP-keys
- https://wiki.gnupg.org/WKD
- https://wiki.gnupg.org/WKD

View file

@ -4,6 +4,7 @@ date: 2022-11-11T14:45:17-05:00
draft: false
tags: ["Scala", "Functional Programming"]
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]`?

View file

@ -1,9 +1,12 @@
---
title: "Deploying my Hugo Website through GitHub Actions"
date: 2022-12-04T22:02:08-05:00
draft: false
tags: ["Hugo"]
date: 2022-12-04 22:02:08-05:00
draft: 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:
@ -185,5 +188,4 @@ jobs:
- name: Deploy
run: ./deploy.sh
```
```

View file

@ -3,6 +3,7 @@ title: "Detect Python Version"
date: 2021-03-15T18:09:38-04:00
draft: false
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.

View file

@ -3,6 +3,7 @@ title: "Diceware"
date: 2020-05-01T00:22:31-04:00
draft: false
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.

View file

@ -4,6 +4,7 @@ date: 2022-11-09T17:45:26-05:00
draft: false
tags: ["Scala", "Functional Programming"]
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:

View file

@ -5,6 +5,7 @@ draft: false
aliases:
- /blog/digialmodes
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.

View file

@ -4,6 +4,7 @@ date: 2020-03-28T22:08:19-04:00
draft: false
tags: ["Python", "Statistics"]
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.

View file

@ -3,6 +3,7 @@ title: "Discovering Ham Radio"
date: 2019-07-01T22:06:23-04:00
draft: false
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).

View file

@ -4,6 +4,7 @@ date: 2022-05-20T16:57:11-04:00
draft: false
tags: ["Hugo"]
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.

View file

@ -4,6 +4,7 @@ date: 2022-05-23T16:35:01-04:00
draft: false
tags: ["Hugo", "GPS"]
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.

View file

@ -4,6 +4,7 @@ date: 2021-08-27T21:50:02-04:00
draft: false
tags: []
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:

View file

@ -3,6 +3,7 @@ title: "Digital Ocean API"
date: 2020-05-06T22:45:30-04:00
draft: false
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.

View file

@ -3,6 +3,7 @@ title: "Advanced Docker Image Construction with Bash"
date: 2019-12-26T21:01:37-05:00
draft: false
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.

View file

@ -4,6 +4,7 @@ date: 2022-02-04T23:59:13-05:00
draft: false
tags: ["Containers"]
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:

View file

@ -3,6 +3,7 @@ title: "Docker Macvlan Networks"
date: 2020-05-26T01:01:43-04:00
draft: false
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

View file

@ -4,6 +4,7 @@ date: 2022-05-19T21:24:52-04:00
draft: false
tags: ["Documentation"]
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.

View file

@ -3,6 +3,7 @@ title: "Download Changes"
date: 2020-04-12T15:28:31-04:00
draft: false
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.

View file

@ -1,9 +1,12 @@
---
title: "Drawing Trees in LaTex with Tikz"
date: 2022-12-06T11:01:24-05:00
draft: false
tags: ["LaTex"]
date: 2022-12-06 11:01:24-05:00
draft: 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.
@ -88,4 +91,4 @@ To show how the child nesting works, I'll finish by giving the right child two c
\end{tikzpicture}
```
![Screenshot of a tree similar to the previous tree, but with the right child having two child nodes one with the label A and the other with the label B.](/files/images/blog/20221206112444.png)
![Screenshot of a tree similar to the previous tree, but with the right child having two child nodes one with the label A and the other with the label B.](/files/images/blog/20221206112444.png)

View file

@ -3,6 +3,7 @@ title: "Espeak"
date: 2020-03-01T10:33:33-05:00
draft: false
tags: []
medium_enabled: true
---
`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
draft: false
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/).

View file

@ -3,6 +3,7 @@ title: "External Media Formats"
date: 2019-05-22T22:03:38-04:00
draft: false
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:

View file

@ -3,6 +3,7 @@ title: "Extract All the Things"
date: 2020-06-14T22:23:37-04:00
draft: false
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.

View file

@ -3,6 +3,7 @@ title: "V4l2 Webcam"
date: 2020-05-25T23:49:08-04:00
draft: false
tags: ["Audio-Video"]
medium_enabled: true
---
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
tags: ["Mastodon"]
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:

View file

@ -4,6 +4,7 @@ date: 2022-03-08T10:53:43-05:00
draft: false
tags: []
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.

View file

@ -3,6 +3,7 @@ title: "Firefox Privacy Configuration"
date: 2020-06-26T22:35:05-04:00
draft: false
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.

View file

@ -3,6 +3,7 @@ title: "Getting Started with FM Digital Modes"
date: 2020-11-07T21:31:52-05:00
draft: false
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.

View file

@ -4,6 +4,7 @@ date: 2022-11-09T15:15:10-05:00
draft: false
tags: ["Functional Programming", "Scala", "Haskell"]
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`.

View file

@ -3,6 +3,7 @@ title: "Gevent"
date: 2020-04-09T17:22:52-04:00
draft: false
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.

View file

@ -4,6 +4,7 @@ date: 2022-05-03T01:15:55-04:00
draft: false
tags: ["Git"]
math: false
medium_enabled: true
---
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
tags: ["Git"]
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.

View file

@ -4,6 +4,7 @@ date: 2022-02-07T17:07:08-05:00
draft: false
tags: ["Git"]
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.

View file

@ -4,6 +4,7 @@ date: 2022-06-02T21:19:29-04:00
draft: false
tags: ["Git"]
math: false
medium_enabled: true
---
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
draft: false
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`

View file

@ -3,6 +3,7 @@ title: "Git Credential Store"
date: 2020-05-25T22:30:49-04:00
draft: false
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.

View file

@ -3,6 +3,7 @@ title: "How to Drop Commits in Git"
date: 2020-05-26T00:48:37-04:00
draft: false
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

View file

@ -2,6 +2,7 @@
title: "Gitlab CI/CD"
date: 2019-07-01T21:36:56-04:00
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.

View file

@ -3,6 +3,7 @@ title: "Git Line Endings"
date: 2020-05-09T11:01:21-04:00
draft: false
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.

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