Removing URL prefix for local URLs in blog posts

This commit is contained in:
Brandon Rozek 2022-12-18 12:25:45 -05:00
parent b02794d677
commit 6dc8bfbb89
No known key found for this signature in database
GPG key ID: 26E457DA82C9F480
21 changed files with 23 additions and 23 deletions

View file

@ -33,7 +33,7 @@ gqrx.AppDir/
The `AppRun` executable comes from the [AppImage Releases Page](https://github.com/AppImage/AppImageKit/releases). While you're there, you should also download `appimagetool` as we'll be using that soon. The `AppRun` executable comes from the [AppImage Releases Page](https://github.com/AppImage/AppImageKit/releases). While you're there, you should also download `appimagetool` as we'll be using that soon.
The `.desktop` file needs to be a valid [Linux Desktop Icon](https://brandonrozek.com/blog/linuxdesktopicons/). Some things to take note about the desktop file: The `.desktop` file needs to be a valid [Linux Desktop Icon](/blog/linuxdesktopicons/). Some things to take note about the desktop file:
- The icon is assumed to be a `.png` - The icon is assumed to be a `.png`
- The executable is assumed to be located in `/usr/bin/` - The executable is assumed to be located in `/usr/bin/`

View file

@ -5,7 +5,7 @@ draft: false
tags: ["Hugo", "Mastodon", "Archive"] tags: ["Hugo", "Mastodon", "Archive"]
math: false math: false
--- ---
In the spirit of [syndicating Mastodon toots](https://brandonrozek.com/blog/why-i-pesos-from-mastodon/) In the spirit of [syndicating Mastodon toots](/blog/why-i-pesos-from-mastodon/)
to my own site, I wrote a Python script that turns toots into Hugo markdown to my own site, I wrote a Python script that turns toots into Hugo markdown
files. files.
@ -32,7 +32,7 @@ https://fosstodon.org/api/v1/accounts/108219415927856966
By default, this will return 20 statuses in an array. By default, this will return 20 statuses in an array.
To see how to parse each individual status, check out my To see how to parse each individual status, check out my
post on [displaying a single toot](https://brandonrozek.com/blog/displaying-a-toot-hugo/). post on [displaying a single toot](/blog/displaying-a-toot-hugo/).
You can use the limit parameter to set how many statuses you wish to see. You can use the limit parameter to set how many statuses you wish to see.
The maximum number you can set it to is 40. The maximum number you can set it to is 40.

View file

@ -5,7 +5,7 @@ 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: I've written a post on using [callbacks in Python](/blog/pysubscribepattern/). Though to add callbacks to `asyncio` functions, you'll have to interact with the loop object directly. Replace the emit function in the previous post with the following:
```python ```python
class Application: class Application:
# ... # ...

View file

@ -5,7 +5,7 @@ draft: false
tags: ["Containers"] 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). This post will combine that last three posts on [Packer](/blog/snapshotswithpacker/), [Terraform](/blog/autodeployterraform/), and their [configuration](/blog/sharedpackerterraformconfig/) to show an entire example of how to deploy a docker-compose application. We will specifically look at deploying a game called [`minetest`](https://www.minetest.net/) on DigitalOcean, but these principles can be adjusted to deploy your application as well. The entire setup is [documented on Github](https://github.com/Brandon-Rozek/minetest-deploy).
## Shared Config ## Shared Config

View file

@ -5,7 +5,7 @@ draft: false
tags: ["Deployment"] tags: ["Deployment"]
--- ---
I have recently written about [Packer](https://brandonrozek.com/blog/snapshotswithpacker/) to create system images or snapshots. This post will go over another [HashiCorp](https://www.hashicorp.com/) project named [Terraform](https://www.terraform.io/) that we can use to deploy that image to a VPS. Like before, I am going to go over how to setup this up in DigitalOcean. Check out [this list](https://www.terraform.io/docs/providers/index.html) for documentation on your favorite cloud provider. I have recently written about [Packer](/blog/snapshotswithpacker/) to create system images or snapshots. This post will go over another [HashiCorp](https://www.hashicorp.com/) project named [Terraform](https://www.terraform.io/) that we can use to deploy that image to a VPS. Like before, I am going to go over how to setup this up in DigitalOcean. Check out [this list](https://www.terraform.io/docs/providers/index.html) for documentation on your favorite cloud provider.
## Variables ## Variables

View file

@ -7,7 +7,7 @@ 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. 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.
In my Kubuntu 20.10 system, the directory `$HOME/.config/autostart` can contain [`.desktop`](https://brandonrozek.com/blog/linuxdesktopicons/) files that describes the applications to start on login. Drop whichever desktop file you wish to start there. In other systems it may be located under `$XDG_CONFIG_DIRS/autostart`. In my Kubuntu 20.10 system, the directory `$HOME/.config/autostart` can contain [`.desktop`](/blog/linuxdesktopicons/) files that describes the applications to start on login. Drop whichever desktop file you wish to start there. In other systems it may be located under `$XDG_CONFIG_DIRS/autostart`.
If you want to start up a script instead, you can put the script under `$HOME/.config/autostart-scripts`. If you want to start up a script instead, you can put the script under `$HOME/.config/autostart-scripts`.

View file

@ -5,7 +5,7 @@ draft: false
tags: ["Python"] 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/). A great [StackOverflow post](https://stackoverflow.com/a/35710527) by [Aaron Hall](https://stackoverflow.com/users/541136/aaron-hall) that shows how you can create an `export` decorator in order to not have to specify all the names you want to expose via [`__all__`](/blog/pythonall/).
The Decorator: The Decorator:

View file

@ -5,7 +5,7 @@ draft: false
tags: ["Python"] 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. In my last post I spoke about [concurrency with asyncio](/blog/pyasyncio/). Now what if you don't want to concern yourself with async/await practices and just want to write synchronous code that executes I/O asynchronously? That's where the library [gevent](http://www.gevent.org/) comes in. It does this by modifying Python's standard library during runtime to call it's own asynchronous versions.
Last post code's example written in `gevent`. Last post code's example written in `gevent`.

View file

@ -5,7 +5,7 @@ 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. I enjoy both managing my Python versions with [pyenv](/blog/pyenv/) and the literate programming environment [Jupyter lab](https://jupyter.org/). Luckily we can easily manage Python virtual environments via iPython kernels.
We're going to start off with our base Python interpretor We're going to start off with our base Python interpretor
```bash ```bash

View file

@ -6,7 +6,7 @@ tags: ["LaTex"]
math: false math: false
--- ---
I often struggle with deciding how much content to put on my slides. Personally, I feel that my slides should be self-contained so that others can review them afterwards. This was especially true when I held [recitations](https://brandonrozek.com/ta/spring2022/csci2600/) as a TA. I often struggle with deciding how much content to put on my slides. Personally, I feel that my slides should be self-contained so that others can review them afterwards. This was especially true when I held [recitations](/ta/spring2022/csci2600/) as a TA.
What if instead of putting all the content into one slide, we can have a corresponding notes document? Crazy enough, Beamer comes to the rescue! What if instead of putting all the content into one slide, we can have a corresponding notes document? Crazy enough, Beamer comes to the rescue!

View file

@ -11,7 +11,7 @@ Now there already exists a [OBS plugin](https://github.com/CatxFish/obs-v4l2sink
To see discussion around this topic, check out this [Github thread](https://github.com/CatxFish/obs-virtual-cam/issues/17). To see discussion around this topic, check out this [Github thread](https://github.com/CatxFish/obs-virtual-cam/issues/17).
OBS has two different options, streaming and recording. Since I want the ability to record a high fidelity version of my feed, we will use streaming to push video to a local RTMP server. This local RTMP server will then re-encode the video to a [v4l2 video device](https://brandonrozek.com/blog/fakewebcam/). OBS has two different options, streaming and recording. Since I want the ability to record a high fidelity version of my feed, we will use streaming to push video to a local RTMP server. This local RTMP server will then re-encode the video to a [v4l2 video device](/blog/fakewebcam/).
We will use `ffmpeg` as our RTMP server We will use `ffmpeg` as our RTMP server

View file

@ -15,7 +15,7 @@ Regardless, to my surprise, setting up a repository of python wheels doesn't tak
## Setup ## Setup
First I would recommend that you setup a virtual environment. Either through [pyenv](https://brandonrozek.com/blog/pyenv/) or [python-virtualenv](https://brandonrozek.com/blog/virtualenv/). First I would recommend that you setup a virtual environment. Either through [pyenv](/blog/pyenv/) or [python-virtualenv](/blog/virtualenv/).
Then, install whatever packages you would like. Let us use tensorflow as an example: Then, install whatever packages you would like. Let us use tensorflow as an example:
@ -79,5 +79,5 @@ Or they can just install the packages they want
pip install --no-index -f /path/to/wheels/wheels package_name pip install --no-index -f /path/to/wheels/wheels package_name
``` ```
If you don't want to add flags to every command, check out my post on using [configuration files with pip](https://brandonrozek.com/blog/pipconf/). If you don't want to add flags to every command, check out my post on using [configuration files with pip](/blog/pipconf/).

View file

@ -6,7 +6,7 @@ tags: ["Formal Methods"]
math: false math: false
--- ---
In the recitations that I'm giving for [Principles of Software](https://brandonrozek.com/ta/spring2022/csci2600/), we are going over reasoning through code using Hoare Logic and the program verifier Dafny. Microsoft Research designed Dafny to be similar to writing imperative code. The main difference is that you need to supply (pre/post)-conditions and the code to verify. Here's an example of how to reason about a simple statement by hand: In the recitations that I'm giving for [Principles of Software](/ta/spring2022/csci2600/), we are going over reasoning through code using Hoare Logic and the program verifier Dafny. Microsoft Research designed Dafny to be similar to writing imperative code. The main difference is that you need to supply (pre/post)-conditions and the code to verify. Here's an example of how to reason about a simple statement by hand:
```csharp ```csharp
// Precondition: x > 0 // Precondition: x > 0

View file

@ -5,7 +5,7 @@ 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. I wrote previously about [managing python virtual environments](/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.
To install, follow the steps outlined in the [pyenv-istaller](https://github.com/pyenv/pyenv-installer) repository. As of now, it's a bash script. To install, follow the steps outlined in the [pyenv-istaller](https://github.com/pyenv/pyenv-installer) repository. As of now, it's a bash script.

View file

@ -11,7 +11,7 @@ I ran into an issue with PyMC3 where it was expecting a certain symbol that Pyth
Exception: Compilation failed (return status=1): /usr/bin/ld: /home/rozek/.pyenv/versions/3.8.2/lib/libpython3.8.a(floatobject.o): relocation R_X86_64_PC32 against symbol `PyFloat_Type' can not be used when making a shared object; recompile with -fPIC. /usr/bin/ld: final link failed: bad value. collect2: error: ld returned 1 exit status. Exception: Compilation failed (return status=1): /usr/bin/ld: /home/rozek/.pyenv/versions/3.8.2/lib/libpython3.8.a(floatobject.o): relocation R_X86_64_PC32 against symbol `PyFloat_Type' can not be used when making a shared object; recompile with -fPIC. /usr/bin/ld: final link failed: bad value. collect2: error: ld returned 1 exit status.
``` ```
Since I use [`pyenv`](https://brandonrozek.com/blog/pyenv/) for Python version management, it turned out that I only needed to modify the `CFLAGS` variable to get this working Since I use [`pyenv`](/blog/pyenv/) for Python version management, it turned out that I only needed to modify the `CFLAGS` variable to get this working
```bash ```bash
CFLAGS="-fPIC" pyenv install 3.8.2 CFLAGS="-fPIC" pyenv install 3.8.2

View file

@ -5,7 +5,7 @@ draft: false
tags: ["Python"] 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. 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](/blog/pydecorators/) and standard methods.
## Single Event ## Single Event

View file

@ -5,7 +5,7 @@ draft: false
tags: ["Python"] 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. I wrote a [blog post about operator overloads](/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.
| Operator | Method | | Operator | Method |
| -------- | ---------------------- | | -------- | ---------------------- |

View file

@ -4,7 +4,7 @@ date: 2020-02-21T22:42:55-05:00
draft: false draft: false
tags: [ "Python" ] tags: [ "Python" ]
--- ---
**Deprecated in favor of [pip install editable](https://brandonrozek.com/blog/pipeditable)** **Deprecated in favor of [pip install editable](/blog/pipeditable)**
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 where you've defined a `setup.py`, you can specify the command `develop`. 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 where you've defined a `setup.py`, you can specify the command `develop`.

View file

@ -5,7 +5,7 @@ draft: false
tags: ["Deployment"] tags: ["Deployment"]
--- ---
You might have noticed from my last two posts on [Packer](https://brandonrozek.com/blog/snapshotswithpacker/) and [Terraform](https://brandonrozek.com/blog/autodeployterraform/) that the configuration files are highly similar. In fact, we can trick them into sharing a configuration file! You might have noticed from my last two posts on [Packer](/blog/snapshotswithpacker/) and [Terraform](/blog/autodeployterraform/) that the configuration files are highly similar. In fact, we can trick them into sharing a configuration file!
## Shared Configuration ## Shared Configuration

View file

@ -5,7 +5,7 @@ draft: false
tags: ["Networking"] 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. I've written about relaying TCP traffic using [SSH port forwarding](/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.
The following will listen to TCP traffic on port 8001 and redirect it to TCP localhost:8000 The following will listen to TCP traffic on port 8001 and redirect it to TCP localhost:8000

View file

@ -21,4 +21,4 @@ There are also browser extensions that you can use such as [LiveHosts](https://g
If this is going to be a publicly facing service, then you should just set the records of your domain name to point to the server. If this is going to be a publicly facing service, then you should just set the records of your domain name to point to the server.
If it's a non-public routable service, then perhaps try looking into setting up your own private [dns server](https://brandonrozek.com/blog/coredns/). If it's a non-public routable service, then perhaps try looking into setting up your own private [dns server](/blog/coredns/).