diff --git a/content/blog/2015-04-16-responsive-layout-and-animation.md b/content/blog/2015-04-16-responsive-layout-and-animation.md index 00030e4..4a76e95 100644 --- a/content/blog/2015-04-16-responsive-layout-and-animation.md +++ b/content/blog/2015-04-16-responsive-layout-and-animation.md @@ -23,6 +23,7 @@ tumblr_post_id: - "135656876494" kind: - article +tags: ["Web", "CSS"] --- I saw [Mike Riethmuller’s](http://madebymike.com.au/) precision typography [pen](http://codepen.io/MadeByMike/pen/YPJJYv){.broken_link}, and was highly impressed. I think the equation used has other purposes as well diff --git a/content/blog/2015-05-23-animatable-border.md b/content/blog/2015-05-23-animatable-border.md index 7cd01dc..e1df4cd 100644 --- a/content/blog/2015-05-23-animatable-border.md +++ b/content/blog/2015-05-23-animatable-border.md @@ -21,6 +21,7 @@ mf2_cite: - 'a:1:{s:6:"author";a:0:{}}' kind: - article +tags: ["Web", "CSS"] --- This is part 1 of an animation series I’m doing. It is inspired by Lea Verou’s talk called “[The Humble Border-Radius.](https://www.youtube.com/watch?v=JSaMl2OKjfQ)” I looked at her site and she has a good demo of a bunch of different animations [here](http://lea.verou.me/2011/10/animatable-a-css-transitions-gallery/). My goal here is to create a more comprehensive guide to these different animatable properties–mainly for future reference. Animations play a big part in adding interactivity to the web, so why not explore some possible options? diff --git a/content/blog/2015-09-14-animatable-box-model.md b/content/blog/2015-09-14-animatable-box-model.md index a4ea43a..621016e 100644 --- a/content/blog/2015-09-14-animatable-box-model.md +++ b/content/blog/2015-09-14-animatable-box-model.md @@ -23,6 +23,7 @@ tumblr_post_id: - "135657238924" kind: - article +tags: ["Web", "CSS"] --- This post is part 2 of an animation series I am doing; you can read part 1 [here](https://brandonrozek.com/2015/05/animatable-border/). In this post, we’ll look at the different parts of the box model (margin, padding, height, and width) and see how they can be animated. diff --git a/content/blog/2015-10-03-animatable-location.md b/content/blog/2015-10-03-animatable-location.md index bc0139e..1c0d63f 100644 --- a/content/blog/2015-10-03-animatable-location.md +++ b/content/blog/2015-10-03-animatable-location.md @@ -23,6 +23,7 @@ tumblr_post_id: - "135657326384" kind: - article +tags: ["Web", "CSS"] --- Animating the location of objects is one of the most common types of animation. It’s interesting to animate this way because you need to keep in mind how each of the element’s interact with each other to constitute a page. diff --git a/content/blog/2015-10-03-animatable-text.md b/content/blog/2015-10-03-animatable-text.md index 1429615..0d6b35b 100644 --- a/content/blog/2015-10-03-animatable-text.md +++ b/content/blog/2015-10-03-animatable-text.md @@ -20,6 +20,7 @@ tumblr_post_id: - "135657083469" kind: - article +tags: ["Web", "CSS"] --- This post is part 3 of my series on animation. In this post, I’ll show you different animations you can add onto text. If you haven’t already, you should check out [part 1](https://brandonrozek.com/2015/09/animatable-box-model/) and [part 2](https://brandonrozek.com/2015/05/animatable-border/) of this series. Animations on text can be used to bring attention, to add importance, or to convey a point. As with all animations, however, keep your user in mind and your text readable. diff --git a/content/blog/2015-10-04-html-css-javascript-link-together.md b/content/blog/2015-10-04-html-css-javascript-link-together.md index 0149797..35a37e3 100644 --- a/content/blog/2015-10-04-html-css-javascript-link-together.md +++ b/content/blog/2015-10-04-html-css-javascript-link-together.md @@ -23,6 +23,7 @@ tumblr_post_id: - "135657370214" kind: - article +tags: ["Web"] --- I’ve been teaching a small class on web development recently, and after my first lecture, I’ve gained a newfound respect for teachers. Teaching didn’t come as naturally to me as I would have imagined. I tried going in prepared: with a few outlines and a few code demos. Instead of letting my preparation go to waste, I decided to share them here with you on my site. It’s a nice break from the Animatable posts, so I hope you enjoy! diff --git a/content/blog/2015-10-10-javascript-data-types.md b/content/blog/2015-10-10-javascript-data-types.md index 5adc322..9035ef9 100644 --- a/content/blog/2015-10-10-javascript-data-types.md +++ b/content/blog/2015-10-10-javascript-data-types.md @@ -23,6 +23,7 @@ tumblr_post_id: - "135657462089" kind: - article +tags: ["Web", "JS"] --- Javascript has multiple ways you can store your data. Each of these different ways is called a data type, and they each carry different “methods” which are helpful commands. Today, I’ll show you the different data types and methods that I use and how they’re useful. diff --git a/content/blog/2015-10-11-animatable-visual.md b/content/blog/2015-10-11-animatable-visual.md index f2de8e6..7f8b9ba 100644 --- a/content/blog/2015-10-11-animatable-visual.md +++ b/content/blog/2015-10-11-animatable-visual.md @@ -20,6 +20,7 @@ mf2_cite: - 'a:1:{s:6:"author";a:0:{}}' kind: - article +tags: ["Web", "CSS"] --- Hello everyone! This is part 5 of my series on animation. Today’s post will be short, since we’re only going to talk about color and opacity. diff --git a/content/blog/2015-10-18-animatable-transform.md b/content/blog/2015-10-18-animatable-transform.md index d9eb50e..249d6fb 100644 --- a/content/blog/2015-10-18-animatable-transform.md +++ b/content/blog/2015-10-18-animatable-transform.md @@ -20,6 +20,7 @@ tumblr_post_id: - "135657540174" kind: - article +tags: ["Web", "CSS"] --- This is the last post of the animatable series. The grand finale. Here, we will talk about the transform property. It’s only one property but it comes with a lot of goodies in the form of transform-functions. diff --git a/content/blog/2015-10-18-javascript-conditional-statements.md b/content/blog/2015-10-18-javascript-conditional-statements.md index 99d2d6d..4fd3b63 100644 --- a/content/blog/2015-10-18-javascript-conditional-statements.md +++ b/content/blog/2015-10-18-javascript-conditional-statements.md @@ -23,6 +23,7 @@ tumblr_post_id: - "135657634939" kind: - article +tags: ["Web", "JS"] --- Javascript, like most other programming languages, include ways to run blocks of code when something meets a condition. Here, I will describe the most common ways to do so. diff --git a/content/blog/2015-10-25-functions.md b/content/blog/2015-10-25-functions.md index 71c1785..ca16e63 100644 --- a/content/blog/2015-10-25-functions.md +++ b/content/blog/2015-10-25-functions.md @@ -20,6 +20,7 @@ tumblr_post_id: - "135657661534" kind: - article +tags: ["Web", "JS"] --- Ever had a snippet of code that appears multiple times in different places in your program? Whenever you had to change that snippet, you end up playing this game of search and replace. Functions can help. They exist to abstract your code, making it not only easier to change that little snippet, but to read and debug your code as well. diff --git a/content/blog/2015-11-14-service-workers.md b/content/blog/2015-11-14-service-workers.md index 6ecebfb..97b937b 100644 --- a/content/blog/2015-11-14-service-workers.md +++ b/content/blog/2015-11-14-service-workers.md @@ -20,6 +20,7 @@ tumblr_post_id: - "135657690564" kind: - article +tags: ["Web", "JS"] --- I’m excited to say that I’ve written my first service worker for brandonrozek.com. What is a service worker? A service worker provides an extra layer between the client and the server. The exciting part about this is that you can use service workers to deliver an offline experience. (Cached versions of your site, offline pages, etc.) diff --git a/content/blog/2015-11-15-fractions-js.md b/content/blog/2015-11-15-fractions-js.md index c21badb..ff030a9 100644 --- a/content/blog/2015-11-15-fractions-js.md +++ b/content/blog/2015-11-15-fractions-js.md @@ -20,6 +20,7 @@ tumblr_post_id: - "135657739439" kind: - article +tags: ["JS"] --- Last week I published my first library over on Github called [Fractions.js](https://github.com/brandonrozek/Fractions.js). Fractions.js is a library to help avoid the [mathmatetical errors](http://floating-point-gui.de/) in floating point arithmetic. What do you mean by floating point artihmetic errors? Here is an example: .1 * .2 outputs 0.020000000000000004 even though the correct answer is .02 diff --git a/content/blog/2015-11-30-limiting-cache-service-workers-revisited3.md b/content/blog/2015-11-30-limiting-cache-service-workers-revisited3.md index f688987..69a894a 100644 --- a/content/blog/2015-11-30-limiting-cache-service-workers-revisited3.md +++ b/content/blog/2015-11-30-limiting-cache-service-workers-revisited3.md @@ -25,6 +25,7 @@ tumblr_crosspostr_crosspost: - 'N' kind: - article +tags: ["Web", "JS"] --- Summary: I rewrote how cache limiting works to address a few problems listed later in this post. Check out the [gist](https://gist.github.com/brandonrozek/0cf038df40a913fda655) for the updated code. diff --git a/content/blog/2015-12-27-creating-vcards-from-h-cards.md b/content/blog/2015-12-27-creating-vcards-from-h-cards.md index a3aef39..8a00a53 100644 --- a/content/blog/2015-12-27-creating-vcards-from-h-cards.md +++ b/content/blog/2015-12-27-creating-vcards-from-h-cards.md @@ -17,6 +17,7 @@ tumblr_post_id: - "136059699334" kind: - article +tags: ["Web"] --- Microformats is semantic HTML used to convey metadata. Using an userscript, I can generate a vCard from the representative h-card of the page. The code for this is on this gist [here.](https://gist.github.com/brandonrozek/e0153b2733e947fa9c87) diff --git a/content/blog/2016-08-16-pass-password-manager.md b/content/blog/2016-08-16-pass-password-manager.md index 61f2e5a..d37a8a7 100644 --- a/content/blog/2016-08-16-pass-password-manager.md +++ b/content/blog/2016-08-16-pass-password-manager.md @@ -22,6 +22,7 @@ mf2_syndicate-to: - 'a:1:{i:0;s:4:"none";}' kind: - note +tags: ["Security"] --- Looking over the list of programs installed on my computer, one of my all time favorites is a program called [Pass](https://www.passwordstore.org/). It’s a program available under most Linux distributions, Mac OS X (through [Brew](http://brew.sh/)), [Windows](https://github.com/mbos/Pass4Win), [Android](https://play.google.com/store/apps/details?id=com.zeapo.pwdstore), and [iOS](https://github.com/davidjb/pass-ios#readme). It stores all of the passwords using gpg encryption and stores them as actual files on the hard disk. Meaning if you wanted, you can sync them to all your devices! diff --git a/content/blog/2017-03-07-knit-document-rstudio.md b/content/blog/2017-03-07-knit-document-rstudio.md index 8b41e33..b8433d3 100644 --- a/content/blog/2017-03-07-knit-document-rstudio.md +++ b/content/blog/2017-03-07-knit-document-rstudio.md @@ -19,6 +19,7 @@ tumblr_post_id: format: aside kind: - note +tags: ["R"] --- In case you were wondering how I got all the R code and output for the [“Do females live longer than males?”](https://brandonrozek.com/portfolio/male-vs-female-life-expectancy/) page. There is actually a function in RStudio that allows one to compile a report based on code and it’s output. diff --git a/content/blog/2017-03-07-uniformity-math-random.md b/content/blog/2017-03-07-uniformity-math-random.md index 8fdbcbe..1e826d6 100644 --- a/content/blog/2017-03-07-uniformity-math-random.md +++ b/content/blog/2017-03-07-uniformity-math-random.md @@ -19,6 +19,7 @@ tumblr_post_id: format: aside kind: - note +tags: ["Statistics"] --- There are many cases where websites use random number generators to influence some sort of page behavior. One test to ensure the quality of a random number generator is to see if after many cases, the numbers produced follow a uniform distribution. diff --git a/content/blog/2017-03-14-monte-carlo-pi.md b/content/blog/2017-03-14-monte-carlo-pi.md index 4a6abd2..b7ee35d 100644 --- a/content/blog/2017-03-14-monte-carlo-pi.md +++ b/content/blog/2017-03-14-monte-carlo-pi.md @@ -21,6 +21,7 @@ mf2_syndication: format: aside kind: - note +tags: ["Math", "Java"] math: true --- Using Monte Carlo methods, we can create a simulation that approximates pi. In this post, we will go over the math behind the approximation and the code. diff --git a/content/blog/2017-05-24-viewing-java-applets.md b/content/blog/2017-05-24-viewing-java-applets.md index 941b6cd..497a243 100644 --- a/content/blog/2017-05-24-viewing-java-applets.md +++ b/content/blog/2017-05-24-viewing-java-applets.md @@ -20,6 +20,7 @@ mf2_syndication: - 'a:1:{i:0;s:60:"https://twitter.com/B_RozekJournal/status/867409810932760576";}' kind: - article +tags: ["Java"] --- When you use an IDE there are many things you can take for granted. A section of an intro level computer science course at my university uses [JGrasp](http://www.jgrasp.org/) to build Java Applets. diff --git a/content/blog/2017-06-05-java-swing-components.md b/content/blog/2017-06-05-java-swing-components.md index 172a09c..de0be46 100644 --- a/content/blog/2017-06-05-java-swing-components.md +++ b/content/blog/2017-06-05-java-swing-components.md @@ -18,6 +18,7 @@ tumblr_post_id: - "161484582559" kind: - article +tags: ["Java"] --- This post, over time, will serve as a reference to myself and others of the different UI components available in the Swing library. This post assumes a general familiarity with setting up a basic Swing application and focuses only on the individual components. diff --git a/content/blog/2017-06-05-using-system-themes-java-swing.md b/content/blog/2017-06-05-using-system-themes-java-swing.md index e6cbc1d..d63b80e 100644 --- a/content/blog/2017-06-05-using-system-themes-java-swing.md +++ b/content/blog/2017-06-05-using-system-themes-java-swing.md @@ -20,6 +20,7 @@ mf2_syndication: - 'a:1:{i:0;s:60:"https://twitter.com/B_RozekJournal/status/871828083459936257";}' kind: - article +tags: ["Java"] --- The default theme for Java Swing components is a cross-platform theme called “Metal”. I use the Adapta theme for GTK on Linux and this theme does not match at all what my other GUI applications look like. So here, I will describe a simple way to utlize already existent system themes in Java Swing applications. diff --git a/content/blog/2017-08-28-escape-sequences-java.md b/content/blog/2017-08-28-escape-sequences-java.md index a4ad912..c026c18 100644 --- a/content/blog/2017-08-28-escape-sequences-java.md +++ b/content/blog/2017-08-28-escape-sequences-java.md @@ -20,6 +20,7 @@ tumblr_crosspostr_crosspost: - 'N' kind: - note +tags: ["Java"] --- Sometimes you want to format your outputs. This is a quick cheatsheet containing the differerent escape sequences diff --git a/content/blog/2017-08-28-obtaining-command-line-input-java.md b/content/blog/2017-08-28-obtaining-command-line-input-java.md index 6dfed21..e17364b 100644 --- a/content/blog/2017-08-28-obtaining-command-line-input-java.md +++ b/content/blog/2017-08-28-obtaining-command-line-input-java.md @@ -20,6 +20,7 @@ mf2_mp-syndicate-to: - 'a:1:{i:0;s:4:"none";}' kind: - note +tags: ["Java"] --- To obtain console input for your program you can use the `Scanner` class diff --git a/content/blog/2018-01-22-identifying-misspelled-words-dataset-hunspell.md b/content/blog/2018-01-22-identifying-misspelled-words-dataset-hunspell.md index abc313c..2939f27 100644 --- a/content/blog/2018-01-22-identifying-misspelled-words-dataset-hunspell.md +++ b/content/blog/2018-01-22-identifying-misspelled-words-dataset-hunspell.md @@ -18,6 +18,7 @@ mf2_syndication: - 'a:1:{i:0;s:60:"https://twitter.com/B_RozekJournal/status/955308388384235521";}' kind: - article +tags: ["Java"] --- This article is based on one written by [Markus Konrad](https://datascience.blog.wzb.eu/author/markus_konrad/) at this link https://datascience.blog.wzb.eu/2016/07/13/autocorrecting-misspelled-words-in-python-using-hunspell/ diff --git a/content/blog/DebuggingAndPerformance.md b/content/blog/DebuggingAndPerformance.md index 1790c87..915b9a7 100644 --- a/content/blog/DebuggingAndPerformance.md +++ b/content/blog/DebuggingAndPerformance.md @@ -2,7 +2,7 @@ title: "Debugging and Performance" date: 2019-06-15T10:59:30-04:00 draft: false -tags: [ "linux" ] +tags: [ "Testing" ] --- 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. diff --git a/content/blog/abstractdef.md b/content/blog/abstractdef.md index 69df19c..c761611 100644 --- a/content/blog/abstractdef.md +++ b/content/blog/abstractdef.md @@ -2,7 +2,7 @@ title: "Useful Abstract Definitions" date: 2019-10-27T23:49:57-04:00 draft: false -tags: [ "abstract algebra" ] +tags: [ "Math" ] math: true --- diff --git a/content/blog/albuquerque.md b/content/blog/albuquerque.md index 57ca1c2..d8a288d 100644 --- a/content/blog/albuquerque.md +++ b/content/blog/albuquerque.md @@ -6,6 +6,7 @@ author: Brandon Rozek layout: revision guid: https://brandonrozek.com/2017/07/2227-revision-v1/ permalink: /2017/07/2227-revision-v1/ +tags: ["Statistics"] --- ### Introduction diff --git a/content/blog/algorithmiclatex.md b/content/blog/algorithmiclatex.md index 8e4cc41..f62e57f 100644 --- a/content/blog/algorithmiclatex.md +++ b/content/blog/algorithmiclatex.md @@ -2,7 +2,7 @@ title: "Algorithms in LaTex" date: 2020-05-14T21:31:28-04:00 draft: false -tags: [] +tags: ["LaTex"] --- 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: diff --git a/content/blog/antenna-basics.md b/content/blog/antenna-basics.md index 0841381..b1040cf 100644 --- a/content/blog/antenna-basics.md +++ b/content/blog/antenna-basics.md @@ -2,7 +2,7 @@ title: "Antenna Basics" date: 2021-07-25T10:43:11-04:00 draft: false -tags: [] +tags: ["Amateur Radio"] math: false --- 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. diff --git a/content/blog/appimage.md b/content/blog/appimage.md index 2fdac81..67c6f1c 100644 --- a/content/blog/appimage.md +++ b/content/blog/appimage.md @@ -2,7 +2,7 @@ title: "Deploying Binaries to other Linux Distros using Appimage" date: 2020-10-19T21:53:52-04:00 draft: false -tags: [] +tags: ["Packaging"] --- 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. diff --git a/content/blog/appsusinginternet.md b/content/blog/appsusinginternet.md index add2376..b0881f6 100644 --- a/content/blog/appsusinginternet.md +++ b/content/blog/appsusinginternet.md @@ -2,7 +2,7 @@ title: "Show Applications using the Internet" date: 2020-05-09T11:30:36-04:00 draft: false -tags: [] +tags: ["Linux"] --- 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. diff --git a/content/blog/archivingsites.md b/content/blog/archivingsites.md index 4e9e47f..3387460 100644 --- a/content/blog/archivingsites.md +++ b/content/blog/archivingsites.md @@ -2,7 +2,7 @@ title: "Archiving Sites" date: 2019-08-02T22:42:16-04:00 draft: false -tags: [ "archive" ] +tags: [ "Archive" ] --- 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. diff --git a/content/blog/aspell.md b/content/blog/aspell.md index e21ae22..c42c281 100644 --- a/content/blog/aspell.md +++ b/content/blog/aspell.md @@ -2,7 +2,7 @@ title: "aspell" date: 2019-12-10T22:20:48-05:00 draft: false -tags: [ "linux" ] +tags: [ "Linux" ] --- 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! diff --git a/content/blog/asynccallbacks.md b/content/blog/asynccallbacks.md index d027c0d..32b1560 100644 --- a/content/blog/asynccallbacks.md +++ b/content/blog/asynccallbacks.md @@ -2,7 +2,7 @@ title: "Quick Python: Async Callbacks" date: 2020-07-11T20:23:29-04:00 draft: false -tags: ["python"] +tags: ["Python"] --- I've written a post on using [callbacks in Python](https://brandonrozek.com/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: diff --git a/content/blog/audioreplace.md b/content/blog/audioreplace.md index 0668267..638e33f 100644 --- a/content/blog/audioreplace.md +++ b/content/blog/audioreplace.md @@ -2,7 +2,7 @@ title: "Replace Audio in Video" date: 2020-04-20T20:32:26-04:00 draft: false -tags: [] +tags: ["Audio-Video"] --- 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. diff --git a/content/blog/autodeploydockerapps.md b/content/blog/autodeploydockerapps.md index 9bdcc5e..02b4a3f 100644 --- a/content/blog/autodeploydockerapps.md +++ b/content/blog/autodeploydockerapps.md @@ -2,7 +2,7 @@ title: "Auto-Deploy Docker Applications" date: 2020-05-09T10:20:34-04:00 draft: false -tags: [] +tags: ["Containers"] --- This post will combine that last three posts on [Packer](https://brandonrozek.com/blog/snapshotswithpacker/), [Terraform](https://brandonrozek.com/blog/autodeployterraform/), and their [configuration](https://brandonrozek.com/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). diff --git a/content/blog/autopurgedocker.md b/content/blog/autopurgedocker.md index 4795d8f..d98fc48 100644 --- a/content/blog/autopurgedocker.md +++ b/content/blog/autopurgedocker.md @@ -2,7 +2,7 @@ title: "Auto Purge Old Docker Images" date: 2020-09-28T23:30:22-04:00 draft: false -tags: [] +tags: ["Containers"] --- 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. diff --git a/content/blog/autostartdesktopapps.md b/content/blog/autostartdesktopapps.md index efdcb24..b9d6bb1 100644 --- a/content/blog/autostartdesktopapps.md +++ b/content/blog/autostartdesktopapps.md @@ -2,7 +2,7 @@ title: "Autostart Desktop Applications" date: 2020-11-29T13:45:28-05:00 draft: false -tags: [] +tags: ["Linux"] --- 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. diff --git a/content/blog/bandwidthlimitingapps.md b/content/blog/bandwidthlimitingapps.md index ed5e169..5ca4901 100644 --- a/content/blog/bandwidthlimitingapps.md +++ b/content/blog/bandwidthlimitingapps.md @@ -2,7 +2,7 @@ title: "Bandwidth Limiting Applications" date: 2020-10-22T21:51:27-04:00 draft: false -tags: [] +tags: ["Linux"] --- 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. diff --git a/content/blog/bashflags.md b/content/blog/bashflags.md index be10d61..d5ba0eb 100644 --- a/content/blog/bashflags.md +++ b/content/blog/bashflags.md @@ -2,7 +2,7 @@ title: "Bash Flags" date: 2019-08-06T16:55:47-04:00 draft: false -tags: [ "linux", "bash" ] +tags: [ "Bash" ] --- 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. diff --git a/content/blog/bashpartialargparse.md b/content/blog/bashpartialargparse.md index 79cfc9c..7d471f1 100644 --- a/content/blog/bashpartialargparse.md +++ b/content/blog/bashpartialargparse.md @@ -2,7 +2,7 @@ title: "Partial Argument Parse and Passing in Bash" date: 2020-09-07T21:33:26-04:00 draft: false -tags: [] +tags: ["Bash"] --- 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. diff --git a/content/blog/bashprocesses.md b/content/blog/bashprocesses.md index d647e47..9574e15 100644 --- a/content/blog/bashprocesses.md +++ b/content/blog/bashprocesses.md @@ -2,7 +2,7 @@ title: "Handling Background Processes in Bash" date: 2019-06-17T19:50:30-04:00 draft: false -tags: [ "linux", "bash" ] +tags: [ "Bash" ] --- 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`. diff --git a/content/blog/bashtcpudp.md b/content/blog/bashtcpudp.md index dcb58ba..4f29ee6 100644 --- a/content/blog/bashtcpudp.md +++ b/content/blog/bashtcpudp.md @@ -2,7 +2,7 @@ title: "TCP/UDP with Bash" date: 2020-05-25T23:10:15-04:00 draft: false -tags: ["bash"] +tags: ["Bash", "Networking"] --- The bash shell contains pseudo-devices to send packets with TCP/UDP. The pseudo files are formatted like the following: diff --git a/content/blog/bashvalidateip.md b/content/blog/bashvalidateip.md index cd42c17..483eeb0 100644 --- a/content/blog/bashvalidateip.md +++ b/content/blog/bashvalidateip.md @@ -2,7 +2,7 @@ title: "Quick Bash: Validate IP Address" date: 2020-12-19T20:15:24-05:00 draft: false -tags: ["bash"] +tags: ["Bash", "Networking"] --- `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? diff --git a/content/blog/bat.md b/content/blog/bat.md index f4ed0d2..6b4c1b9 100644 --- a/content/blog/bat.md +++ b/content/blog/bat.md @@ -2,7 +2,7 @@ title: "Bat: The user friendly cat" date: 2020-02-01T06:26:18-05:00 draft: false -tags: [ "linux" ] +tags: [ "Linux" ] --- `bat` is a more human pleasing replacement of `cat` with the following features: diff --git a/content/blog/bdaymusic.md b/content/blog/bdaymusic.md index b4ac84c..e4adac1 100644 --- a/content/blog/bdaymusic.md +++ b/content/blog/bdaymusic.md @@ -2,7 +2,7 @@ title: "Birthday Music" date: 2020-03-29T13:23:01-04:00 draft: false -tags: ["music"] +tags: ["Music"] --- 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/). diff --git a/content/blog/checkinstall.md b/content/blog/checkinstall.md index b89e425..d120b58 100644 --- a/content/blog/checkinstall.md +++ b/content/blog/checkinstall.md @@ -2,7 +2,7 @@ title: "Checkinstall" date: 2020-04-26T12:11:30-04:00 draft: false -tags: ["packaging", "linux"] +tags: ["Packaging", "Linux"] --- 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. diff --git a/content/blog/chirp.md b/content/blog/chirp.md index 998f4ca..e3ab900 100644 --- a/content/blog/chirp.md +++ b/content/blog/chirp.md @@ -2,7 +2,7 @@ title: "Chirp" date: 2019-09-27T22:46:52-04:00 draft: false -tags: [ "linux", "amateur radio" ] +tags: [ "Linux", "Amateur Radio" ] --- 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... diff --git a/content/blog/chrootvirtfilesystem.md b/content/blog/chrootvirtfilesystem.md index 9411c54..ca45cd9 100644 --- a/content/blog/chrootvirtfilesystem.md +++ b/content/blog/chrootvirtfilesystem.md @@ -2,7 +2,7 @@ title: "Chroot and Virtual Filesystems" date: 2020-11-29T10:52:07-05:00 draft: false -tags: [] +tags: ["Linux"] --- 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: diff --git a/content/blog/clearingsystemdlogs.md b/content/blog/clearingsystemdlogs.md index 945f2cf..ec8c364 100644 --- a/content/blog/clearingsystemdlogs.md +++ b/content/blog/clearingsystemdlogs.md @@ -2,7 +2,7 @@ title: "Clearing Systemd Logs" date: 2021-02-21T16:08:51-05:00 draft: false -tags: [] +tags: ["Linux"] --- 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. diff --git a/content/blog/colormanipulation.md b/content/blog/colormanipulation.md index 731c1c2..9e658ef 100644 --- a/content/blog/colormanipulation.md +++ b/content/blog/colormanipulation.md @@ -2,6 +2,7 @@ title: "Color Manipulation with Sass" date: 2019-05-21T23:10:06-04:00 draft: false +tags: ["Web", "CSS"] --- 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. diff --git a/content/blog/composesystemd.md b/content/blog/composesystemd.md index 6c09dff..541ba62 100644 --- a/content/blog/composesystemd.md +++ b/content/blog/composesystemd.md @@ -2,7 +2,7 @@ title: "Ensuring Docker Compose Startup with Systemd" date: 2019-12-16T20:57:36-05:00 draft: false -tags: [ "linux", "containers" ] +tags: [ "Linux", "Containers" ] --- I've been having trouble getting some docker containers such as `nginx` to start automatically on bootup, even with the `restart: always` flag. diff --git a/content/blog/copydecorator.md b/content/blog/copydecorator.md index 88710e0..e3632c5 100644 --- a/content/blog/copydecorator.md +++ b/content/blog/copydecorator.md @@ -2,7 +2,7 @@ title: "Quick Python: Copy Decorator" date: 2020-04-08T18:49:54-04:00 draft: false -tags: ["python"] +tags: ["Python"] --- 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. diff --git a/content/blog/copytoram.md b/content/blog/copytoram.md index 0e3ba3b..cc86752 100644 --- a/content/blog/copytoram.md +++ b/content/blog/copytoram.md @@ -2,7 +2,7 @@ title: "Copy to RAM Please" date: 2019-08-02T22:37:12-04:00 draft: false -tags: [ "linux" ] +tags: [ "Linux" ] --- 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. diff --git a/content/blog/coqgroups.md b/content/blog/coqgroups.md index 8ba48dc..502a35e 100644 --- a/content/blog/coqgroups.md +++ b/content/blog/coqgroups.md @@ -2,5 +2,6 @@ title: "Group Theory in Coq" date: 2019-05-21T22:17:00-04:00 draft: true +tags: ["Math", "Formal Methods"] --- diff --git a/content/blog/coredns.md b/content/blog/coredns.md index 2f77dcc..06cd5b4 100644 --- a/content/blog/coredns.md +++ b/content/blog/coredns.md @@ -2,7 +2,7 @@ title: "coredns" date: 2019-12-13T02:00:29-05:00 draft: false -tags: [ "linux", "network", "containers" ] +tags: [ "Linux", "Networking", "Containers" ] --- 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`. diff --git a/content/blog/cryptogames.md b/content/blog/cryptogames.md index 00120a9..93f514e 100644 --- a/content/blog/cryptogames.md +++ b/content/blog/cryptogames.md @@ -3,6 +3,7 @@ title: "Cryptographic Games" date: 2020-01-13T21:35:09-05:00 draft: false math: true +tags: ["Security"] --- 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. diff --git a/content/blog/ctf.md b/content/blog/ctf.md index d2d5420..a5caa3f 100644 --- a/content/blog/ctf.md +++ b/content/blog/ctf.md @@ -2,6 +2,7 @@ title: "Capture The Flag" date: 2019-05-22T21:25:22-04:00 draft: false +tags: ["Security"] --- 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. diff --git a/content/blog/custom-python-repl.md b/content/blog/custom-python-repl.md index 0419a28..159f166 100644 --- a/content/blog/custom-python-repl.md +++ b/content/blog/custom-python-repl.md @@ -2,7 +2,7 @@ title: "Custom Python REPL" date: 2019-10-27T23:43:12-04:00 draft: false -tags: [ "python" ] +tags: [ "Python" ] --- Are you tired of importing the same libraries and setting up the same variables? Why not just create your own custom REPL? Now of course, we're not going to do it from scratch, but instead utilize what Python already gives us. diff --git a/content/blog/custom-system-fonts.md b/content/blog/custom-system-fonts.md index 51bfe84..f59fdbb 100644 --- a/content/blog/custom-system-fonts.md +++ b/content/blog/custom-system-fonts.md @@ -4,6 +4,7 @@ date: 2019-05-27T12:15:25-04:00 draft: false aliases: - /blog/adding-fonts +tags: ['Ubuntu', 'Linux'] --- **Warning: This blog post partially applies to Ubuntu-based operating systems** diff --git a/content/blog/customexec.md b/content/blog/customexec.md index 3e978ec..b5c327d 100644 --- a/content/blog/customexec.md +++ b/content/blog/customexec.md @@ -2,7 +2,7 @@ title: "Custom Executables" date: 2020-02-03T20:10:34-05:00 draft: false -tags: [ "linux" ] +tags: [ "Linux" ] --- 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. diff --git a/content/blog/customudev.md b/content/blog/customudev.md index 52a37a1..1a7bb11 100644 --- a/content/blog/customudev.md +++ b/content/blog/customudev.md @@ -2,7 +2,7 @@ title: "Custom Device Paths with UDEV rules" date: 2020-11-10T20:58:37-05:00 draft: false -tags: [] +tags: ["Linux"] --- I wanted to create a rule so that when I plug in my rtlsdr, a symlink to the device will appear in `/dev/rtlsdr`. diff --git a/content/blog/dbcli.md b/content/blog/dbcli.md index 59f3f21..9e1c807 100644 --- a/content/blog/dbcli.md +++ b/content/blog/dbcli.md @@ -2,7 +2,7 @@ title: "Dbcli" date: 2020-02-29T18:45:51-05:00 draft: false -tags: ["python", "database"] +tags: ["Python", "DB"] --- 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. diff --git a/content/blog/ddforiso.md b/content/blog/ddforiso.md index 3441fcf..45ccf5c 100644 --- a/content/blog/ddforiso.md +++ b/content/blog/ddforiso.md @@ -2,7 +2,7 @@ title: "Burning ISOs with dd/pv" date: 2020-01-20T10:23:20-05:00 draft: false -tags: [ "linux" ] +tags: [ "Linux" ] --- 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. diff --git a/content/blog/detectpythonversion.md b/content/blog/detectpythonversion.md index d1ce80b..0c841a0 100644 --- a/content/blog/detectpythonversion.md +++ b/content/blog/detectpythonversion.md @@ -2,7 +2,7 @@ title: "Detect Python Version" date: 2021-03-15T18:09:38-04:00 draft: false -tags: [] +tags: ["Python"] --- 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. diff --git a/content/blog/diceware.md b/content/blog/diceware.md index 61ba84d..2b23ca8 100644 --- a/content/blog/diceware.md +++ b/content/blog/diceware.md @@ -2,7 +2,7 @@ title: "Diceware" date: 2020-05-01T00:22:31-04:00 draft: false -tags: [] +tags: ["Security"] --- 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. diff --git a/content/blog/digialmodes.md b/content/blog/digialmodes.md index f5a90fa..8aa1d4d 100644 --- a/content/blog/digialmodes.md +++ b/content/blog/digialmodes.md @@ -2,7 +2,7 @@ title: "Getting started with Digital Modes in Linux" date: 2019-09-04T09:52:21-04:00 draft: false -tags: [ "amateur radio" ] +tags: [ "Amateur Radio" ] --- 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. diff --git a/content/blog/discgolfpymc.md b/content/blog/discgolfpymc.md index eb638cd..836ae2d 100644 --- a/content/blog/discgolfpymc.md +++ b/content/blog/discgolfpymc.md @@ -2,7 +2,7 @@ title: "Disc Golf and PyMC3" date: 2020-03-28T22:08:19-04:00 draft: false -tags: ["python", "stats"] +tags: ["Python", "Statistics"] math: true --- diff --git a/content/blog/discoveringhamradio.md b/content/blog/discoveringhamradio.md index 46ba8e3..4391e88 100644 --- a/content/blog/discoveringhamradio.md +++ b/content/blog/discoveringhamradio.md @@ -2,7 +2,7 @@ title: "Discovering Ham Radio" date: 2019-07-01T22:06:23-04:00 draft: false -tags: [ "amateur radio" ] +tags: [ "Amateur Radio" ] --- 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). diff --git a/content/blog/docker-image-bash.md b/content/blog/docker-image-bash.md index 8dd949d..eb217ce 100644 --- a/content/blog/docker-image-bash.md +++ b/content/blog/docker-image-bash.md @@ -2,7 +2,7 @@ title: "Advanced Docker Image Construction with Bash" date: 2019-12-26T21:01:37-05:00 draft: false -tags: [ "linux", "containers", "bash" ] +tags: [ "Linux", "Containers" ] --- 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. diff --git a/content/blog/dockermacvlan.md b/content/blog/dockermacvlan.md index 46a1e8a..c54b466 100644 --- a/content/blog/dockermacvlan.md +++ b/content/blog/dockermacvlan.md @@ -2,7 +2,7 @@ title: "Docker Macvlan Networks" date: 2020-05-26T01:01:43-04:00 draft: false -tags: ["containers"] +tags: ["Containers"] --- 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 diff --git a/content/blog/espeak.md b/content/blog/espeak.md index 3e6fb5f..a2f4bb8 100644 --- a/content/blog/espeak.md +++ b/content/blog/espeak.md @@ -2,7 +2,7 @@ title: "Espeak" date: 2020-03-01T10:33:33-05:00 draft: false -tags: [ "linux" ] +tags: [ "Linux" ] --- `espeak` is a command line tool that lets you type in messages and have it said back to you. diff --git a/content/blog/exportpydecorator.md b/content/blog/exportpydecorator.md index 127aecb..854ece2 100644 --- a/content/blog/exportpydecorator.md +++ b/content/blog/exportpydecorator.md @@ -2,7 +2,7 @@ title: "Quick Python: Export Decorator" date: 2020-06-14T22:15:38-04:00 draft: false -tags: [] +tags: ["Python"] --- 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__`](https://brandonrozek.com/blog/pythonall/). diff --git a/content/blog/externalmediaformats.md b/content/blog/externalmediaformats.md index 5ae24d0..8621f76 100644 --- a/content/blog/externalmediaformats.md +++ b/content/blog/externalmediaformats.md @@ -2,7 +2,7 @@ title: "External Media Formats" date: 2019-05-22T22:03:38-04:00 draft: false -tags: [ "storage" ] +tags: [ "Storage" ] --- 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: diff --git a/content/blog/extract.md b/content/blog/extract.md index 8eb8c98..24390b6 100644 --- a/content/blog/extract.md +++ b/content/blog/extract.md @@ -2,7 +2,7 @@ title: "Extract All the Things" date: 2020-06-14T22:23:37-04:00 draft: false -tags: [] +tags: ["Linux"] --- [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. diff --git a/content/blog/fakewebcam.md b/content/blog/fakewebcam.md index 01a712f..90a33e1 100644 --- a/content/blog/fakewebcam.md +++ b/content/blog/fakewebcam.md @@ -2,7 +2,7 @@ title: "V4l2 Webcam" date: 2020-05-25T23:49:08-04:00 draft: false -tags: [] +tags: ["Audio-Video"] --- In Linux you can create a fake webcam by making use of the `v4l2loopback` kernel module. diff --git a/content/blog/fmdigitalmodes.md b/content/blog/fmdigitalmodes.md index 1e71954..9d1c3e5 100644 --- a/content/blog/fmdigitalmodes.md +++ b/content/blog/fmdigitalmodes.md @@ -2,7 +2,7 @@ title: "Getting Started with FM Digital Modes" date: 2020-11-07T21:31:52-05:00 draft: false -tags: ["amateur radio"] +tags: ["Amateur Radio"] --- 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. diff --git a/content/blog/fmradiotuner.md b/content/blog/fmradiotuner.md index 7c98576..c7f8ded 100644 --- a/content/blog/fmradiotuner.md +++ b/content/blog/fmradiotuner.md @@ -2,7 +2,7 @@ title: "FM Radio Tuner" date: 2019-05-21T22:08:54-04:00 draft: true -tags: [ "software defined radio" ] +tags: [ "Amateur Radio" ] --- I recently bought a [RTL-SDR Receiver](https://www.amazon.com/RTL-SDR-Blog-RTL2832U-Software-Telescopic/dp/B011HVUEME/ref=sr_1_3) off of Amazon to get started with [Software Defined Radio](https://en.wikipedia.org/wiki/Software-defined_radio). To start off, I thought that it would be great if I can write a fm receiver. diff --git a/content/blog/gevent.md b/content/blog/gevent.md index 80257b7..aeb97ed 100644 --- a/content/blog/gevent.md +++ b/content/blog/gevent.md @@ -2,7 +2,7 @@ title: "Gevent" date: 2020-04-09T17:22:52-04:00 draft: false -tags: ["python", "concurrency"] +tags: ["Python"] --- In my last post I spoke about [concurrency with asyncio](https://brandonrozek.com/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. diff --git a/content/blog/gitlens.md b/content/blog/gitlens.md index 3991a88..3263c9f 100644 --- a/content/blog/gitlens.md +++ b/content/blog/gitlens.md @@ -3,6 +3,7 @@ title: "Git Lens" date: 2019-10-27T23:38:45-04:00 draft: false +tags: ["Git"] --- Git Lens is a great Visual Studio code extension. It annotates the line your cursor is on with the commit it came from. Extreemely useful for determining the reason that line of code is written or even who wrote it. diff --git a/content/blog/gitlineendings.md b/content/blog/gitlineendings.md index e792e53..5dde8be 100644 --- a/content/blog/gitlineendings.md +++ b/content/blog/gitlineendings.md @@ -2,7 +2,7 @@ title: "Git Line Endings" date: 2020-05-09T11:01:21-04:00 draft: false -tags: ["git"] +tags: ["Git"] --- 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. diff --git a/content/blog/gpgagentasssh.md b/content/blog/gpgagentasssh.md index 141a3d4..d2714da 100644 --- a/content/blog/gpgagentasssh.md +++ b/content/blog/gpgagentasssh.md @@ -2,7 +2,7 @@ title: "GPG Agent as SSH Agent" date: 2020-06-14T22:33:01-04:00 draft: false -tags: [] +tags: ["SSH", "GPG"] --- GPG Agent has the ability to act as a SSH Agent. This allows the use of Authentication keys on Smartcards to be used with SSH as well. diff --git a/content/blog/gpgcard.md b/content/blog/gpgcard.md index db44b71..856baca 100644 --- a/content/blog/gpgcard.md +++ b/content/blog/gpgcard.md @@ -2,7 +2,7 @@ title: "GPG Card" date: 2020-06-05T17:39:51-04:00 draft: false -tags: [] +tags: ["GPG"] --- I have a Yubikey hardware token and one of my favorite use cases is the GPG support. This gives you the use cases of signing, encrypting, and authenticating all in one module. This post will describe quickly setting it up. diff --git a/content/blog/groupssimplified.md b/content/blog/groupssimplified.md index e02c700..8ca88f8 100644 --- a/content/blog/groupssimplified.md +++ b/content/blog/groupssimplified.md @@ -2,7 +2,7 @@ title: "Groups Simplified" date: 2019-12-10T21:40:00-05:00 draft: false -tags: [ "abstract algebra" ] +tags: [ "Math" ] math: true --- diff --git a/content/blog/gstreamer.md b/content/blog/gstreamer.md index c5589f0..c88c11a 100644 --- a/content/blog/gstreamer.md +++ b/content/blog/gstreamer.md @@ -2,7 +2,7 @@ title: "GStreamer" date: 2020-02-08T20:46:36-05:00 draft: false -tags: [ "linux" ] +tags: [ "Audio-Video" ] --- GStreamer is a pipeline based multimedia framework that goes from capture, processing, to a sink such as a X window or UDP sink. diff --git a/content/blog/haskellrealsequences.md b/content/blog/haskellrealsequences.md index a537d2a..4c6efef 100644 --- a/content/blog/haskellrealsequences.md +++ b/content/blog/haskellrealsequences.md @@ -3,6 +3,7 @@ title: "Real Analysis Sequences in Haskell" date: 2019-05-21T22:18:21-04:00 draft: false math: true +tags: ["Math", "Haskell"] --- In Real Analysis it is useful to look at terms of a sequence. One of the best ways I've found to do this is in believe it or not Haskell. This is mainly for these two reasons diff --git a/content/blog/internalca.md b/content/blog/internalca.md index 06b10ab..f611baa 100644 --- a/content/blog/internalca.md +++ b/content/blog/internalca.md @@ -2,7 +2,7 @@ title: "Quick CA for internal LAN" date: 2020-04-18T16:26:53-04:00 draft: false -tags: ["network"] +tags: ["Networking"] --- Setting up trusted HTTPs inside a network without exposure to the Internet requires creating a Certificate Authority. The audience for this post is oriented for people setting up services in a small low threat model environment. Additional cautions should be applied when setting this up for a business, for example working off an intermediate CA. diff --git a/content/blog/introrfpoweramp.md b/content/blog/introrfpoweramp.md index 4da123b..ba81f05 100644 --- a/content/blog/introrfpoweramp.md +++ b/content/blog/introrfpoweramp.md @@ -2,7 +2,7 @@ title: "Introduction to RF Power Amplifiers" date: 2021-04-10T13:01:00-04:00 draft: false -tags: ["amateur-radio"] +tags: ["Amateur Radio"] math: true --- diff --git a/content/blog/ipaddressesinpython.md b/content/blog/ipaddressesinpython.md index 328166a..249de37 100644 --- a/content/blog/ipaddressesinpython.md +++ b/content/blog/ipaddressesinpython.md @@ -2,7 +2,7 @@ title: "How to get list of IP Addresses in Python" date: 2020-09-07T20:03:24-04:00 draft: false -tags: ["python", "networking"] +tags: ["Python", "Networking"] --- [Elemag](https://stackoverflow.com/users/2436840/elemag) on gave a quick solution on StackOverflow on [how to determine IP addresses with multiple NICS](https://stackoverflow.com/questions/270745/how-do-i-determine-all-of-my-ip-addresses-when-i-have-multiple-nics). diff --git a/content/blog/iterativecsv.md b/content/blog/iterativecsv.md index a906b98..b4d125a 100644 --- a/content/blog/iterativecsv.md +++ b/content/blog/iterativecsv.md @@ -2,7 +2,7 @@ title: "Iteratively Read CSV" date: 2020-04-11T21:34:33-04:00 draft: false -tags: ["python"] +tags: ["Python"] --- If you want to analyze a CSV dataset that is larger than the space available in RAM, then you can iteratively process each observation and store/calculate only what you need. There is a way to do this in standard Python as well as the popular library Pandas. diff --git a/content/blog/jupyterwithpyenv.md b/content/blog/jupyterwithpyenv.md index 81f6f90..ff697af 100644 --- a/content/blog/jupyterwithpyenv.md +++ b/content/blog/jupyterwithpyenv.md @@ -2,7 +2,7 @@ title: "Jupyter with Pyenv" date: 2020-07-21T02:44:06-04:00 draft: false -tags: ["python"] +tags: ["Python"] --- I enjoy both managing my Python versions with [pyenv](https://brandonrozek.com/blog/pyenv/) and the literate programming environment [Jupyter lab](https://jupyter.org/). Luckily we can easily manage Python virtual environments via iPython kernels. diff --git a/content/blog/latexcode.md b/content/blog/latexcode.md index 81ce03a..433d981 100644 --- a/content/blog/latexcode.md +++ b/content/blog/latexcode.md @@ -2,7 +2,7 @@ title: "Code in LaTex" date: 2020-04-30T23:46:05-04:00 draft: false -tags: [] +tags: ["LaTex"] --- I am currently working on a paper in LaTex and wanted to include some source code in it. I didn't want to use the default `verbatim` environment since I wanted to include syntax highlighting as well. Luckily, the `listings` package is an easy and extensible way to include source code inside LaTex documents. To speak first of its extensibility, here is a subset of the arguments that it can possibly take: diff --git a/content/blog/leantactics.md b/content/blog/leantactics.md index c18cfda..05b988a 100644 --- a/content/blog/leantactics.md +++ b/content/blog/leantactics.md @@ -2,7 +2,7 @@ title: "Lean Theorem Prover Tactics" date: 2021-10-10T23:52:41-04:00 draft: false -tags: [] +tags: ["Formal Methods"] math: false --- diff --git a/content/blog/limitbandwidth.md b/content/blog/limitbandwidth.md index 662b626..7e90786 100644 --- a/content/blog/limitbandwidth.md +++ b/content/blog/limitbandwidth.md @@ -2,7 +2,7 @@ title: "Limit Bandwidth through Terminal" date: 2020-01-15T19:51:45-05:00 draft: false -tags: [ "linux", "network" ] +tags: [ "Linux", "Networking" ] --- Have you ever wondered how an application or a system would operate under low bandwidth environments? Luckily `wondershaper` is a tool to help with just that! diff --git a/content/blog/linuxdesktopicons.md b/content/blog/linuxdesktopicons.md index 1fd7e8e..e6c8936 100644 --- a/content/blog/linuxdesktopicons.md +++ b/content/blog/linuxdesktopicons.md @@ -2,7 +2,7 @@ title: "Linux Desktop Icons" date: 2019-06-03T21:05:37-04:00 draft: false -tags: [ "linux" ] +tags: [ "Linux" ] --- I get asked a decent number of times how to add desktop icons on Linux. Luckily it's incredibly easy. [It's a `freedesktop` standard](http://standards.freedesktop.org/desktop-entry-spec/latest/). diff --git a/content/blog/livedoc.md b/content/blog/livedoc.md index 9601a8e..a84cdef 100644 --- a/content/blog/livedoc.md +++ b/content/blog/livedoc.md @@ -2,6 +2,7 @@ title: "Live Documentation" date: 2019-09-27T23:07:19-04:00 draft: false +tags: ["Documentation"] --- This blog post is mostly for one of my teams in which I use Jupyter Notebooks for documentation. Perhaps after reading this post, you the reader can understand why it might be beneficial to use Jupyter Notebooks as a form of documentation. diff --git a/content/blog/lxdtmpfs.md b/content/blog/lxdtmpfs.md index 8acf349..e0e2888 100644 --- a/content/blog/lxdtmpfs.md +++ b/content/blog/lxdtmpfs.md @@ -2,7 +2,7 @@ title: "LXD on tmpfs" date: 2019-12-31T22:35:21-05:00 draft: false -tags: [ "linux", "storage", "containers" ] +tags: [ "Linux", "Storage", "Containers" ] --- Container images are designed to be as small as possible. Wouldn't it be cool if we can hold entire containers in RAM? This post outlines how to accomplish this using LXD. It turns out that it is a lot easier to setup custom storage pools on LXD than with Docker. diff --git a/content/blog/male-vs-female-life-expectancy.md b/content/blog/male-vs-female-life-expectancy.md index 0bae46c..2755d5a 100644 --- a/content/blog/male-vs-female-life-expectancy.md +++ b/content/blog/male-vs-female-life-expectancy.md @@ -6,6 +6,7 @@ author: rozek_admin layout: revision guid: https://brandonrozek.com/2017/03/2052-revision-v1/ permalink: /2017/03/2052-revision-v1/ +tags: ["Statistics"] --- ![](https://brandonrozek.com/wp-content/uploads/2017/03/LifeExpectancyBoxplot.png) diff --git a/content/blog/managepythonapps.md b/content/blog/managepythonapps.md index a5e3034..5629c07 100644 --- a/content/blog/managepythonapps.md +++ b/content/blog/managepythonapps.md @@ -2,7 +2,7 @@ title: "Manage Python Applications" date: 2020-10-11T19:21:10-04:00 draft: false -tags: [] +tags: ["Python"] --- I've recently discovered an application called [`pipx`](https://pipxproject.github.io/pipx/) which allows one to install and run Python applications in isolated environments. I think of it as a package similar to `apt`, but keeps the packages nice and isolated from one another. diff --git a/content/blog/mergerfs.md b/content/blog/mergerfs.md index 5e31594..9d9fb0d 100644 --- a/content/blog/mergerfs.md +++ b/content/blog/mergerfs.md @@ -2,7 +2,7 @@ title: "MergerFS" date: 2020-01-14T23:10:17-05:00 draft: false -tags: [ "linux", "storage" ] +tags: [ "Linux", "Storage" ] --- [MergerFS](https://github.com/trapexit/mergerfs) is a great filesystem for an expandable storage system in a homelab. Mostly since it allows you to add disks one at a time without having to, for example, resilver a ZFS pool. MergerFS won't be as efficient as a filesystem that stripes your data across disks, but in the case of a disk failure the disks unaffected will still have part of the data. diff --git a/content/blog/mirrordownload.md b/content/blog/mirrordownload.md index 3e1416a..a9d750f 100644 --- a/content/blog/mirrordownload.md +++ b/content/blog/mirrordownload.md @@ -2,7 +2,7 @@ title: "Mirror Download with wget" date: 2020-01-20T21:18:12-05:00 draft: false -tags: [ "linux", "archive" ] +tags: [ "Linux", "Archive" ] --- This post will describe downloading a `centos` repo using `wget`. Though the ideas in this blog post can apply to any mirror with packages exposed via http. diff --git a/content/blog/mirrorhugosite.md b/content/blog/mirrorhugosite.md index 7ab9791..3bbdb00 100644 --- a/content/blog/mirrorhugosite.md +++ b/content/blog/mirrorhugosite.md @@ -2,7 +2,7 @@ title: "Mirror a Hugo Site" date: 2020-12-07T22:41:17-05:00 draft: false -tags: [] +tags: ["Archive"] --- I'm a big proponent of having offline copies of content. Especially when I'm on travel and don't have easy Internet access. Using the built in hugo webserver and a reverse proxy, I will show how we can host a local mirror of a Hugo site. diff --git a/content/blog/mirroringwithgitea.md b/content/blog/mirroringwithgitea.md index 58184df..87d0018 100644 --- a/content/blog/mirroringwithgitea.md +++ b/content/blog/mirroringwithgitea.md @@ -2,7 +2,7 @@ title: "Mirroring with Gitea" date: 2020-12-07T23:46:21-05:00 draft: false -tags: [] +tags: ["Archive"] --- Sites like Github, Gitlab, and BitBucket have nice UIs that make looking at commit diffs and issue tracking easier. However, this requires an internet connection. What if we can mirror the content from these sites locally? Gitea comes to the rescue! diff --git a/content/blog/missingdata.md b/content/blog/missingdata.md index afb020b..a1575cc 100644 --- a/content/blog/missingdata.md +++ b/content/blog/missingdata.md @@ -2,6 +2,7 @@ title: "Considerations with Missing Data" date: 2019-05-22T23:18:45-04:00 draft: true +tags: ["Statistics"] --- Write something about "Missing Completely at Random" (MCAR) and maybe talk about a couple R packages for visualizing this.. diff --git a/content/blog/missinglibraries.md b/content/blog/missinglibraries.md index 76e7414..10d1f8c 100644 --- a/content/blog/missinglibraries.md +++ b/content/blog/missinglibraries.md @@ -2,7 +2,7 @@ title: "Missing Libraries" date: 2020-02-08T20:42:50-05:00 draft: false -tags: [ "linux" ] +tags: [ "Linux" ] --- The piwheels blog outlined a great [post](https://blog.piwheels.org/how-to-work-out-the-missing-dependencies-for-a-python-package/) on what to do when you are missing shared libraries in Python packages. Though the short of this tip is helpful on its own as well. If you are running any piece of software and its missing a library, try to find the `.so` file related to that package. diff --git a/content/blog/multicastreceivescript.md b/content/blog/multicastreceivescript.md index b63b648..b6abb09 100644 --- a/content/blog/multicastreceivescript.md +++ b/content/blog/multicastreceivescript.md @@ -2,7 +2,7 @@ title: "Multicast Receive Script" date: 2020-11-18T10:09:15-05:00 draft: false -tags: [] +tags: ["Linux", "Networking"] --- I use `socat` to debug mutlicast traffic, though the syntax for it is complicated to learn. Here is the command that I normally use to debug multicast traffic. diff --git a/content/blog/networkthroughput.md b/content/blog/networkthroughput.md index 0d4d8a6..a7a4a50 100644 --- a/content/blog/networkthroughput.md +++ b/content/blog/networkthroughput.md @@ -2,7 +2,7 @@ title: "Network Throughput Testing" date: 2019-08-30T20:11:26-04:00 draft: false -tags: [ "linux", "network" ] +tags: [ "Linux", "Networking" ] --- I ended up upgrading the wiring in my place to CAT7 recently and I wanted to see if there was a noticeable performance difference to my previous cabling. This blog post won't be a product comparison, but instead I'll show how you can do network throughput testing at your own location. diff --git a/content/blog/notimplemented.md b/content/blog/notimplemented.md index 5d3a534..bfed1cf 100644 --- a/content/blog/notimplemented.md +++ b/content/blog/notimplemented.md @@ -2,7 +2,7 @@ title: "NotImplemented" date: 2019-10-27T23:35:17-04:00 draft: false -tags: [ "python" ] +tags: [ "Python" ] --- Let's say you overwrite the `__mul__` operator in a class in Python, but you don't want the function to be called for all kinds of input. You can specify the type by just returning `NotImplemented` for types you don't want. diff --git a/content/blog/obswebcam.md b/content/blog/obswebcam.md index c5d698d..cdf3037 100644 --- a/content/blog/obswebcam.md +++ b/content/blog/obswebcam.md @@ -2,7 +2,7 @@ title: "OBS Webcam" date: 2020-05-25T23:53:56-04:00 draft: false -tags: [] +tags: ["Audio-Video"] --- [Open Broadcaster Software](https://obsproject.com/) is a great piece of software for recording and live streaming different video content. It would be nice to use the same level of professional software in video calling software as well. diff --git a/content/blog/offlinepip.md b/content/blog/offlinepip.md index abd652a..92f2622 100644 --- a/content/blog/offlinepip.md +++ b/content/blog/offlinepip.md @@ -2,7 +2,7 @@ title: "Offline Pip Packages" date: 2020-01-20T23:11:05-05:00 draft: false -tags: [ "python", "archive" ] +tags: [ "Python", "Archive" ] --- There are a few reasons I can think of to have offline pip packages: diff --git a/content/blog/ohmyzsh.md b/content/blog/ohmyzsh.md index 4453702..6ec8884 100644 --- a/content/blog/ohmyzsh.md +++ b/content/blog/ohmyzsh.md @@ -2,7 +2,7 @@ title: "Oh My Zsh" date: 2019-07-21T08:45:03-04:00 draft: false -tags: [ "linux" ] +tags: [ "Linux" ] --- Zsh is an extension of the sh that contains a lot more features than the default bash shell installed on most systems. diff --git a/content/blog/openvpncontainer.md b/content/blog/openvpncontainer.md index 7f60003..44d55ad 100644 --- a/content/blog/openvpncontainer.md +++ b/content/blog/openvpncontainer.md @@ -2,7 +2,7 @@ title: "OpenVPN Container" date: 2020-04-30T23:20:49-04:00 draft: false -tags: ["containers"] +tags: ["Containers"] --- Instead of configuring multiple containers to use a VPN, we can setup a VPN container and route the other containers traffic through this container. This post will outline how to do that with [dperson's OpenVPN Container](https://github.com/dperson/openvpn-client). diff --git a/content/blog/piholedhcpdns.md b/content/blog/piholedhcpdns.md index 744c18c..01e5a32 100644 --- a/content/blog/piholedhcpdns.md +++ b/content/blog/piholedhcpdns.md @@ -2,7 +2,7 @@ title: "Configuring DHCP DNS in Pihole" date: 2020-05-25T23:36:51-04:00 draft: false -tags: ["network"] +tags: ["Networking"] --- There are two scenarios I can imagine in where you want to configure the DNS set by PiHole diff --git a/content/blog/pingdiscovery.md b/content/blog/pingdiscovery.md index 8f05f55..4e62ead 100644 --- a/content/blog/pingdiscovery.md +++ b/content/blog/pingdiscovery.md @@ -2,7 +2,7 @@ title: "Ping Discovery" date: 2020-02-02T22:21:30-05:00 draft: false -tags: [ "linux", "network" ] +tags: [ "Linux", "Networking" ] --- Plugging in a device into a network with DHCP will often result in you not knowing what the ip is. If you don't have easy access to the DHCP server, then one way to see what ip addresses are on the network is to do a ping scan. diff --git a/content/blog/pipconf.md b/content/blog/pipconf.md index fa64914..2ac63b3 100644 --- a/content/blog/pipconf.md +++ b/content/blog/pipconf.md @@ -2,7 +2,7 @@ title: "Pip Config" date: 2020-04-10T11:56:19-04:00 draft: false -tags: ["python"] +tags: ["Python"] --- If you find yourself added flags to every pip command, consider adding those flag's to a pip configuration file. diff --git a/content/blog/pipeditable.md b/content/blog/pipeditable.md index f87e903..2039c0b 100644 --- a/content/blog/pipeditable.md +++ b/content/blog/pipeditable.md @@ -2,7 +2,7 @@ title: "Pip Editable" date: 2020-04-11T20:38:33-04:00 draft: false -tags: ["python"] +tags: ["Python"] --- I've found it to be incredibly helpful to emulate having a library installed on my system rather than depending on my local directory path to pick up my file edits. To do this in a python project, we need to add the `--editable` flag to a pip install. diff --git a/content/blog/printdebug.md b/content/blog/printdebug.md index b293e95..61ae7ff 100644 --- a/content/blog/printdebug.md +++ b/content/blog/printdebug.md @@ -2,7 +2,7 @@ title: "Print Statements with Frame Information" date: 2021-06-03T13:54:39-04:00 draft: false -tags: [] +tags: ["Testing"] --- I find it extremely useful to include frame information such as filename, line number, and current function in my print statements. Here's a couple ways that I've done that in the past. diff --git a/content/blog/pulseaudiortp.md b/content/blog/pulseaudiortp.md index 544346f..f7de82e 100644 --- a/content/blog/pulseaudiortp.md +++ b/content/blog/pulseaudiortp.md @@ -2,7 +2,7 @@ title: "Streaming PulseAudio over RTP" date: 2020-11-23T23:41:41-05:00 draft: false -tags: [] +tags: ["Audio-Video"] --- With PulseAudio, we can send a RTP stream over multicast UDP. Here is the bash commands to setup a sink where anything sent to it gets broadcasted to the multicast address 224.0.0.56 at port 46416. diff --git a/content/blog/pyasyncio.md b/content/blog/pyasyncio.md index 1e2d8d8..97e69c3 100644 --- a/content/blog/pyasyncio.md +++ b/content/blog/pyasyncio.md @@ -2,7 +2,7 @@ title: "Python asyncio" date: 2020-04-09T16:37:41-04:00 draft: false -tags: ["python", "concurrency"] +tags: ["Python"] --- Daniel Pope wrote a [great blog post](http://mauveweb.co.uk/posts/2014/07/gevent-asynchronous-io-made-easy.html) describing the different ways of performing asynchronous I/O in Python. In this post, I want to focus on his section called "Generator-based Coroutine". Python's `asyncio` module in the standard library has a concept of "coroutines" that uses generators instead of callbacks or promises seen in other asynchronous frameworks. diff --git a/content/blog/pycacheprop.md b/content/blog/pycacheprop.md index 099e852..6fe0bd5 100644 --- a/content/blog/pycacheprop.md +++ b/content/blog/pycacheprop.md @@ -2,7 +2,7 @@ title: "Quick Python: Cached Property" date: 2020-04-18T18:29:21-04:00 draft: false -tags: ["python"] +tags: ["Python"] --- If you have a property in an object that only needs to be computed once, consider using `cached_property` to store the result and serve for future function calls. diff --git a/content/blog/pydataclass.md b/content/blog/pydataclass.md index 759cd96..7ac9545 100644 --- a/content/blog/pydataclass.md +++ b/content/blog/pydataclass.md @@ -2,7 +2,7 @@ title: "Quick Python: Dataclasses" date: 2020-04-08T18:59:48-04:00 draft: false -tags: ["python"] +tags: ["Python"] --- Python 3.7 and above have a feature called dataclasses. This allows us to reduce boilerplate code by removing the need to create a whole constructor and providing a sensible `__repr__` function. diff --git a/content/blog/pydecorators.md b/content/blog/pydecorators.md index 0d50a2a..e393c68 100644 --- a/content/blog/pydecorators.md +++ b/content/blog/pydecorators.md @@ -2,7 +2,7 @@ title: "Quick Python: Decorators" date: 2020-03-30T18:07:14-04:00 draft: false -tags: ["python"] +tags: ["Python"] --- [Geir Arne Hjelle](https://realpython.com/team/gahjelle/) at Real Python wrote a great post called [Primer on Python Decorators](https://realpython.com/primer-on-python-decorators/). I recommend reading that as this post serves mostly as a reminder to myself on how to write a decorator. diff --git a/content/blog/pyenv.md b/content/blog/pyenv.md index ea6b788..d48dcfd 100644 --- a/content/blog/pyenv.md +++ b/content/blog/pyenv.md @@ -2,7 +2,7 @@ title: "Managing Python Versions with Pyenv" date: 2020-01-20T09:55:04-05:00 draft: false -tags: [ "python" ] +tags: [ "Python" ] --- I wrote previously about [managing python virtual environments](https://brandonrozek.com/blog/virtualenv/). Since then, I've discovered a software called [Pyenv](https://github.com/pyenv/pyenv) which allows you to not only manage virtual environments but python versions. As someone who likes to develop python programs in his free time, I found this incredibly useful in keeping all my virtual environments in one place and easily upgrading to a more recent version of python. diff --git a/content/blog/pyenvbuildflags.md b/content/blog/pyenvbuildflags.md index aeb59ee..01f4e58 100644 --- a/content/blog/pyenvbuildflags.md +++ b/content/blog/pyenvbuildflags.md @@ -2,7 +2,7 @@ title: "Pyenv Build Flags" date: 2020-03-24T16:58:42-04:00 draft: false -tags: [] +tags: ["Python"] --- I ran into an issue with PyMC3 where it was expecting a certain symbol that Python wasn't compiled with. diff --git a/content/blog/pyenvtox.md b/content/blog/pyenvtox.md index 734a48b..29db90d 100644 --- a/content/blog/pyenvtox.md +++ b/content/blog/pyenvtox.md @@ -2,7 +2,7 @@ title: "Pyenv and Tox" date: 2020-02-21T19:06:40-05:00 draft: false -tags: [ "python", "testing" ] +tags: [ "Python", "Testing" ] --- Pyenv is great for managing multiple python installations and tox is great for creating virtual environments for testing. What if we can combine the two? For more detailed information visit [Frank-Mich's Blog](https://blog.frank-mich.com/recipe-testing-multiple-python-versions-with-pyenv-and-tox/). diff --git a/content/blog/pyextradeps.md b/content/blog/pyextradeps.md index b1ae28f..462e04b 100644 --- a/content/blog/pyextradeps.md +++ b/content/blog/pyextradeps.md @@ -2,7 +2,7 @@ title: "Python Packaging: Optional Dependencies" date: 2020-05-01T00:43:07-04:00 draft: false -tags: ["python"] +tags: ["Python"] --- It is possible to make different package group of optional dependencies for a Python package. This is useful if you want to include an extra set of dependencies for developers/maintainers of the package. We can also define a plugin-based package similarly to how [OpenAI Gym uses it](https://github.com/openai/gym/blob/67212547ac29296839434324a0d5996e48fae840/setup.py) to denote different categories of environments you can setup. diff --git a/content/blog/pyfutures.md b/content/blog/pyfutures.md index 4be316f..190ee8f 100644 --- a/content/blog/pyfutures.md +++ b/content/blog/pyfutures.md @@ -2,7 +2,7 @@ title: "Quick Python: Concurrent Futures" date: 2020-04-11T20:40:28-04:00 draft: false -tags: ["python", "concurrency"] +tags: ["Python"] --- Another way to perform concurrency in python is to use the `concurrent.futures` module. diff --git a/content/blog/pygetset.md b/content/blog/pygetset.md index 4479184..1bdbb57 100644 --- a/content/blog/pygetset.md +++ b/content/blog/pygetset.md @@ -2,7 +2,7 @@ title: "Quick Python: Getters and Setters" date: 2020-04-08T18:15:21-04:00 draft: false -tags: ["python"] +tags: ["Python"] --- One of the hidden gems in Python classes are seamless getters and setters. I discovered this through the book [Effective Python by Brett Slatkin](https://effectivepython.com/). Though the example I'll use is different and shorter than the one he uses in his book. diff --git a/content/blog/pyleniterables.md b/content/blog/pyleniterables.md index e8f11db..c2cbf78 100644 --- a/content/blog/pyleniterables.md +++ b/content/blog/pyleniterables.md @@ -2,7 +2,7 @@ title: "Quick Python: Length of Iterables" date: 2020-03-25T18:28:09-04:00 draft: false -tags: ["python"] +tags: ["Python"] --- I wanted to find the length of what I know is a finite iterable. Normally you would think of using the `len` function but it does not work in this case. [Al Hoo](https://stackoverflow.com/a/44351664) on StackOverflow shared a quick snippet to calculate this. diff --git a/content/blog/pymemoization.md b/content/blog/pymemoization.md index 417c0ae..d6a3cfa 100644 --- a/content/blog/pymemoization.md +++ b/content/blog/pymemoization.md @@ -2,7 +2,7 @@ title: "Quick Python: Memoization" date: 2020-03-30T17:31:55-04:00 draft: false -tags: ["python"] +tags: ["Python"] --- There is often a trade-off when it comes to efficiency of CPU vs memory usage. In this post, I will show how the [`lru_cache`](https://docs.python.org/3/library/functools.html#functools.lru_cache) decorator can cache results of a function call for quicker future lookup. diff --git a/content/blog/pysubscribepattern.md b/content/blog/pysubscribepattern.md index aba9b16..5baccc9 100644 --- a/content/blog/pysubscribepattern.md +++ b/content/blog/pysubscribepattern.md @@ -2,7 +2,7 @@ title: "Python Patterns: Subscribe" date: 2020-04-14T07:53:46-04:00 draft: false -tags: [] +tags: ["Python"] --- It is common for larger applications to have modules that publishes and subscribes to events. This post will outline a couple ways to achieve this using [decorators](https://brandonrozek.com/blog/pydecorators/) and standard methods. diff --git a/content/blog/pythonabstractclass.md b/content/blog/pythonabstractclass.md index 4741154..1fbfaab 100644 --- a/content/blog/pythonabstractclass.md +++ b/content/blog/pythonabstractclass.md @@ -2,7 +2,7 @@ title: "Quick Python: Abstract Classes" date: 2020-01-26T18:40:03-05:00 draft: false -tags: [ "python" ] +tags: [ "Python" ] --- You can create an abstract class in Python by inheriting Abstract Base Class (`ABC`) and declaring relevant methods abstract. diff --git a/content/blog/pythonall.md b/content/blog/pythonall.md index 6c7c8d7..5a451c3 100644 --- a/content/blog/pythonall.md +++ b/content/blog/pythonall.md @@ -2,7 +2,7 @@ title: "Quick Python: __all__" date: 2020-05-01T00:53:46-04:00 draft: false -tags: ["python"] +tags: ["Python"] --- Anything that is defined inside a package that is imported is also brought into that workspace. So for example, if package `A` uses `numpy` and you import `A`, then `A.numpy` will be shown in your workspace. In order to limit the variables exported, you can define the ones you want to be shown in a variable called `__all__`. diff --git a/content/blog/pythoninterrupts.md b/content/blog/pythoninterrupts.md index 9fa2b55..58c53bd 100644 --- a/content/blog/pythoninterrupts.md +++ b/content/blog/pythoninterrupts.md @@ -2,7 +2,7 @@ title: "Quick Python: Interrupts" date: 2020-01-25T09:51:34-05:00 draft: false -tags: [ "python" ] +tags: [ "Python" ] --- This post is part of a new series I'm starting where I quickly outline small Python snippets. diff --git a/content/blog/pythonoverloads.md b/content/blog/pythonoverloads.md index 7fc93a4..af038b7 100644 --- a/content/blog/pythonoverloads.md +++ b/content/blog/pythonoverloads.md @@ -2,7 +2,7 @@ title: "Python Operator Overloads" date: 2020-03-13T20:49:28-04:00 draft: false -tags: [] +tags: ["Python"] --- I wrote a [blog post about operator overloads](https://brandonrozek.com/blog/cppoverloads/) in C++. Luckily for Python it is heavily document in what is called the [Python Data Model](https://docs.python.org/3/reference/datamodel.html). Though for the sake of having content, I'll share some of the ones that I heavily use in my classes. diff --git a/content/blog/pythonpackagenamespacing.md b/content/blog/pythonpackagenamespacing.md index a4bfcd5..a06e222 100644 --- a/content/blog/pythonpackagenamespacing.md +++ b/content/blog/pythonpackagenamespacing.md @@ -2,7 +2,7 @@ title: "Quick Python: Package Namespacing" date: 2020-02-03T20:13:38-05:00 draft: false -tags: [ "python" ] +tags: [ "Python" ] --- Package namespacing can help organize modules within a larger project. It can also help show that a package belongs to an organization. diff --git a/content/blog/pythonpathhacks.md b/content/blog/pythonpathhacks.md index af9fbd4..6fdbc45 100644 --- a/content/blog/pythonpathhacks.md +++ b/content/blog/pythonpathhacks.md @@ -2,7 +2,7 @@ title: "Python Path Hacks" date: 2020-01-13T22:26:16-05:00 draft: false -tags: [ "python" ] +tags: [ "Python" ] --- There are two quick ways to hack together custom imports in Python. One is by using the `PYTHONPATH` environmental variable, and the other way is by using the `sys` module in Python. diff --git a/content/blog/pythonsetinterval.md b/content/blog/pythonsetinterval.md index 4fe0107..9203682 100644 --- a/content/blog/pythonsetinterval.md +++ b/content/blog/pythonsetinterval.md @@ -2,7 +2,7 @@ title: "Python: Set Interval" date: 2020-02-25T21:34:03-05:00 draft: false -tags: [ "python" ] +tags: [ "Python" ] --- Javascript has a function called `setInterval` which given a length of time $T$ and a callback function, it will perform that function every $T$ milliseconds. For example, to print "Hello, World!" every 5 seconds: diff --git a/content/blog/pythonsetupdevelop.md b/content/blog/pythonsetupdevelop.md index 5115dc8..c20b1df 100644 --- a/content/blog/pythonsetupdevelop.md +++ b/content/blog/pythonsetupdevelop.md @@ -2,7 +2,7 @@ title: "Python setup.py develop" date: 2020-02-21T22:42:55-05:00 draft: false -tags: [ "python" ] +tags: [ "Python" ] --- **Deprecated in favor of [pip install editable](https://brandonrozek.com/blog/pipeditable)** diff --git a/content/blog/pythonswig.md b/content/blog/pythonswig.md index 29e6cc8..21a0c55 100644 --- a/content/blog/pythonswig.md +++ b/content/blog/pythonswig.md @@ -2,7 +2,7 @@ title: "C++ within Python with SWIG" date: 2020-10-27T23:49:54-04:00 draft: false -tags: [] +tags: ["Python", "C++"] --- For performance reasons, it can be useful to write functions in C/C++ which can then be called within Python. This will be an introductory post, in where we will call a simple C++ function (with a dependency) within Python using [SWIG](http://swig.org/). diff --git a/content/blog/pythonsymmetricgroups.md b/content/blog/pythonsymmetricgroups.md index cfa93e9..67e42b6 100644 --- a/content/blog/pythonsymmetricgroups.md +++ b/content/blog/pythonsymmetricgroups.md @@ -2,7 +2,7 @@ title: "Symmetric Groups in Python" date: 2019-05-22T20:02:21-04:00 draft: false -tags: [ "abstract algebra" ] +tags: [ "Math", "Python" ] math: true --- diff --git a/content/blog/pythontyping.md b/content/blog/pythontyping.md index bce9e21..0feeab5 100644 --- a/content/blog/pythontyping.md +++ b/content/blog/pythontyping.md @@ -2,7 +2,7 @@ title: "Python Typing" date: 2019-10-28T00:12:34-04:00 draft: false -tags: [ "python" ] +tags: [ "Python" ] --- There's a typing module built right into Python that you can use on your applications. Sobolevn write a great [blog post](https://sobolevn.me/2019/01/simple-dependent-types-in-python) about it. One thing that threw me off at first is that if you add type annotations and then run python like you normally would, it would act as if the annotations weren't there. diff --git a/content/blog/pyunittest.md b/content/blog/pyunittest.md index 167965a..c47fc95 100644 --- a/content/blog/pyunittest.md +++ b/content/blog/pyunittest.md @@ -2,7 +2,7 @@ title: "Quick Python: Unit Testing" date: 2020-03-31T07:27:47-04:00 draft: false -tags: ["python"] +tags: ["Python", "Testing"] --- Python has a great built-in [unit test](https://docs.python.org/3.7/library/unittest.html) framework. This post will give a skeleton for how to format the files in your `tests` directory. diff --git a/content/blog/qtcpsocket.md b/content/blog/qtcpsocket.md index dff06a0..930cc3a 100644 --- a/content/blog/qtcpsocket.md +++ b/content/blog/qtcpsocket.md @@ -2,7 +2,7 @@ title: "QTcpSocket" date: 2020-03-20T16:21:07-04:00 draft: false -tags: ["C++", "Qt"] +tags: ["C++"] --- There are two ways that I can think of for checking if a TCP socket times out in Qt. You can either use `waitForConnected` or a `QTimer`. The Qt 5.14 documentation noted that the `waitForConnected` call may randomly fail in Windows. diff --git a/content/blog/qttimer.md b/content/blog/qttimer.md index 83c9abc..ab13753 100644 --- a/content/blog/qttimer.md +++ b/content/blog/qttimer.md @@ -2,7 +2,7 @@ title: "Qt Timers" date: 2020-03-19T17:30:04-04:00 draft: false -tags: ["Qt", "C++"] +tags: ["C++"] --- Qt has two great timers, one that repeats an action after a certain interval, and one that is meant for one-off operations. They call these `QTimer` and `QTimer::singleShot` respectively. This post is going to assume that we're working with a class named `Test` that inherits `QObject`. diff --git a/content/blog/quickbashargcount.md b/content/blog/quickbashargcount.md index 3342f52..3dfdc03 100644 --- a/content/blog/quickbashargcount.md +++ b/content/blog/quickbashargcount.md @@ -2,7 +2,7 @@ title: "Quick Bash: Check Argument Count" date: 2020-12-15T09:25:11-05:00 draft: false -tags: ["bash"] +tags: ["Bash"] --- I've been writing more bash scripts recently and I noticed that I often check for the number of arguments before validating them in my scripts. I'll share that small snippet here for my future self. diff --git a/content/blog/quickcgroups.md b/content/blog/quickcgroups.md index 6c5cc68..69073cf 100644 --- a/content/blog/quickcgroups.md +++ b/content/blog/quickcgroups.md @@ -2,7 +2,7 @@ title: "Quickly Creating CGroups to Limit CPU/Memory of Applications" date: 2020-10-22T22:32:56-04:00 draft: false -tags: [] +tags: ["Linux"] --- Running some data science algorithms can be CPU or memory intensive. To prevent the code from hogging system resources, we can use cgroups to set limits. This also is great for applications that you don't quite trust. diff --git a/content/blog/quickpythonhttp.md b/content/blog/quickpythonhttp.md index e23ae8f..041e7b3 100644 --- a/content/blog/quickpythonhttp.md +++ b/content/blog/quickpythonhttp.md @@ -2,7 +2,7 @@ title: "Quick Python: HTTP Server" date: 2020-04-18T17:15:09-04:00 draft: false -tags: [] +tags: ["Python"] --- You can use Python to quickly spin up a HTTP server. A common use case for me is to quickly transfer files to mobile devices in my internal network. diff --git a/content/blog/quickstoragesetup.md b/content/blog/quickstoragesetup.md index 06347d1..84a43fd 100644 --- a/content/blog/quickstoragesetup.md +++ b/content/blog/quickstoragesetup.md @@ -2,7 +2,7 @@ title: "Quickly Setting up a Storage Device" date: 2020-01-12T21:43:26-05:00 draft: false -tags: [ "linux", "storage" ] +tags: [ "Linux", "Storage" ] --- This post exists mostly to aid myself for when I buy new drives for my home server. It's a quick and easy way to create an ext4 filesystem over the entire drive. diff --git a/content/blog/recordoutputaudio.md b/content/blog/recordoutputaudio.md index d7e19ea..a239b1b 100644 --- a/content/blog/recordoutputaudio.md +++ b/content/blog/recordoutputaudio.md @@ -2,7 +2,7 @@ title: "Record Output Audio via Terminal" date: 2020-03-01T10:38:06-05:00 draft: false -tags: [ "linux", "audio" ] +tags: [ "Linux", "Audio-Video" ] --- This post is specific to `PulseAudio` on Linux. diff --git a/content/blog/recursivelisting.md b/content/blog/recursivelisting.md index 6bde1d8..ca29c6d 100644 --- a/content/blog/recursivelisting.md +++ b/content/blog/recursivelisting.md @@ -2,7 +2,7 @@ title: "Quick Python: List Files Recursively" date: 2020-02-09T17:31:44-05:00 draft: false -tags: [ "python" ] +tags: [ "Python" ] --- In order to add website files into a Flask application using setuptools, I needed to recurse down several directories and grab HTML and CSS files. diff --git a/content/blog/resumingapt.md b/content/blog/resumingapt.md index 05de1da..71e3310 100644 --- a/content/blog/resumingapt.md +++ b/content/blog/resumingapt.md @@ -2,7 +2,7 @@ title: "Resuming Stopped Apt Updates" date: 2020-02-29T17:58:14-05:00 draft: false -tags: [ "ubuntu", "linux" ] +tags: [ "Ubuntu", "Linux" ] --- Especially on the Raspberry Pi, it is quite often for me to lose connection while updating. I know some people setup `screen` or `tmux` sessions so that they can easily reconnect. I'm not good at remembering to do this. [Angus and Cas](https://unix.stackexchange.com/a/46546) on StackExchange shared that to resume a stopped update... diff --git a/content/blog/reverseonehotencode.md b/content/blog/reverseonehotencode.md index 8161121..c87bb1d 100644 --- a/content/blog/reverseonehotencode.md +++ b/content/blog/reverseonehotencode.md @@ -2,7 +2,7 @@ title: "Reverse One-Hot Encode" date: 2020-10-11T21:58:47-04:00 draft: false -tags: [] +tags: ["Python"] --- Let's say that you have a dataset that is one hot encoded like the following observation: diff --git a/content/blog/robustdd.md b/content/blog/robustdd.md index f602ccb..703c3d0 100644 --- a/content/blog/robustdd.md +++ b/content/blog/robustdd.md @@ -2,7 +2,7 @@ title: "Robustdd" date: 2019-09-27T22:45:56-04:00 draft: false -tags: [ "linux" ] +tags: [ "Linux" ] --- This blog post is going to assume that we're writing to `/dev/sdX`. Please change this to whatever disk you're actually trying to write to. I bear no responsibility if you accidentally write to your OS drives. diff --git a/content/blog/rsa.md b/content/blog/rsa.md index 0f76a88..f5737a4 100644 --- a/content/blog/rsa.md +++ b/content/blog/rsa.md @@ -4,6 +4,7 @@ date: 2019-12-10T22:15:21-05:00 draft: false images: [] math: true +tags: ["Security"] --- # Introduction diff --git a/content/blog/scrcpy.md b/content/blog/scrcpy.md index 1ae36d7..9cfed6e 100644 --- a/content/blog/scrcpy.md +++ b/content/blog/scrcpy.md @@ -2,7 +2,7 @@ title: "Scrcpy" date: 2020-01-09T21:36:30-05:00 draft: false -tags: [ "android" ] +tags: [ ] --- With [Scrcpy](https://github.com/Genymobile/scrcpy) you can control an Android device remotely! diff --git a/content/blog/signingcommits.md b/content/blog/signingcommits.md index 16f23c0..bee66f3 100644 --- a/content/blog/signingcommits.md +++ b/content/blog/signingcommits.md @@ -2,7 +2,7 @@ title: "Signing Commits" date: 2020-04-11T19:59:41-04:00 draft: false -tags: ["git", "gpg"] +tags: ["Git", "GPG"] --- Git and their various hosting platforms support commit signing as an additional step of verification. There seems to be an active debate on whether it should be used regularly, though I'll describe it on here in case you want to set it up. diff --git a/content/blog/socatforward.md b/content/blog/socatforward.md index 688ba83..e21cc87 100644 --- a/content/blog/socatforward.md +++ b/content/blog/socatforward.md @@ -2,7 +2,7 @@ title: "Forward Packets with Socat" date: 2021-06-18T19:38:43-04:00 draft: false -tags: [] +tags: ["Networking"] --- I've written about relaying TCP traffic using [SSH port forwarding](https://brandonrozek.com/blog/sshlocalportforwarding/). Though sometimes you don't require the authenticity and encryption of SSH or want to use another protocol such as UDP. That's where `socat` comes in. diff --git a/content/blog/sphinxmathjax.md b/content/blog/sphinxmathjax.md index c1d42e2..cd5417e 100644 --- a/content/blog/sphinxmathjax.md +++ b/content/blog/sphinxmathjax.md @@ -2,7 +2,7 @@ title: "Sphinx & MathJax" date: 2020-03-20T18:59:40-04:00 draft: false -tags: ["Documentation", "python", "LaTex"] +tags: ["Documentation", "Python", "LaTex"] --- To include mathematical notation in Python docs generated by Sphinx, it should look like the following: diff --git a/content/blog/sshconnectionsharing.md b/content/blog/sshconnectionsharing.md index 6bc00a3..a483a7f 100644 --- a/content/blog/sshconnectionsharing.md +++ b/content/blog/sshconnectionsharing.md @@ -2,7 +2,7 @@ title: "SSH Connection Sharing" date: 2020-06-05T16:39:24-04:00 draft: false -tags: [] +tags: ["SSH"] --- If you're like me, you open a lot of different terminal sessions throughout your day. When it comes to SSH, I want these different sessions to share a connection rather than creating a new one each time. diff --git a/content/blog/systemdstartup.md b/content/blog/systemdstartup.md index f8f3b8d..6baa20c 100644 --- a/content/blog/systemdstartup.md +++ b/content/blog/systemdstartup.md @@ -2,7 +2,7 @@ title: "Analyzing Startup Times with Systemd" date: 2019-12-26T22:52:59-05:00 draft: false -tags: [ "linux" ] +tags: [ "Linux" ] --- Startup times feeling slow? Check to see if there are any uneeded services slowing you down! diff --git a/content/blog/systemdwithpythonenvs.md b/content/blog/systemdwithpythonenvs.md index c2bca74..3ef4c77 100644 --- a/content/blog/systemdwithpythonenvs.md +++ b/content/blog/systemdwithpythonenvs.md @@ -2,7 +2,7 @@ title: "Systemd with Python environments" date: 2019-08-25T20:04:20-04:00 draft: false -tags: [ "linux", "python" ] +tags: [ "Linux", "Python" ] --- It took me some time to realize why I couldn't start a project during startup. I then realized that it was because I was using a python virtual environment and didn't tell systemd about it. diff --git a/content/blog/tcopython.md b/content/blog/tcopython.md index 3fe760e..8888529 100644 --- a/content/blog/tcopython.md +++ b/content/blog/tcopython.md @@ -2,7 +2,7 @@ title: "Tail Call Optimization in Python" date: 2020-10-11T20:46:54-04:00 draft: false -tags: [] +tags: ["Python"] --- In a standard recursive function, a new stack frame is created every time a recursive call is made. This can lead to bad memory performance and as a protective measure, some programming languages have a maximum stack frame limit. diff --git a/content/blog/tempresolve.md b/content/blog/tempresolve.md index 2baf7fd..4c2084a 100644 --- a/content/blog/tempresolve.md +++ b/content/blog/tempresolve.md @@ -2,7 +2,7 @@ title: "Temporarily Resolving Hostnames" date: 2020-01-04T21:26:16-05:00 draft: false -tags: [ "linux", "network" ] +tags: [ "Linux", "Networking" ] --- Let's say that we're testing a webserver where the pages served depended on a domain that you don't own. The most common way I know to test this is to modify your `/etc/hosts` file to contain the hostname and ip address you want to map it to. diff --git a/content/blog/tempstaticip.md b/content/blog/tempstaticip.md index f9aea37..2903f2b 100644 --- a/content/blog/tempstaticip.md +++ b/content/blog/tempstaticip.md @@ -2,7 +2,7 @@ title: "Temporary Static IP" date: 2020-01-20T21:36:37-05:00 draft: false -tags: [ "linux", "network" ] +tags: [ "Linux", "Networking" ] --- I've learned that the fastest way to transfer files is via Ethernet. Now the easiest way to transfer via Ethernet is for both computers to be on the same local area network. However, if needed, an Ethernet cable can used between two computers. diff --git a/content/blog/togglingxinput.md b/content/blog/togglingxinput.md index 2b53460..7057fff 100644 --- a/content/blog/togglingxinput.md +++ b/content/blog/togglingxinput.md @@ -2,7 +2,7 @@ title: "Toggling X Input" date: 2020-01-07T20:46:32-05:00 draft: false -tags: [ "linux", "X11" ] +tags: [ "Linux", "X11" ] --- On X, we can easily enable or disable input devices using the `xinput` command. This is a great use case when you're tired of accidentally hitting the red Thinkpad nub or having your palm be recognized when drawing with a pen. diff --git a/content/blog/tox.md b/content/blog/tox.md index 80fa796..675402c 100644 --- a/content/blog/tox.md +++ b/content/blog/tox.md @@ -2,7 +2,7 @@ title: "Tox" date: 2020-02-21T22:34:19-05:00 draft: false -tags: [ "python", "testing" ] +tags: [ "Python", "Testing" ] --- [Tox](https://tox.readthedocs.io/en/latest/) is a great project where you can automate your testing using virtual environments. diff --git a/content/blog/unattended-upgrades.md b/content/blog/unattended-upgrades.md index 28c74e3..35b2194 100644 --- a/content/blog/unattended-upgrades.md +++ b/content/blog/unattended-upgrades.md @@ -2,7 +2,7 @@ title: "Unattended Upgrades" date: 2019-05-26T12:52:03-04:00 draft: false -tags: [ "linux", "ubuntu" ] +tags: [ "Linux", "Ubuntu" ] --- I'm a big believer of reducing maintenance. One of the things that I didn't bother setting up before but should've is *unattended upgrades*. The benefits of this is that you don't have to repeatedly log into your sever to upgrade your system. diff --git a/content/blog/usbredirection.md b/content/blog/usbredirection.md index b5c8a64..039f6d0 100644 --- a/content/blog/usbredirection.md +++ b/content/blog/usbredirection.md @@ -2,7 +2,7 @@ title: "Wacom and USB Redirection in Virtual Machines" date: 2019-05-24T22:15:56-04:00 draft: false -tags: [ "linux", "VM" ] +tags: [ "Linux", "Virtualization" ] --- [Virt-Manager](https://virt-manager.org/) is a great tool for managing virtual machines under Linux. Today I learned of [Spice USB redirection](https://blog.wikichoon.com/2014/04/spice-usb-redirection-in-virt-manager.html). Essentially it allows you to switch USB devices from the host to the virtualized environment. This came in handy when I noticed that the graphics tablet device was not able to do pressure sensitivity on the Windows guest. diff --git a/content/blog/ventoy.md b/content/blog/ventoy.md index 4817cb5..c056897 100644 --- a/content/blog/ventoy.md +++ b/content/blog/ventoy.md @@ -2,7 +2,7 @@ title: "Ventoy for managing ISOs on one USB" date: 2021-06-18T15:32:38-04:00 draft: false -tags: [] +tags: ["Virtualization"] --- Traditionally I would hold one linux distribution per USB drive. Though with 32 GB USB Flash drives only costing $12, why hold only one per drive? That's where Ventoy comes in. With Ventoy, we can store multiple ISOs which it then presents as a boot screen. diff --git a/content/blog/videosandgifs.md b/content/blog/videosandgifs.md index 24c535e..3beddcb 100644 --- a/content/blog/videosandgifs.md +++ b/content/blog/videosandgifs.md @@ -2,6 +2,7 @@ title: "Videos and GIFs" date: 2019-12-04T10:13:35-05:00 draft: false +tags: ["Audio-Video"] --- I like using GIFs in Google Slides because it doesn't require any interaction to start playing right away. Therefore, I looked at a couple resources to add a GIF from a video into my presentation. Of course this is all using one of my favorite terminal tools `ffmpeg`. diff --git a/content/blog/virtualdisks.md b/content/blog/virtualdisks.md index 900b7c5..657d4b3 100644 --- a/content/blog/virtualdisks.md +++ b/content/blog/virtualdisks.md @@ -2,7 +2,7 @@ title: "Virtual Disks" date: 2020-01-06T22:26:58-05:00 draft: false -tags: [ "linux", "storage" ] +tags: [ "Linux", "Storage" ] --- Have you wanted to [play with ZFS](https://wiki.archlinux.org/index.php/ZFS/Virtual_disks) or any other filesystem without creating a dedicated partition or device? We can do this through virtual disks! diff --git a/content/blog/virtualenv.md b/content/blog/virtualenv.md index 61ddd08..437f288 100644 --- a/content/blog/virtualenv.md +++ b/content/blog/virtualenv.md @@ -2,7 +2,7 @@ title: "Python Virtual Environments" date: 2019-05-21T23:04:54-04:00 draft: false -tags: [ "python" ] +tags: [ "Python" ] --- Dependency management is hard. Luckily with Python there is a program called `virtualenv` that can help isolate different projects and manage dependencies. diff --git a/content/blog/virtualizingwithclonezilla.md b/content/blog/virtualizingwithclonezilla.md index f7b0ba3..11c282e 100644 --- a/content/blog/virtualizingwithclonezilla.md +++ b/content/blog/virtualizingwithclonezilla.md @@ -2,6 +2,7 @@ title: "Virtualizing Environments with Clonezilla" date: 2019-08-25T20:09:28-04:00 draft: false +tags: ["Virtualization"] --- [Clonezilla](https://clonezilla.org/) advertises itself as a disk cloning and backup utility. I've been starting to think of it as a little more than that. Let's say that you go to a client site and they have a machine in production. Instead of messing around with their machine, you make a Clonezilla copy of it. You can then take it back and place it on a computer you're not using to play around with it. diff --git a/content/blog/virtuallivecd.md b/content/blog/virtuallivecd.md index 307d7d9..7b3cc72 100644 --- a/content/blog/virtuallivecd.md +++ b/content/blog/virtuallivecd.md @@ -3,7 +3,7 @@ title: "Playing with Live CDs" date: 2020-01-12T22:45:06-05:00 draft: false images: [] -tags: [ "VM" ] +tags: [ "Virtualization" ] --- I was curious on how Lubuntu 19.10 looked but I didn't feel like rebooting my computer and loading into a new ISO. Luckily there is a nice easy way to play around with live CDs. diff --git a/content/blog/whyzeromq.md b/content/blog/whyzeromq.md index 0e86d5d..e57087d 100644 --- a/content/blog/whyzeromq.md +++ b/content/blog/whyzeromq.md @@ -2,7 +2,7 @@ title: "Why ZeroMQ" date: 2019-06-16T19:26:50-04:00 draft: false -tags: [ "network" ] +tags: [ "Networking" ] --- I've been playing around with ZeroMQ recently and it's been really exciting. This blog post is going to outline why I think you should be using ZeroMQ today. diff --git a/content/blog/wildcarddomainspihole.md b/content/blog/wildcarddomainspihole.md index 5adc7b0..190cf49 100644 --- a/content/blog/wildcarddomainspihole.md +++ b/content/blog/wildcarddomainspihole.md @@ -2,7 +2,7 @@ title: "Wildcard Domains in PiHole" date: 2020-05-25T23:26:00-04:00 draft: false -tags: ["network"] +tags: ["Networking"] --- As of this time of writing, the current version of PiHole (5.0) supports adding custom DNS records, but not wildcard records. This makes it annoying if you run a bunch of different services within your LAN following a certain pattern. diff --git a/content/blog/wireguardvpn.md b/content/blog/wireguardvpn.md index 518d590..487dc79 100644 --- a/content/blog/wireguardvpn.md +++ b/content/blog/wireguardvpn.md @@ -2,7 +2,7 @@ title: "Wireguard VPN" date: 2019-11-20T20:09:59-05:00 draft: false -tags: [ "network" ] +tags: [ "Networking" ] --- Having some sort of VPN solution has always been a necessity for me. Whether it's back in the day where LAN games where the rage and I wanted to play it with my distant friends, or nowadays when I need to be able to access my Desktop running simulations behind my home LAN. diff --git a/content/blog/wormhole.md b/content/blog/wormhole.md index 03ba7e5..7cfdf5b 100644 --- a/content/blog/wormhole.md +++ b/content/blog/wormhole.md @@ -2,7 +2,7 @@ title: "Wormhole" date: 2019-11-20T21:21:23-05:00 draft: false -tags: [ "linux" ] +tags: [ "Linux" ] --- A dead simple way to send files between two linux machines not on the same network is to use a utility called [Magic Wormhole](https://github.com/warner/magic-wormhole). It is typically included in the standard repositories and is so simple the this blog post is going to end soon. diff --git a/content/blog/xephyr.md b/content/blog/xephyr.md index a3b8ba8..a90bea3 100644 --- a/content/blog/xephyr.md +++ b/content/blog/xephyr.md @@ -2,7 +2,7 @@ title: "Nested X Sessions with Xephyr" date: 2019-12-25T00:52:02-05:00 draft: false -tags: [ "linux", "X11" ] +tags: [ "X11" ] --- The X Window System was designed at a time when applications that ran on your computer were assumed to be trusted. Therefore there are minimal restrictions in place to prevent applications from grabbing images of whats on another applications screens. This feature as you might imagine is quite useful for screen clipper applications. diff --git a/content/blog/xpra.md b/content/blog/xpra.md index 6f6fb17..043ae20 100644 --- a/content/blog/xpra.md +++ b/content/blog/xpra.md @@ -2,7 +2,7 @@ title: "xpra" date: 2020-01-15T18:29:57-05:00 draft: false -tags: [ "linux", "X11" ] +tags: [ "X11" ] --- [`xpra`](http://xpra.org/) allows one to run persistent X applications on a remote host and display it on a local machine. It's a combination of [SSH X11 Forwarding](https://wiki.archlinux.org/index.php/OpenSSH#X11_forwarding) and [Screen](https://www.gnu.org/software/screen/). diff --git a/content/blog/xvfb.md b/content/blog/xvfb.md index ab3157d..d1557d3 100644 --- a/content/blog/xvfb.md +++ b/content/blog/xvfb.md @@ -2,7 +2,7 @@ title: "Xvfb" date: 2020-09-07T20:49:54-04:00 draft: false -tags: [] +tags: ["X11"] --- X Virtual Framebuffer (Xvfb) is a great quick application to run applications that expect a `X11` server, but you don't care to see the visual output. diff --git a/content/blog/youtubebackup.md b/content/blog/youtubebackup.md index c1068fe..b4c7565 100644 --- a/content/blog/youtubebackup.md +++ b/content/blog/youtubebackup.md @@ -2,7 +2,7 @@ title: "Backing Up YouTube Content" date: 2020-02-17T23:17:47-05:00 draft: false -tags: [ "archive" ] +tags: [ "Archive" ] --- There are great content on YouTube that I would be sad if it went away. Therefore, I did some digging around and found a [great discussion](https://www.reddit.com/r/DataHoarder/comments/863aid/what_is_your_method_of_viewing_youtubedl_backed/dw25vnm/) on Reddit on backing up YouTube videos. The solution is based on `youtube-dl` and I modified the script a little to fit my needs. diff --git a/content/blog/yubikey.md b/content/blog/yubikey.md index 8cd53f1..cd5e148 100644 --- a/content/blog/yubikey.md +++ b/content/blog/yubikey.md @@ -2,6 +2,7 @@ title: "YubiKey" date: 2019-07-07T14:31:47-04:00 draft: false +tags: ["Security"] --- The YubiKey is a hardware authentication device manufactured by Yubico. It is a write only device that is meant to hold various authentication keys. The fact that it is write only means that people can't duplicate these keys. [Noah Chelliah](https://twitter.com/kernellinux) from Altispeed says that he uses YubiKeys at his company so that when employees moves on from his company he only needs to take their YubiKey. diff --git a/content/blog/zshandsnaps.md b/content/blog/zshandsnaps.md index 2ac7504..d1aa6b6 100644 --- a/content/blog/zshandsnaps.md +++ b/content/blog/zshandsnaps.md @@ -2,7 +2,7 @@ title: "Zsh and Snaps" date: 2020-01-25T09:46:23-05:00 draft: false -tags: [ "linux", "snaps", "storage" ] +tags: [ "Linux" ] --- In case I forget again, by default when snaps are installed it doesn't populate in the `zsh` shell. To enable this add the following to `/etc/zsh/zprofile`