mirror of
https://github.com/Brandon-Rozek/website.git
synced 2024-09-07 17:42:29 -04:00
Medium syndication information
This commit is contained in:
parent
e5a96d735a
commit
c5ff5538a6
276 changed files with 371 additions and 80 deletions
|
@ -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.
|
||||
|
|
|
@ -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`
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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!
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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).
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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`.
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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?
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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/).
|
||||
|
|
|
@ -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"
|
||||
```
|
||||
|
||||
```
|
|
@ -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.
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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"
|
||||
```
|
||||
|
||||
```
|
|
@ -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.
|
||||
|
|
|
@ -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...
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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`.
|
||||
|
|
|
@ -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++.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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**
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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`.
|
||||
|
|
|
@ -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*
|
||||
|
|
|
@ -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*.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
|
@ -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.
|
|
@ -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
|
|
@ -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]`?
|
||||
|
|
|
@ -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
|
||||
```
|
||||
|
||||
```
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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).
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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)
|
|
@ -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.
|
||||
|
|
|
@ -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/).
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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`.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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`
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
Loading…
Reference in a new issue