aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen Wade <stephen@stephenwade.me>2022-12-28 12:26:55 -0500
committerGitHub <noreply@github.com>2022-12-28 12:26:55 -0500
commit7b1e0e83b06abb8908ca7800525ec098ea85f1df (patch)
tree517a406b701103e5c8431f9052b4caa6cb7ce28a
parent605ddfa919b13392afe5045eac098f90c8665a4e (diff)
downloadxesite-7b1e0e83b06abb8908ca7800525ec098ea85f1df.tar.xz
xesite-7b1e0e83b06abb8908ca7800525ec098ea85f1df.zip
Broken links (#574)
* Replace broken link to wasmcloud.app * Replace broken link to dumbotaku.com with the Wayback Machine * Replace broken link to oddcode.daveamit.com with the Wayback Machine * Fix broken link to tokipona.net * Fix broken link to github.com/Xe/waifud * Fix broken link to cloud.debian.org * Replace broken link to rust-for-linux.github.io with the Wayback Machine * Fix broken link to ohmyposh.dev * Replace broken link to docs.vrchat.com with the Wayback Machine * Replace broken link to learning-rust.github.io * Fix broken links to tulpa.dev/cadey/printerfacts * Fix broken links to github.com/Xe/nixos-configs * Fix broken link to tulpa.dev/cadey/gitea-release * Replace broken link to lojban.pw with the Wayback Machine * Remove broken link to printerfacts.cetacean.club * Remove broken links to home.cetacean.club * Replace broken link to caddyserver.com with the Wayback Machine
-rw-r--r--blog/TLDR-rust-2020-09-19.markdown14
-rw-r--r--blog/cloud-init-2021-06-04.markdown12
-rw-r--r--blog/convoluted-vrchat-gchat-setup-2021-02-24.markdown2
-rw-r--r--blog/dev-printerfact-2021-04-17.markdown12
-rw-r--r--blog/drone-kubernetes-cd-2020-07-10.markdown6
-rw-r--r--blog/gitea-release-tool-2020-05-31.markdown2
-rw-r--r--blog/how-i-start-rust-2020-03-15.markdown3
-rw-r--r--blog/i-was-wrong-about-nix-2020-02-10.markdown8
-rw-r--r--blog/lipu-pi-o-wawa-e-lukin-2018-10-14.markdown2
-rw-r--r--blog/reconlangmo-1-name-ctx-history-2020-05-05.markdown8
-rw-r--r--blog/rtmp-server-setup-2020-01-11.markdown23
-rw-r--r--blog/various-updates-2020-11-18.markdown5
-rw-r--r--blog/vtubing-linux-2021-01-15.markdown3
-rw-r--r--blog/waifud-plans-2021-06-19.markdown7
-rw-r--r--blog/why-i-use-suckless-tools-2020-06-05.markdown4
-rw-r--r--blog/windows-pain-2021-03-03.markdown2
-rw-r--r--talks/thinking-different-2018-11-03.markdown2
17 files changed, 58 insertions, 57 deletions
diff --git a/blog/TLDR-rust-2020-09-19.markdown b/blog/TLDR-rust-2020-09-19.markdown
index 85382ef..489cb61 100644
--- a/blog/TLDR-rust-2020-09-19.markdown
+++ b/blog/TLDR-rust-2020-09-19.markdown
@@ -80,7 +80,7 @@ fn foo() -> i32 {
if some_cond {
2
}
-
+
4
}
```
@@ -125,7 +125,7 @@ let val = if some_cond { 2 } else { 4 };
The [Result](https://doc.rust-lang.org/std/result/) type represents things that
can fail with specific errors. The [eyre Result
type](https://docs.rs/eyre) represents things that can fail
-with any error. For readability, this post will use the eyre Result type.
+with any error. For readability, this post will use the eyre Result type.
[The angle brackets in the `Result` type are arguments to the type, this allows
the Result type to work across any type you could imagine.](conversation://Mara/hacker)
@@ -137,7 +137,7 @@ func divide(x, y int) (int, err) {
if y == 0 {
return 0, errors.New("cannot divide by zero")
}
-
+
return x / y, nil
}
```
@@ -236,7 +236,7 @@ func doThing() (int, error) {
if err != nil {
return 0, err
}
-
+
return result, nil
}
```
@@ -544,7 +544,7 @@ but at a high level most projects only uses a few of them:
- String, an owned UTF-8 string
- PathBuf, a filepath string (encoded in whatever encoding the OS running this
code uses for filesystems)
-
+
The strings are different types for safety reasons. See the linked blogpost for
more detail about this.
@@ -614,7 +614,7 @@ mod tests { // not required but it is good practice
fn math_works() {
assert_eq!(2 + 2, 4);
}
-
+
#[tokio::test] // needs tokio as a dependency
async fn http_works() {
let _ = get_html("https://within.website").await.unwrap();
@@ -626,7 +626,7 @@ Avoid the use of `unwrap()` outside of tests. In the wrong cases, using
`unwrap()` in production code can cause the server to crash and can incur data
loss.
-[Alternatively, you can also use the <a href="https://learning-rust.github.io/docs/e4.unwrap_and_expect.html#expect">`.expect()`</a> method instead
+[Alternatively, you can also use the <a href="https://doc.rust-lang.org/std/error/index.html#common-message-styles">`.expect()`</a> method instead
of `.unwrap()`. This lets you attach a message that will be shown when the
result isn't Ok.](conversation://Mara/hacker)
diff --git a/blog/cloud-init-2021-06-04.markdown b/blog/cloud-init-2021-06-04.markdown
index 9afb002..37f5818 100644
--- a/blog/cloud-init-2021-06-04.markdown
+++ b/blog/cloud-init-2021-06-04.markdown
@@ -20,7 +20,7 @@ Recently I wanted to test a
a coworker wrote that allows users to automatically install Tailscale on every
distro and version Tailscale supports. I wanted to try and avoid having to
install each version of every distribution manually, so I started looking for
-options.
+options.
[This may seem like overkill (and at some level it probably is), however as a
side effect of going through this song and dance you can spin up a bunch of VMs
@@ -80,7 +80,7 @@ users:
groups: [ wheel ]
sudo: [ "ALL=(ALL) NOPASSWD:ALL" ]
shell: /bin/bash
- ssh-authorized-keys:
+ ssh-authorized-keys:
- ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPYr9hiLtDHgd6lZDgQMkJzvYeAXmePOrgFaWHAjJvNU cadey@ontos
write_files:
@@ -94,7 +94,7 @@ write_files:
Please make sure to change the username and swap out the SSH key as needed,
unless you want to get locked out of your VM. For more information about what
you can do from cloud-init, see the list of modules
-[here](http://cloudinit.readthedocs.io/en/latest/topics/modules.html).
+[here](http://cloudinit.readthedocs.io/en/latest/topics/modules.html).
Now that you have the two yaml files you can make the seed image with this
command (Linux):
@@ -378,11 +378,11 @@ distros:
one)
- [CentOS 8](https://cloud.centos.org/centos/8-stream/x86_64/images/) (use the
`GenericCloud` one)
-- [Debian 9](http://cloud.debian.org/images/cloud/OpenStack/9.13.22-20210531/)
+- [Debian 9](https://cloud.debian.org/images/cloud/OpenStack/current-9/)
(use the `openstack` one)
-- [Debian 10](http://cloud.debian.org/images/cloud/buster/20210329-591/) (use
+- [Debian 10](https://cloud.debian.org/images/cloud/buster/latest/) (use
the `generic` one)
-- [Debian 11](http://cloud.debian.org/images/cloud/bullseye/daily/) (use the
+- [Debian 11](https://cloud.debian.org/images/cloud/bullseye/latest/) (use the
`generic` one)
- [Fedora 34](https://alt.fedoraproject.org/cloud/) (use the Openstack image)
- [OpenSUSE Leap
diff --git a/blog/convoluted-vrchat-gchat-setup-2021-02-24.markdown b/blog/convoluted-vrchat-gchat-setup-2021-02-24.markdown
index 007d809..2fd96fe 100644
--- a/blog/convoluted-vrchat-gchat-setup-2021-02-24.markdown
+++ b/blog/convoluted-vrchat-gchat-setup-2021-02-24.markdown
@@ -129,7 +129,7 @@ I ended up with this image:
</center>
Then with some clever use of the
-[Chroma key filter in VRChat](https://docs.vrchat.com/docs/vrchat-201812)
+[Chroma key filter in VRChat](https://web.archive.org/web/20180612173651/https://docs.vrchat.com/docs/vrchat-201812)
I was able to get some basic compositing of my avatar onto the picture. I
fiddled with the placement of things and then I was able to declare success
with this image I posted to Twitter:
diff --git a/blog/dev-printerfact-2021-04-17.markdown b/blog/dev-printerfact-2021-04-17.markdown
index 62f94d2..898c27b 100644
--- a/blog/dev-printerfact-2021-04-17.markdown
+++ b/blog/dev-printerfact-2021-04-17.markdown
@@ -41,7 +41,7 @@ At a high level to do something like this you need to have a few things:
- A way to run tests to ensure that kernel is behaving cromulently
- A way to be able to _repeat_ these tests on another machine to be more certain
that the thing you made works more than once
-
+
To aid in that first step, the Rust for Linux team shipped a [Nix
config](https://github.com/Rust-for-Linux/nix) to let you `nix-build -A kernel`
yourself a new kernel whenever you wanted. So let's do that and see what
@@ -182,7 +182,7 @@ $ du -hs /nix/store/yf2a8gvaypch9p4xxbk7151x9lq2r6ia-linux-5.11
## Ensuring Cromulence
> A noble spirit embiggens the smallest man.
->
+>
> I've never heard of the word "embiggens" before.
>
> I don't know why, it's a perfectly cromulent word
@@ -361,7 +361,7 @@ impl FileOperations for RustFile {
println!("user attempted to read from the file!");
Ok(0)
- }
+ }
}
struct PrinterFacts {
@@ -466,7 +466,7 @@ impl RustFile {
fn get_fact(&self) -> KernelResult<&'static str> {
let mut ent = [0u8; 1]; // Mara\ declare a 1-sized array of bytes
kernel::random::getrandom(&mut ent)?; // Mara\ fill it with entropy
-
+
Ok(FACTS[ent[0] as usize % FACTS.len()]) // Mara\ return a random fact
}
}
@@ -556,7 +556,7 @@ a_tier = []
for chara in characters:
if "a" in chara:
a_tier.append(chara)
-
+
print(a_tier)
```
@@ -619,7 +619,7 @@ machine # cat: /dev/printerfact: Invalid argument
```
Oh dear. It's failing. Let's take a closer look at that
-[FileOperations](https://rust-for-linux.github.io/docs/kernel/file_operations/trait.FileOperations.html)
+[FileOperations](https://web.archive.org/web/20210621170531/https://rust-for-linux.github.io/docs/kernel/file_operations/trait.FileOperations.html)
trait and see if there are any hints. It looks like the
`declare_file_operations!` macro is setting the `TO_USE` constant somehow. Let's
see what it's doing under the hood:
diff --git a/blog/drone-kubernetes-cd-2020-07-10.markdown b/blog/drone-kubernetes-cd-2020-07-10.markdown
index b3bcc20..b549f62 100644
--- a/blog/drone-kubernetes-cd-2020-07-10.markdown
+++ b/blog/drone-kubernetes-cd-2020-07-10.markdown
@@ -48,7 +48,7 @@ let
naersk = pkgs.callPackage sources.naersk { };
gruvbox-css = pkgs.callPackage sources.gruvbox-css { };
-
+
pfacts = naersk.buildPackage {
inherit src;
remapPathPrefix = true;
@@ -117,7 +117,7 @@ Now that we have a way to make a docker image, let's look how I use
Hub](https://hub.docker.com/repository/docker/xena/printerfacts/tags).
I have a drone manifest that looks like
-[this](https://tulpa.dev/cadey/printerfacts/src/branch/master/.drone.yml):
+[this](https://tulpa.dev/cadey/printerfacts/src/commit/6d152cde84fc8a6424d438b6c75fe9216801c972/.drone.yml):
```yaml
kind: pipeline
@@ -280,7 +280,7 @@ The deploy step does two small things. First, it installs
for generating the Kubernetes manifest (see
[here](https://xeiaso.net/blog/dhall-kubernetes-2020-01-25)) and then
runs
-[`scripts/release.sh`](https://tulpa.dev/cadey/printerfacts/src/branch/master/scripts/release.sh):
+[`scripts/release.sh`](https://tulpa.dev/cadey/printerfacts/src/commit/6d152cde84fc8a6424d438b6c75fe9216801c972/scripts/release.sh):
```
#!/usr/bin/env nix-shell
diff --git a/blog/gitea-release-tool-2020-05-31.markdown b/blog/gitea-release-tool-2020-05-31.markdown
index d45924a..e5c829d 100644
--- a/blog/gitea-release-tool-2020-05-31.markdown
+++ b/blog/gitea-release-tool-2020-05-31.markdown
@@ -126,7 +126,7 @@ steps:
This allows me to bump the `VERSION` and `CHANGELOG.md`, then push that commit
to git and a new release will automatically be created. You can see how the
`CHANGELOG.md` file grows with the [CHANGELOG of
-gitea-release](https://tulpa.dev/cadey/gitea-release/src/branch/master/CHANGELOG.md).
+gitea-release](https://tulpa.dev/cadey/gitea-release/src/branch/main/CHANGELOG.md).
Once the release is pushed to gitea, you can then use drone to trigger
deployment commands. For example here is the deployment pipeline used to
diff --git a/blog/how-i-start-rust-2020-03-15.markdown b/blog/how-i-start-rust-2020-03-15.markdown
index eee9db5..f044172 100644
--- a/blog/how-i-start-rust-2020-03-15.markdown
+++ b/blog/how-i-start-rust-2020-03-15.markdown
@@ -443,8 +443,7 @@ $ ./target/debug/helloworld
And [open the swagger UI](http://127.0.0.1:8000/swagger-ui/) in your favorite
browser. This will show you a graphical display of all of the routes and the
-data types in your service. For an example, see
-[here](https://printerfacts.cetacean.club/swagger-ui/index.html).
+data types in your service.
## Error responses
diff --git a/blog/i-was-wrong-about-nix-2020-02-10.markdown b/blog/i-was-wrong-about-nix-2020-02-10.markdown
index 858a48c..bfb112f 100644
--- a/blog/i-was-wrong-about-nix-2020-02-10.markdown
+++ b/blog/i-was-wrong-about-nix-2020-02-10.markdown
@@ -49,7 +49,7 @@ source code to the image, builds it (in a way that makes the resulting binary a
[static executable][staticbin]), and creates the runtime environment for it.
[godockerfile]: https://github.com/Xe/dockerfiles/blob/master/lang/go/Dockerfile
-[staticbin]: https://oddcode.daveamit.com/2018/08/16/statically-compile-golang-binary/
+[staticbin]: https://web.archive.org/web/20220504183916/https://oddcode.daveamit.com/2018/08/16/statically-compile-golang-binary/
Let's let it build and see how big the result is:
@@ -70,7 +70,7 @@ Investigating this image with [dive][dive], we see the following:
binary was _statically linked_ to specifically avoid this)
- Most of the files in the docker image are unrelated to my website's
functionality and are involved with the normal functioning of Linux systems
-
+
Granted, [Alpine Linux][alpine] does a good job at keeping this chaff to a
minimum, but it is still there, still needs to be updated (causing all of my
docker images to be rebuilt and applications to be redeployed) and still takes
@@ -248,7 +248,7 @@ $ docker images | grep xena
xena/christinewebsite latest 0d1ccd676af8 50 years ago 94.6MB
```
-And the output is 16 megabytes smaller.
+And the output is 16 megabytes smaller.
The image age might look weird at first, but it's part of the reproducibility
Nix offers. The date an image was built is something that can change with time
@@ -272,7 +272,7 @@ are:
And that's it. This is _fantastic_. Nearly all of the disk usage has been
eliminated. If someone manages to trick my website into executing code, that
attacker cannot do anything but run more copies of my website (that will
-immediately fail and die because the port is already allocated).
+immediately fail and die because the port is already allocated).
This strategy pans out to more complicated projects too. Consider a case where a
frontend and backend need to be built and deployed as a unit. Let's create a new
diff --git a/blog/lipu-pi-o-wawa-e-lukin-2018-10-14.markdown b/blog/lipu-pi-o-wawa-e-lukin-2018-10-14.markdown
index 387f073..e8213e9 100644
--- a/blog/lipu-pi-o-wawa-e-lukin-2018-10-14.markdown
+++ b/blog/lipu-pi-o-wawa-e-lukin-2018-10-14.markdown
@@ -68,7 +68,7 @@ machine easier.
---
-This post is written primarily in [toki pona](http://tokipona.net/tp/Default.aspx),
+This post is written primarily in [toki pona](https://tokipona.org/),
or the language of good. It is a constructed language that is minimal (only about
120 words in total) yet it is enough to express just about every practical day to
day communication need. [It's also small enough there's tokenizers for it](https://github.com/Xe/x/blob/master/web/tokiponatokens/toki_pona.go).
diff --git a/blog/reconlangmo-1-name-ctx-history-2020-05-05.markdown b/blog/reconlangmo-1-name-ctx-history-2020-05-05.markdown
index 4a84815..fedb177 100644
--- a/blog/reconlangmo-1-name-ctx-history-2020-05-05.markdown
+++ b/blog/reconlangmo-1-name-ctx-history-2020-05-05.markdown
@@ -16,7 +16,7 @@ on out) are a simpler model of this. You might be familiar with
[Klingon][tlhnganhol] from the Star Trek series, the [various forms of
Elvish][elvish] as described by J. R. R. Tolkien or [Dothraki][dothraki] from
Game of Thrones. This series will show an example of how one of those kinds of
-languages are created.
+languages are created.
[conlangs]: https://en.wikipedia.org/wiki/Constructed_language
[tlhnganhol]: https://en.wikipedia.org/wiki/Klingon_language
@@ -68,7 +68,7 @@ features I plan to include are:
- A decorative script that I'll turn into a font
[seximal]: https://www.seximal.net
-[lojban]: https://lojban.pw/cll/uncll-1.2.6/xhtml_section_chunks/chapter-tour.html#section-bridi
+[lojban]: https://web.archive.org/web/20200928095138/https://lojban.pw/cll/uncll-1.2.6/xhtml_section_chunks/chapter-tour.html
[salishan]: https://en.wikipedia.org/wiki/Salishan_languages
[apriori]: https://en.wikipedia.org/wiki/Constructed_language#A_priori_and_a_posteriori_languages
@@ -88,14 +88,14 @@ want to go through and take the time to learn the ins and outs of a tool I
created for myself to archive my personal thoughts, they probably deserve to be
able to read them. Otherwise, this would allow me to write my diary from pretty
much anywhere, even in plain sight out in public. People can't shoulder-surf and
-read what they literally cannot understand.
+read what they literally cannot understand.
---
I plan to continue going through this series as the prompts come out and will
put my responses on my blog along with explanations, analysis and sample code
(where relevant). I will probably also reformat these posts (and relevant
-dictionary files) to an eBook and later into a reference grammar book.
+dictionary files) to an eBook and later into a reference grammar book.
Like I said though, this project is for myself. I do not expect this language to
change the world for anyone but me. Let's see where this rabbit hole goes.
diff --git a/blog/rtmp-server-setup-2020-01-11.markdown b/blog/rtmp-server-setup-2020-01-11.markdown
index eeda915..f2ae8f6 100644
--- a/blog/rtmp-server-setup-2020-01-11.markdown
+++ b/blog/rtmp-server-setup-2020-01-11.markdown
@@ -7,8 +7,8 @@ tags:
- live-streaming
---
-I have set up my own [RTMP][rtmp] server that allows me to live stream to [my own
-infrastructure][streampage]. This allows me to own my own setup and not need to
+I have set up my own [RTMP][rtmp] server that allows me to live stream to my own
+infrastructure. This allows me to own my own setup and not need to
rely on other services such as Twitch or YouTube. As a side effect of doing
this, I can enable people who use my streaming server to use picture-in-picture
mode in iPadOS without having to hack the streaming app, among other things.
@@ -17,7 +17,6 @@ This is part of my 2020 goal to reduce my dependencies on corporate social
platforms as much as possible.
[rtmp]: https://en.wikipedia.org/wiki/Real-Time_Messaging_Protocol
-[streampage]: https://home.cetacean.club/stream
I chose to do my setup with a few key parts:
@@ -58,13 +57,13 @@ that's involved in RTMP.
## stream.html
-I have a custom stream page set up [on my server][streampage] that has a
+I have a custom stream page set up on my server that has a
friendly little wrapper to the video player. [Here][streamhtml] is the source
code for it. It's very short and easy to follow. I have these files at
`/srv/http/home.cetacean.club` on my VPN server.
This wraps [hls.js][hlsjs] so that users on every browser I care to support can
-watch the stream as it happens.
+watch the stream as it happens.
## Caddy
@@ -76,7 +75,7 @@ home.cetacean.club {
# Set up automagic Let's Encrypt
tls me@xeiaso.net
- # Proxy the playlist, stream data
+ # Proxy the playlist, stream data
# and statistics to the rtmp server
proxy /hls http://127.0.0.1:8080
proxy /live http://127.0.0.1:8080
@@ -84,7 +83,7 @@ home.cetacean.club {
# make /stream.html show up as /stream
ext .html
-
+
# serve data out of /srv/http/home.cetacan.club
# you can put your HTTP document root
# anywhere you want, but I like it being
@@ -96,10 +95,10 @@ home.cetacean.club {
For more information on the Caddy configuration directives used here, see the
following:
-- [tls](https://caddyserver.com/v1/docs/tls)
-- [proxy](https://caddyserver.com/v1/docs/proxy)
-- [ext](https://caddyserver.com/v1/docs/ext)
-- [root](https://caddyserver.com/v1/docs/root)
+- [tls](https://web.archive.org/web/20200505225233/https://caddyserver.com/v1/docs/tls)
+- [proxy](https://web.archive.org/web/20200505225233/https://caddyserver.com/v1/docs/proxy)
+- [ext](https://web.archive.org/web/20200505225233/https://caddyserver.com/v1/docs/ext)
+- [root](https://web.archive.org/web/20200505225233/https://caddyserver.com/v1/docs/root)
## Caveats
@@ -114,7 +113,7 @@ automatically. I don't consider this a problem, as links can always be sent out
manually on social media platforms.
I hope this little overview of my setup was informative. I'll be
-streaming [there][streampage] very irregularly, mostly as time permits/the
+streaming there very irregularly, mostly as time permits/the
spirit moves me. I plan to stream art, gaming and code.
Thanks for reading, have a good day.
diff --git a/blog/various-updates-2020-11-18.markdown b/blog/various-updates-2020-11-18.markdown
index fed18c9..3e39001 100644
--- a/blog/various-updates-2020-11-18.markdown
+++ b/blog/various-updates-2020-11-18.markdown
@@ -201,7 +201,7 @@ which will implicitly pull from the Docker Hub. This can lead to bad things.
If you would like to have a call with me for examining your process for building
Docker images in CI and get a list of actionable suggestions for how to work
around this, [contact me](/contact) so that we can discuss pricing and
-scheduling.
+scheduling.
I have been using Docker for my entire professional career (way back since
Docker required you to recompile your kernel to enable cgroup support in public
@@ -216,7 +216,8 @@ something out.
Here's hoping that the immigration purgatory ends soon. I'm lucky enough to have
enough cash built up that I can weather this jobless month. I've been using this
time to work on personal projects (like mi and
-[wasmcloud](https://wasmcloud.app)) and better myself. I've also done a little
+[wasmcloud](https://tulpa.dev/within/wasmcloud)) and better myself.
+I've also done a little
writing that I plan to release in the future after I clean it up.
In retrospect I probably should have done [NaNoWriMo](https://nanowrimo.org/)
diff --git a/blog/vtubing-linux-2021-01-15.markdown b/blog/vtubing-linux-2021-01-15.markdown
index 3a21b39..a557dcd 100644
--- a/blog/vtubing-linux-2021-01-15.markdown
+++ b/blog/vtubing-linux-2021-01-15.markdown
@@ -75,7 +75,8 @@ setting various weird environment variables, setting build overrides, it was a
catastrophe.
Other people have reported that you need to use
-[Lutris](https://dumbotaku.com/info/401) to install and use VSeeFace on Linux.
+[Lutris](https://web.archive.org/web/20220830184802/https://dumbotaku.com/info/401)
+to install and use VSeeFace on Linux.
This did not work. This did not work at all. Trying to do it this way on a NixOS
machine was an absolute waste of my time and was demoralizing and frustrating.
diff --git a/blog/waifud-plans-2021-06-19.markdown b/blog/waifud-plans-2021-06-19.markdown
index 364e437..4e39701 100644
--- a/blog/waifud-plans-2021-06-19.markdown
+++ b/blog/waifud-plans-2021-06-19.markdown
@@ -62,10 +62,11 @@ here](https://github.com/Xe/waifud). It is released under the terms of the
permissive [Be Gay, Do Crimes](https://github.com/Xe/waifud/blob/main/LICENSE)
license, which should sufficiently scare people away for now while I implement
the service. The biggest thing in the repo right now is
-[`mkvm`](https://github.com/Xe/waifud/tree/main/cmd/mkvm), which is essentially
+[`mkvm`](https://github.com/Xe/waifud/tree/df8e362034e3923158813a9260cf9d3cf399ebf6/cmd/mkvm),
+which is essentially
the prototype of this project. It downloads a cloud template, injects it into a
ZFS zvol and then configures libvirt to use that ZFS zvol as the root filesystem
-of the virtual machine.
+of the virtual machine.
This tool works great and I use it very often both personally and in work
settings, however one of the biggest problems that it has is that it assumes
@@ -77,7 +78,7 @@ I'm still pondering options.
I would also like to have some kind of web management interface for waifud.
Historically frontend web development has been one of my biggest weaknesses. I
-would like to use [Alpine.js](https://alpinejs.dev) to make an admin panel.
+would like to use [Alpine.js](https://alpinejs.dev) to make an admin panel.
At a high level, I want waifuctl to have the following features:
diff --git a/blog/why-i-use-suckless-tools-2020-06-05.markdown b/blog/why-i-use-suckless-tools-2020-06-05.markdown
index cf7ac49..a847422 100644
--- a/blog/why-i-use-suckless-tools-2020-06-05.markdown
+++ b/blog/why-i-use-suckless-tools-2020-06-05.markdown
@@ -138,8 +138,8 @@ arbitrarily, signals with dwmc and other overhead like that.
The rest of my desktop environment is built up using a few other tools that
build on top of dwm. You can see the NixOS modules I've made for it
-[here](https://github.com/Xe/nixos-configs/blob/master/common/programs/dwm.nix)
-and [here](https://github.com/Xe/nixos-configs/blob/master/common/users/cadey/dwm.nix):
+[here](https://github.com/Xe/nixos-configs/blob/f9303523e0eacd75aef96c55626d6aac3c04007f/common/programs/dwm.nix)
+and [here](https://github.com/Xe/nixos-configs/blob/f9303523e0eacd75aef96c55626d6aac3c04007f/common/users/cadey/dwm.nix):
- [xrandr](https://wiki.archlinux.org/index.php/Xrandr) to set up my multiple
monitors and rotation for them
diff --git a/blog/windows-pain-2021-03-03.markdown b/blog/windows-pain-2021-03-03.markdown
index 6b16e2b..94acde9 100644
--- a/blog/windows-pain-2021-03-03.markdown
+++ b/blog/windows-pain-2021-03-03.markdown
@@ -242,7 +242,7 @@ scripts. I personally went with `RemoteSigned`.
I use stuff cribbed from [oh my fish](https://github.com/oh-my-fish/oh-my-fish)
for my fish prompt. I googled "oh my powershell" and hoped I would get lucky
with finding some nice batteries-included tools.
-[I got lucky](https://ohmyposh.dev/docs/installation/).
+[I got lucky](https://ohmyposh.dev/docs).
After looking through the options I saw a theme named `sorin` that looks like
this:
diff --git a/talks/thinking-different-2018-11-03.markdown b/talks/thinking-different-2018-11-03.markdown
index 29ccd5e..6aef553 100644
--- a/talks/thinking-different-2018-11-03.markdown
+++ b/talks/thinking-different-2018-11-03.markdown
@@ -6,6 +6,6 @@ slides_link: /static/talks/thinking-different.pdf
# Thinking Different
-A look over [ilo Kesi](https://github.com/Xe/x/tree/master/discord/ilo-kesi), a chatbot of mine that parses commands from the grammar of [Toki Pona](http://tokipona.org).
+A look over [ilo Kesi](https://github.com/Xe/x/tree/master/discord/ilo-kesi), a chatbot of mine that parses commands from the grammar of [Toki Pona](https://tokipona.org).
Originally presented privately at an internal work get-together for Heroku.