The code and data behind xeiaso.net
5
fork

Configure Feed

Select the types of activity you want to include in your feed.

Domain move - change links to match (#518)

* Replace cdn.christine.website with cdn.xeiaso.net

* Replace me@christine.website with me@xeiaso.net

* Replace christine.website with xeiaso.net

* Replace christine dot website with xeiaso dot net

* Replace Christine Dodrill with Xe Iaso

* Update blog/fun-with-redirection-2021-09-22.markdown

* Update blog/ircd-k8s-2019-12-21.markdown

* Update blog/reconlangmo-6-lexicon-2020-05-22.markdown

Co-authored-by: Xe Iaso <me@xeiaso.net>

authored by

Stephen Wade
Xe Iaso
and committed by
GitHub
1d0413ce e9733ce6

+158 -159
+1 -1
Cargo.toml
··· 1 1 [package] 2 2 name = "xesite" 3 3 version = "2.4.0" 4 - authors = ["Xe Iaso <me@christine.website>"] 4 + authors = ["Xe Iaso <me@xeiaso.net>"] 5 5 edition = "2018" 6 6 build = "src/build.rs" 7 7 repository = "https://github.com/Xe/site"
+1 -1
LICENSE
··· 1 - Copyright (c) 2017-2021 Christine Dodrill <me@christine.website> 1 + Copyright (c) 2017-2022 Christine Dodrill <me@xeiaso.net> 2 2 3 3 This software is provided 'as-is', without any express or implied 4 4 warranty. In no event will the authors be held liable for any damages
+1 -1
blog/TLDR-rust-2020-09-19.markdown
··· 17 17 18 18 Also I'm happy to introduce Mara to the blog! 19 19 20 - [Hey, happy to be here! I'm Mara, a shark hacker from Christine's imagination. 20 + [Hey, happy to be here! I'm Mara, a shark hacker from Xe's imagination. 21 21 I'll interject with side information, challenge assertions and more! Thanks for 22 22 inviting me!](conversation://Mara/hacker) 23 23
+1 -1
blog/aegis-prometheus-2021-04-05.markdown
··· 6 6 - o11y 7 7 --- 8 8 9 - [*Last time in the christine dot website cinematic 9 + [*Last time in the xeiaso dot net cinematic 10 10 universe:*](https://xeiaso.net/blog/unix-domain-sockets-2021-04-01) 11 11 12 12 *Unix sockets started to be used to grace the cluster. Things were at peace.
+1 -1
blog/android-thoughts-2021-07-03.markdown
··· 37 37 and then I used it for the final testing on the app before I shipped it on the 38 38 Google Play store. I unboxed the phone, set it up, plugged it into my MacBook 39 39 and then hit "run" in Android Studio. The app installed instantly and I saw [the 40 - homepage for my site](https://cdn.christine.website/file/christine-static/blog/Screenshot_20210703-101654.png). 40 + homepage for my site](https://cdn.xeiaso.net/file/christine-static/blog/Screenshot_20210703-101654.png). 41 41 42 42 It was a magical experience. Me, someone that has no idea what they are doing 43 43 with Android app development was able to take an existing project I've poured
+1 -1
blog/backslash-kubernetes-2021-01-03.markdown
··· 155 155 capture this screenshot: 156 156 157 157 ![The error I was looking 158 - for](https://cdn.christine.website/file/christine-static/blog/Screen+Shot+2021-01-03+at+1.13.05+AM.png) 158 + for](https://cdn.xeiaso.net/file/christine-static/blog/Screen+Shot+2021-01-03+at+1.13.05+AM.png) 159 159 160 160 Then it hit me. I did the install on NixOS unstable. My other servers use NixOS 161 161 20.09. I had downgraded zfs and the older version of zfs couldn't mount the
+11 -11
blog/cloud-init-2021-06-04.markdown
··· 176 176 177 177 ![The first step of the "create a new virtual machine" wizard in virt-manager 178 178 with "manual install" 179 - selected](https://cdn.christine.website/file/christine-static/blog/20210604_06h43m27s_grim.png) 179 + selected](https://cdn.xeiaso.net/file/christine-static/blog/20210604_06h43m27s_grim.png) 180 180 181 181 </center> 182 182 ··· 188 188 189 189 ![The second step of the "create a new virtual machine" wizard in virt-manager 190 190 with "CentOS 7" selected as the OS the virtual machine will be 191 - running](https://cdn.christine.website/file/christine-static/blog/20210604_06h45m35s_grim.png) 191 + running](https://cdn.xeiaso.net/file/christine-static/blog/20210604_06h45m35s_grim.png) 192 192 193 193 </center> 194 194 ··· 199 199 200 200 ![The third step of the "create a new virtual machine" wizard in virt-manager 201 201 with 1024 MB of ram and 2 virtual CPU cores 202 - selected](https://cdn.christine.website/file/christine-static/blog/20210604_06h50m09s_grim.png) 202 + selected](https://cdn.xeiaso.net/file/christine-static/blog/20210604_06h50m09s_grim.png) 203 203 204 204 </center> 205 205 ··· 213 213 214 214 ![The fourth step of the "create a new virtual machine" wizard in virt-manager 215 215 with `/dev/zvol/rpool/safe/vms/mayhem` selected as the path to the 216 - disk](https://cdn.christine.website/file/christine-static/blog/20210604_06h53m58s_grim.png) 216 + disk](https://cdn.xeiaso.net/file/christine-static/blog/20210604_06h53m58s_grim.png) 217 217 218 218 </center> 219 219 ··· 225 225 ![The last step of the "create a new virtual machine" wizard in virt-manager, 226 226 setting the virtual machine name to "mayhem" and indicating that you want to 227 227 customize configuration before 228 - installation](https://cdn.christine.website/file/christine-static/blog/20210604_06h56m54s_grim.png) 228 + installation](https://cdn.xeiaso.net/file/christine-static/blog/20210604_06h56m54s_grim.png) 229 229 230 230 </center> 231 231 ··· 234 234 235 235 <center> 236 236 237 - ![](https://cdn.christine.website/file/christine-static/blog/20210604_06h58m53s_grim.png) 237 + ![](https://cdn.xeiaso.net/file/christine-static/blog/20210604_06h58m53s_grim.png) 238 238 239 239 </center> 240 240 ··· 242 242 243 243 <center> 244 244 245 - ![](https://cdn.christine.website/file/christine-static/blog/20210604_07h01m24s_grim.png) 245 + ![](https://cdn.xeiaso.net/file/christine-static/blog/20210604_07h01m24s_grim.png) 246 246 247 247 </center> 248 248 ··· 252 252 253 253 <center> 254 254 255 - ![](https://cdn.christine.website/file/christine-static/blog/20210604_07h05m28s_grim.png) 255 + ![](https://cdn.xeiaso.net/file/christine-static/blog/20210604_07h05m28s_grim.png) 256 256 257 257 </center> 258 258 ··· 415 415 416 416 <center> 417 417 <picture> 418 - <source srcset="https://cdn.christine.website/file/christine-static/stickers/cadey/percussive-maintenance.avif" type="image/avif"> 419 - <source srcset="https://cdn.christine.website/file/christine-static/stickers/cadey/percussive-maintenance.webp" type="image/webp"> 420 - <img src="https://cdn.christine.website/file/christine-static/stickers/cadey/percussive-maintenance.png" alt="Cadey is percussive-maintenance"> 418 + <source srcset="https://cdn.xeiaso.net/file/christine-static/stickers/cadey/percussive-maintenance.avif" type="image/avif"> 419 + <source srcset="https://cdn.xeiaso.net/file/christine-static/stickers/cadey/percussive-maintenance.webp" type="image/webp"> 420 + <img src="https://cdn.xeiaso.net/file/christine-static/stickers/cadey/percussive-maintenance.png" alt="Cadey is percussive-maintenance"> 421 421 </picture> 422 422 </center> 423 423
+3 -3
blog/convoluted-vrchat-gchat-setup-2021-02-24.markdown
··· 124 124 125 125 <center> 126 126 127 - ![](https://cdn.christine.website/file/christine-static/blog/2021-02-24-20-20-58.jpg) 127 + ![](https://cdn.xeiaso.net/file/christine-static/blog/2021-02-24-20-20-58.jpg) 128 128 129 129 </center> 130 130 ··· 136 136 137 137 <center> 138 138 139 - ![](https://cdn.christine.website/file/christine-static/blog/Eu6iR6jXUAQH0iq.jpeg) 139 + ![](https://cdn.xeiaso.net/file/christine-static/blog/Eu6iR6jXUAQH0iq.jpeg) 140 140 141 141 </center> 142 142 ··· 168 168 169 169 <center> 170 170 171 - ![Screenshot of the optimized world](https://cdn.christine.website/file/christine-static/blog/154306141_1368071216896631_2989259612329820447_o.jpg) 171 + ![Screenshot of the optimized world](https://cdn.xeiaso.net/file/christine-static/blog/154306141_1368071216896631_2989259612329820447_o.jpg) 172 172 173 173 </center> 174 174
-1
blog/creators-code-2018-09-18.markdown
··· 1 1 --- 2 2 title: "Creator's Code" 3 - author: Christine Dodrill 4 3 date: 2018-09-17 5 4 tags: 6 5 - release
+1 -1
blog/death-stranding-review-2019-11-11.markdown
··· 95 95 By [mmmintdesign](https://twitter.com/mmmintdesign) [source](https://twitter.com/mmmintdesign/status/1192856164331114497) 96 96 97 97 Score: 10 out of 10 98 - Christine Dodrill's Game of the Year 2019 98 + Xe Iaso's Game of the Year 2019
+2 -2
blog/dev-printerfact-2021-04-17.markdown
··· 220 220 }) 221 221 ``` 222 222 223 - [For those of you playing the christine dot website home game, you may want to 223 + [For those of you playing the xeiaso dot net home game, you may want to 224 224 edit the top of that file for your own projects to get its `pkgs` with something 225 225 like `pkgs = <nixpkgs>;`. The `sources.pkgs` thing is being used here to jive 226 226 with niv.](conversation://Mara/hacker?smol) ··· 340 340 module! { 341 341 type: PrinterFacts, 342 342 name: b"printerfacts", 343 - author: b"Christine Dodrill <me@christine.website>", 343 + author: b"Xe Iaso <me@xeiaso.net>", 344 344 description: b"/dev/printerfact support because I can", 345 345 license: b"GPL v2", 346 346 params: {
+1 -1
blog/emoji-not-language-2021-07-14.markdown
··· 118 118 119 119 <center> 120 120 121 - ![](https://cdn.christine.website/file/christine-static/blog/friday_deploy.png) 121 + ![](https://cdn.xeiaso.net/file/christine-static/blog/friday_deploy.png) 122 122 123 123 </center> 124 124
+1 -1
blog/fun-with-redirection-2021-09-22.markdown
··· 337 337 machine using a command like this: 338 338 339 339 ``` 340 - $ tar cz ./blog | ssh pneuma tar xz -C ~/code/christine.website/blog 340 + $ tar cz ./blog | ssh pneuma tar xz -C ~/code/xeiaso.net/blog 341 341 ``` 342 342 343 343 This will run `tar` to create a compressed copy of the `./blog` folder and then
+1 -1
blog/go-servemux-slash-2021-11-04.markdown
··· 155 155 156 156 <center> 157 157 158 - ![](https://cdn.christine.website/file/christine-static/stickers/cadey/percussive-maintenance.png) 158 + ![](https://cdn.xeiaso.net/file/christine-static/stickers/cadey/percussive-maintenance.png) 159 159 160 160 </center> 161 161
+8 -8
blog/how-http-requests-work-2020-05-19.markdown
··· 10 10 Reading this webpage is possible because of millions of hours of effort with 11 11 tens of thousands of actors across thousands of companies. At some level it's a 12 12 minor miracle that this all works at all. Here's a preview into the madness that 13 - goes into hitting enter on christine.website and this website being loaded. 13 + goes into hitting enter on xeiaso.net and this website being loaded. 14 14 15 15 ## Beginnings 16 16 ··· 22 22 23 23 The browser selects the memory region normally reserved for the address bar. The 24 24 browser then parses this string as an [RFC 3986][rfc3986] URI and scrapes out 25 - the protocol (https), hostname (christine.website) and path (/). The browser 25 + the protocol (https), hostname (xeiaso.net) and path (/). The browser 26 26 then uses this information to create an abstract HTTP request object with the 27 - Host header set to christine.website, HTTP method (GET), and path set to the 27 + Host header set to xeiaso.net, HTTP method (GET), and path set to the 28 28 path. This request object then passes through various layers of credential 29 29 storage and middleware to add the appropriate cookies and other headers in order 30 30 to tell my website what language it should localize the response to, what ··· 35 35 36 36 ## Connections 37 37 38 - The browser then checks if it has a connection to christine.website open 38 + The browser then checks if it has a connection to xeiaso.net open 39 39 already. If it does not, then it creates a new one. It creates a new connection 40 - by figuring out what the IP address of christine.website is using [DNS][dns]. A 40 + by figuring out what the IP address of xeiaso.net is using [DNS][dns]. A 41 41 DNS request is made over [UDP][udp] on port 53 to the DNS server configured in 42 42 the operating system (such as 8.8.8.8, 1.1.1.1 or 75.75.75.75). The UDP 43 43 connection is created using operating system-dependent system calls and a DNS ··· 80 80 round trip. It may take one or more retries for the DNS information to get to 81 81 the remote server and back, but it usually works the first time. The response to 82 82 this request is cached based on the time-to-live specified in the DNS response. 83 - The response also contains the IP address of christine.website. 83 + The response also contains the IP address of xeiaso.net. 84 84 85 85 ## Security 86 86 ··· 98 98 However, this data is UNENCRYPTED by default. [Transport Layer Security][tls] is 99 99 used to encrypt this data so prying eyes can't look into it. TLS has its own 100 100 handshake too. The session is established by sending a TLS ClientHello packet 101 - with the domain name (christine.website), the list of ciphers the client 101 + with the domain name (xeiaso.net), the list of ciphers the client 102 102 supports, any application layer protocols the client supports (like HTTP/2) and 103 103 the list of TLS versions that the client supports. This information is sent over 104 104 the wire to the remote server using that entire long and complicated process ··· 143 143 Now, the request finally gets to the application server. This TCP session is 144 144 accepted by the application server and the headers are read into memory. The 145 145 path is read by the application server and the correct handler is chosen. The 146 - HTML for the front page of christine.website is rendered and written to the TCP 146 + HTML for the front page of xeiaso.net is rendered and written to the TCP 147 147 session and travels to the load balancer, gets encrypted with TLS, the encrypted 148 148 HTML gets sent back over the internet to your browser and then your browser 149 149 decrypts it and starts to parse and display the website. The browser will run
+6 -6
blog/how-mara-works-2020-09-30.markdown
··· 119 119 120 120 ```html 121 121 <picture> 122 - <source srcset="https://cdn.christine.website/file/christine-static/stickers/@character.to_lowercase()/@(mood).avif" type="image/avif"> 123 - <source srcset="https://cdn.christine.website/file/christine-static/stickers/@character.to_lowercase()/@(mood).webp" type="image/webp"> 124 - <img src="https://cdn.christine.website/file/christine-static/stickers/@character.to_lowercase()/@(mood).png" alt="@character is @mood"> 122 + <source srcset="https://cdn.xeiaso.net/file/christine-static/stickers/@character.to_lowercase()/@(mood).avif" type="image/avif"> 123 + <source srcset="https://cdn.xeiaso.net/file/christine-static/stickers/@character.to_lowercase()/@(mood).webp" type="image/webp"> 124 + <img src="https://cdn.xeiaso.net/file/christine-static/stickers/@character.to_lowercase()/@(mood).png" alt="@character is @mood"> 125 125 </picture> 126 126 ``` 127 127 ··· 134 134 but in short here are how each of the formats looks next to its filesize 135 135 information: 136 136 137 - ![](https://cdn.christine.website/file/christine-static/blog/mara_png.png) 138 - ![](https://cdn.christine.website/file/christine-static/blog/mara_webp.png) 139 - ![](https://cdn.christine.website/file/christine-static/blog/mara_avif.png) 137 + ![](https://cdn.xeiaso.net/file/christine-static/blog/mara_png.png) 138 + ![](https://cdn.xeiaso.net/file/christine-static/blog/mara_webp.png) 139 + ![](https://cdn.xeiaso.net/file/christine-static/blog/mara_avif.png) 140 140 141 141 The 142 142 [avif](https://reachlightspeed.com/blog/using-the-new-high-performance-avif-image-format-on-the-web-today/)
+1 -1
blog/i-was-wrong-about-nix-2020-02-10.markdown
··· 135 135 buildGoPackage rec { 136 136 name = "christinewebsite-HEAD"; 137 137 version = "latest"; 138 - goPackagePath = "christine.website"; 138 + goPackagePath = "xeiaso.net"; 139 139 src = ./.; 140 140 141 141 goDeps = ./deps.nix;
+1 -1
blog/identity-model-software-2021-01-31.markdown
··· 125 125 126 126 ![A "terminator chases hiding terrified anime girl" meme with the terminator 127 127 labeled "Plural Systems" and the terrified anime girl labeled "Identity 128 - Systems"](https://cdn.christine.website/file/christine-static/blog/plural-terminator-meme.jpg) 128 + Systems"](https://cdn.xeiaso.net/file/christine-static/blog/plural-terminator-meme.jpg) 129 129 130 130 </center> 131 131
+4 -4
blog/irc-stuff-nixos-2021-05-29.markdown
··· 61 61 62 62 And you should see the default UI: 63 63 64 - ![The default WeeChat UI](https://cdn.christine.website/file/christine-static/blog/20210529_11h43m43s_grim.png) 64 + ![The default WeeChat UI](https://cdn.xeiaso.net/file/christine-static/blog/20210529_11h43m43s_grim.png) 65 65 66 66 ### Customization 67 67 ··· 131 131 132 132 The result should look like this: 133 133 134 - ![My WeeChat theme in action](https://cdn.christine.website/file/christine-static/blog/20210529_12h05m05s_grim.png) 134 + ![My WeeChat theme in action](https://cdn.xeiaso.net/file/christine-static/blog/20210529_12h05m05s_grim.png) 135 135 136 136 ### Plugins 137 137 ··· 292 292 293 293 Then you can check the settings with `/set irc.server.liberachat.*`: 294 294 295 - ![](https://cdn.christine.website/file/christine-static/blog/20210529_13h16m23s_grim.png) 295 + ![](https://cdn.xeiaso.net/file/christine-static/blog/20210529_13h16m23s_grim.png) 296 296 297 297 More than likely the defaults are fine, however you can customize them with 298 298 `/set` if you want. ··· 458 458 459 459 Once you've deployed this to a server, try to open the page in your browser: 460 460 461 - ![](https://cdn.christine.website/file/christine-static/blog/20210529_14h26m57s_grim.png) 461 + ![](https://cdn.xeiaso.net/file/christine-static/blog/20210529_14h26m57s_grim.png) 462 462 463 463 Then enter in the following details: 464 464
+1 -1
blog/ircd-k8s-2019-12-21.markdown
··· 25 25 Name = seaworld.yolo-swag.com 26 26 AdminInfo1 = ShadowNET Main Server 27 27 AdminInfo2 = New York, New York, USA 28 - AdminInfo3 = Cadey Ratio <me@christine.website> 28 + AdminInfo3 = Xe Iaso <me@xeiaso.net> 29 29 Info = Hosted on Kubernetes! 30 30 Listen = 0.0.0.0 31 31 MotdFile = /shadownet/motd
+7 -7
blog/metroid-dread-review-2021-10-10.markdown
··· 24 24 of seeing it happen. I thought that the Metroid series was dead. 25 25 26 26 ![The title 27 - screen](https://cdn.christine.website/file/christine-static/blog/010093801237c000_2021-10-10_13-36-33-107.png) 27 + screen](https://cdn.xeiaso.net/file/christine-static/blog/010093801237c000_2021-10-10_13-36-33-107.png) 28 28 29 29 Metroid games have always been commercial flops as far as the numbers go. The 30 30 games have never really been advertised that well and usually show up on ··· 36 36 level class in how to show the player how to do things without explicitly 37 37 telling them how to do them. 38 38 39 - ![](https://cdn.christine.website/file/christine-static/blog/010093801237c000_2021-10-09_23-55-10-764.png) 39 + ![](https://cdn.xeiaso.net/file/christine-static/blog/010093801237c000_2021-10-09_23-55-10-764.png) 40 40 41 41 This game is dripping with color, detail and brilliance in every room. Samus is 42 42 fluid and deadlier than ever. Movement flows from one jump into the next. The ··· 57 57 should have made at least one of those blocks obviously breakable. 58 58 59 59 ![Before breaking 60 - blocks](https://cdn.christine.website/file/christine-static/blog/010093801237c000_2021-10-10_13-51-46-261.png) 60 + blocks](https://cdn.xeiaso.net/file/christine-static/blog/010093801237c000_2021-10-10_13-51-46-261.png) 61 61 62 62 ![After breaking 63 - blocks](https://cdn.christine.website/file/christine-static/blog/010093801237c000_2021-10-10_13-51-56-949.png) 63 + blocks](https://cdn.xeiaso.net/file/christine-static/blog/010093801237c000_2021-10-10_13-51-56-949.png) 64 64 65 65 There is a subtle camera movement to telegraph it, but I feel that it's not 66 66 obvious enough. That may have been the point though. ··· 75 75 feels awesome when you land that hit.](conversation://Cadey/enby) 76 76 77 77 ![You are faced with overwhelming power, accept your 78 - helplessness.](https://cdn.christine.website/file/christine-static/blog/FBKBzqvVcAQBdn1.jpeg) 78 + helplessness.](https://cdn.xeiaso.net/file/christine-static/blog/FBKBzqvVcAQBdn1.jpeg) 79 79 80 80 <details> 81 81 <summary>EMMI related spoilers</summary> ··· 106 106 </details> 107 107 108 108 ![The lava tube in 109 - Artaria](https://cdn.christine.website/file/christine-static/blog/010093801237c000_2021-10-10_13-49-58-541.png) 109 + Artaria](https://cdn.xeiaso.net/file/christine-static/blog/010093801237c000_2021-10-10_13-49-58-541.png) 110 110 111 111 <details> 112 112 <summary>Boss spoilers</summary> ··· 132 132 preordered it. I didn't need to be convinced. Dread was real. 133 133 134 134 ![My Switch home 135 - screen](https://cdn.christine.website/file/christine-static/blog/FAoMNsEVcAQFjoC.jpeg) 135 + screen](https://cdn.xeiaso.net/file/christine-static/blog/FAoMNsEVcAQFjoC.jpeg) 136 136 137 137 It is now in my hands. I have played it. I loved almost every moment of it (save 138 138 the mishap in Cataris). I can't wait to see how speedruns develop for it. I bet
+2 -2
blog/minicompiler-lexing-2020-10-29.markdown
··· 20 20 [minicompiler]: https://github.com/Xe/TempleOS/blob/master/Demo/Lectures/MiniCompiler.HC 21 21 22 22 <video controls width="100%"> 23 - <source src="https://cdn.christine.website/file/christine-static/img/minicompiler/tmp.YDcgaHSb3z.webm" 23 + <source src="https://cdn.xeiaso.net/file/christine-static/img/minicompiler/tmp.YDcgaHSb3z.webm" 24 24 type="video/webm"> 25 - <source src="https://cdn.christine.website/file/christine-static/img/minicompiler/tmp.YDcgaHSb3z.mp4" 25 + <source src="https://cdn.xeiaso.net/file/christine-static/img/minicompiler/tmp.YDcgaHSb3z.mp4" 26 26 type="video/mp4"> 27 27 Sorry, your browser doesn't support embedded videos. 28 28 </video>
+2 -2
blog/my-homelab-2021-06-08.markdown
··· 171 171 Using KOS-MOS as the experimental machine again, I installed NixOS by hand and 172 172 took notes. Here's a scan of the notes I took: 173 173 174 - - [Page 1](https://cdn.christine.website/file/christine-static/blog/KOS-MOS+notes+Page+1.jpeg) 175 - - [Page 2](https://cdn.christine.website/file/christine-static/blog/KOS-MOS+notes+Page+2.jpeg) 174 + - [Page 1](https://cdn.xeiaso.net/file/christine-static/blog/KOS-MOS+notes+Page+1.jpeg) 175 + - [Page 2](https://cdn.xeiaso.net/file/christine-static/blog/KOS-MOS+notes+Page+2.jpeg) 176 176 177 177 I set up KOS-MOS to have three partitions: root, swap and the EFI system 178 178 partition. I then set up my ZFS datasets with the following pattern:
+1 -1
blog/nix-flakes-4-wsl-2022-05-01.markdown
··· 205 205 206 206 ![a browser window titled "amazing website xD" with the header "look at my 207 207 AMAZING WEBSITE" and content of "It's so cool 208 - \*twerks\*"](https://cdn.christine.website/file/christine-static/blog/Screenshot+2022-04-23+141937.png) 208 + \*twerks\*"](https://cdn.xeiaso.net/file/christine-static/blog/Screenshot+2022-04-23+141937.png) 209 209 210 210 ## Installing `gohello` 211 211
+2 -2
blog/nixops-services-2020-11-09.markdown
··· 276 276 ``` 277 277 278 278 <video controls width="100%"> 279 - <source src="https://cdn.christine.website/file/christine-static/img/nixops/tmp.Tr7HTFFd2c.webm" 279 + <source src="https://cdn.xeiaso.net/file/christine-static/img/nixops/tmp.Tr7HTFFd2c.webm" 280 280 type="video/webm"> 281 - <source src="https://cdn.christine.website/file/christine-static/img/nixops/tmp.Tr7HTFFd2c.mp4" 281 + <source src="https://cdn.xeiaso.net/file/christine-static/img/nixops/tmp.Tr7HTFFd2c.mp4" 282 282 type="video/mp4"> 283 283 Sorry, your browser doesn't support embedded videos. 284 284 </video>
+1 -1
blog/nixos-desktop-flow-2020-04-25.markdown
··· 181 181 pname = "christinewebsite"; 182 182 version = "latest"; 183 183 184 - goPackagePath = "christine.website"; 184 + goPackagePath = "xeiaso.net"; 185 185 src = ./.; 186 186 goDeps = ./nix/deps.nix; 187 187 allowGoReference = false;
+3 -3
blog/nixos-vr-hell-2021-12-02.markdown
··· 235 235 236 236 ![The SteamVR home, but the raw image that the headset sees. You do not want to 237 237 see this on your 238 - desktop.](https://cdn.christine.website/file/christine-static/blog/Screenshot+from+2021-12-02+07-31-01.png) 238 + desktop.](https://cdn.xeiaso.net/file/christine-static/blog/Screenshot+from+2021-12-02+07-31-01.png) 239 239 240 240 I told SteamVR to restart in "direct display" mode, but it was failing because 241 241 SteamVR couldn't restart due to a missing dynamic library problem: ··· 268 268 269 269 ![Error starting SteamVR: SteamVR failed to initialized for unknown reasons. 270 270 (Error: Shared IPC Compositor Invalid Connect Response 271 - (307))](https://cdn.christine.website/file/christine-static/blog/Screenshot+from+2021-11-30+22-36-04.png) 271 + (307))](https://cdn.xeiaso.net/file/christine-static/blog/Screenshot+from+2021-11-30+22-36-04.png) 272 272 273 273 This seems to be a sort of "catchall" error in SteamVR for when something really 274 274 wrong happens at lower parts of the stack. Googling for this mostly got people ··· 387 387 388 388 <center> 389 389 390 - ![](https://cdn.christine.website/file/christine-static/stickers/cadey/percussive-maintenance.png) 390 + ![](https://cdn.xeiaso.net/file/christine-static/stickers/cadey/percussive-maintenance.png) 391 391 392 392 </center> 393 393
+2 -2
blog/no-more-youtube-comments-2021-11-27.markdown
··· 8 8 9 9 I have disabled the ability for people to comment on my YouTube videos directly 10 10 on YouTube and the rest of this will explain why. If you want to contact me, 11 - please email me at me@christine.website or any of the other contact methods 12 - listed at christine.website/contact. 11 + please email me at me@xeiaso.net or any of the other contact methods 12 + listed at xeiaso.net/contact. 13 13 14 14 I use YouTube as a glorified file host for my videos. I use YouTube for this 15 15 because YouTube seems to have the longest staying power and seems to be stable
+1 -1
blog/pomodoro-2022-02-19.markdown
··· 21 21 22 22 Here is an example of one such pomodoro section: 23 23 24 - ![](https://cdn.christine.website/file/christine-static/blog/photo_2022-02-19_08-32-13.jpg) 24 + ![](https://cdn.xeiaso.net/file/christine-static/blog/photo_2022-02-19_08-32-13.jpg) 25 25 26 26 [What the heck are those scribbles? Those look like sick 27 27 noodles!](conversation://Numa/delet)
+6 -6
blog/progressive-webapp-conversion-2019-01-26.markdown
··· 39 39 40 40 This information will be used as the OS-level metadata for your progressive web app when it is installed. 41 41 42 - Here is an example web app manifest [from my portfolio site](https://github.com/Xe/site/blob/master/static/manifest.json). 42 + Here is an example web app manifest [from my portfolio site](https://github.com/Xe/site/blob/d7b817b22db9e10dbdfe97082ec2330e13cfff18/static/manifest.json). 43 43 44 44 ```json 45 45 { 46 - "name": "Christine Dodrill", 47 - "short_name": "Christine", 46 + "name": "Xeblog", 47 + "short_name": "Xeblog", 48 48 "theme_color": "#ffcbe4", 49 49 "background_color": "#fa99ca", 50 50 "display": "standalone", 51 51 "scope": "/", 52 - "start_url": "https://xeiaso.net/", 53 - "description": "Blog and Resume for Christine Dodrill", 52 + "start_url": "/", 53 + "description": "Blog and Resume for Xe Iaso", 54 54 "orientation": "any", 55 55 "icons": [ 56 56 { 57 - "src": "https://xeiaso.net/static/img/avatar.png", 57 + "src": "/static/img/avatar.png", 58 58 "sizes": "1024x1024" 59 59 } 60 60 ]
+10 -10
blog/prometheus-grafana-loki-nixos-2020-11-20.markdown
··· 121 121 "Save & Test". If there is an error, be sure to check the port number. 122 122 123 123 ![The Grafana UI for adding a data 124 - source](https://cdn.christine.website/file/christine-static/blog/Screenshot_20201120_145819.png) 124 + source](https://cdn.xeiaso.net/file/christine-static/blog/Screenshot_20201120_145819.png) 125 125 126 126 Now let's start getting some data into Prometheus with the node exporter. 127 127 ··· 195 195 on the host, something like this: 196 196 197 197 ![A graph of the amount of system memory that is available on the host 198 - chrysalis](https://cdn.christine.website/file/christine-static/blog/Screenshot_20201120_150328.png) 198 + chrysalis](https://cdn.xeiaso.net/file/christine-static/blog/Screenshot_20201120_150328.png) 199 199 200 200 If you want to query other fields, you can type in `node_` into the searchbox 201 201 and autocomplete will show what is available. For a full list of what is ··· 211 211 dashboard. It will look something like this: 212 212 213 213 ![An empty dashboard in 214 - Grafana](https://cdn.christine.website/file/christine-static/blog/Screenshot_20201120_151205.png) 214 + Grafana](https://cdn.xeiaso.net/file/christine-static/blog/Screenshot_20201120_151205.png) 215 215 216 216 In Grafana terminology, everything you see in a dashboard is inside a panel. 217 217 Let's create a new panel to keep track of memory usage for our server. Click 218 218 "Add New Panel" and you will get a screen that looks like this: 219 219 220 220 ![A Grafana panel configuration 221 - screen](https://cdn.christine.website/file/christine-static/blog/Screenshot_20201120_151609.png) 221 + screen](https://cdn.xeiaso.net/file/christine-static/blog/Screenshot_20201120_151609.png) 222 222 223 223 Let's make this keep track of free memory. Write "Memory Free" in the panel 224 224 title field on the right. Write the following query in the textbox next to the ··· 232 232 like this: 233 233 234 234 ![A populated 235 - graph](https://cdn.christine.website/file/christine-static/blog/Screenshot_20201120_152126.png) 235 + graph](https://cdn.xeiaso.net/file/christine-static/blog/Screenshot_20201120_152126.png) 236 236 237 237 This will show you how much memory is free on each machine you are monitoring 238 238 with Prometheus' node exporter. Now let's configure an alert for the amount of ··· 249 249 You can do that with a configuration like this: 250 250 251 251 ![The above configuration input to the Grafana 252 - UI](https://cdn.christine.website/file/christine-static/blog/Screenshot_20201120_153419.png) 252 + UI](https://cdn.xeiaso.net/file/christine-static/blog/Screenshot_20201120_153419.png) 253 253 254 254 Save the changes to apply this config. 255 255 ··· 258 258 It will only show up on the alerts page: 259 259 260 260 ![The alerts page with memory free alerts 261 - configured](https://cdn.christine.website/file/christine-static/blog/Screenshot_20201120_154027.png) 261 + configured](https://cdn.xeiaso.net/file/christine-static/blog/Screenshot_20201120_154027.png) 262 262 263 263 But we can add a notification channel to customize this. Click on the 264 264 Notification Channels tab and then click "New Channel". It should look something 265 265 like this: 266 266 267 267 ![Notification Channel 268 - configuration](https://cdn.christine.website/file/christine-static/blog/Screenshot_20201120_154317.png) 268 + configuration](https://cdn.xeiaso.net/file/christine-static/blog/Screenshot_20201120_154317.png) 269 269 270 270 You can send notifications to many services, but let's send one to Discord this 271 271 time. Acquire a Discord webhook link from somewhere and paste it in the Webhook ··· 359 359 the URL `http://127.0.0.1:3100`: 360 360 361 361 ![Loki Data Source 362 - configuration](https://cdn.christine.website/file/christine-static/blog/Screenshot_20201120_161610.png) 362 + configuration](https://cdn.xeiaso.net/file/christine-static/blog/Screenshot_20201120_161610.png) 363 363 364 364 Now that you have Loki set up, let's query it! Open the Explore view in Grafana 365 365 again, choose Loki as the source, and enter in the query `{job="systemd-journal"}`: 366 366 367 367 ![Loki 368 - search](https://cdn.christine.website/file/christine-static/blog/Screenshot_20201120_162043.png) 368 + search](https://cdn.xeiaso.net/file/christine-static/blog/Screenshot_20201120_162043.png) 369 369 370 370 [You can also add Loki queries like this to dashboards! Loki also lets you query by 371 371 systemd unit with the `unit` field. If you wanted to search for logs from
+1 -1
blog/reconlangmo-6-lexicon-2020-05-22.markdown
··· 125 125 version of it [here](http://lewa-book-devel.kahless.cetacean.club:43001/). This 126 126 will allow you to browse through the chapters of the eBook while it is being 127 127 written. Eventually this will be automatically deployed to my Kubernetes cluster 128 - and the book will be a subpath/subdomain of `lewa.christine.website`. 128 + and the book will be a subpath/subdomain of `lewa.within.website`. 129 129 130 130 I have created a system of defining words that allows you to focus on each word 131 131 at once, but then fit it back into the greater whole of the language. For
+2 -2
blog/rg280m-review.markdown
··· 13 13 console that I got recently to get my retro game fix on the go, the Anbernic 14 14 RG280M. 15 15 16 - ![A picture of the RG280M handheld](https://cdn.christine.website/file/christine-static/blog/E-d4eCMXoAgZUEz.jpeg) 16 + ![A picture of the RG280M handheld](https://cdn.xeiaso.net/file/christine-static/blog/E-d4eCMXoAgZUEz.jpeg) 17 17 18 18 People don't really expect this out of me for some reason, but I am a gamer. I 19 19 play a lot of games old and new, and I've wanted to get into some older games; ··· 66 66 OS and savedata. 67 67 68 68 ![A picture of the two TF/MicroSD 69 - cards](https://cdn.christine.website/file/christine-static/blog/E-d4NpyWEAoEgz7.jpeg) 69 + cards](https://cdn.xeiaso.net/file/christine-static/blog/E-d4NpyWEAoEgz7.jpeg) 70 70 71 71 [The "TF" acronym here means <a 72 72 href="https://appuals.com/what-is-tf-transflash-card-and-how-is-it-different-from-micro-sd/">TransFlash</a>,
+2 -2
blog/robocadey-2022-04-30.markdown
··· 25 25 medium. Let's take "Comedian" by Maurizio Cattelan for example: 26 26 27 27 ![A banana duct-taped to an artist's 28 - canvas](https://cdn.christine.website/file/christine-static/blog/merlin_165616527_d76f38fc-e45d-4913-9780-1cc939750197-superJumbo.jpg) 28 + canvas](https://cdn.xeiaso.net/file/christine-static/blog/merlin_165616527_d76f38fc-e45d-4913-9780-1cc939750197-superJumbo.jpg) 29 29 30 30 By my arbitrary definition above, this is art. This takes assumptions that you 31 31 have about paintings (you know, that they use paint on the canvas) and discards ··· 45 45 ![A picture of Death Stranding gameplay, showing the protagonist Sam Porter 46 46 Bridges attempting to climb a sheer cliff face using a rope that another player 47 47 left 48 - behind](https://cdn.christine.website/file/christine-static/blog/20220202215156_3.jpg) 48 + behind](https://cdn.xeiaso.net/file/christine-static/blog/20220202215156_3.jpg) 49 49 50 50 This game mixes very realistic scenery with a story about dead bodies turning 51 51 into antimatter and you being a UPS delivery person that saves America. This is
+1 -1
blog/rss-feed-generation-2017-03-29.markdown
··· 12 12 13 13 For RSS: `https://xeiaso.net/blog.rss` 14 14 15 - For Atom: `https://christine.webiste/blog.atom` 15 + For Atom: `https://xeiaso.net/blog.atom` 16 16 17 17 If there are any issues with this or the generated XML please [contact me](/contact) 18 18 and let me know so they can be resolved.
+1 -1
blog/rtmp-server-setup-2020-01-11.markdown
··· 74 74 ``` 75 75 home.cetacean.club { 76 76 # Set up automagic Let's Encrypt 77 - tls me@christine.website 77 + tls me@xeiaso.net 78 78 79 79 # Proxy the playlist, stream data 80 80 # and statistics to the rtmp server
+5 -5
blog/rust-crates-go-stdlib-2020-09-27.markdown
··· 80 80 ```console 81 81 $ env RUST_LOG=trace cargo run --example logger_test 82 82 Finished dev [unoptimized + debuginfo] target(s) in 0.07s 83 - Running `/home/cadey/code/christine.website/target/debug/logger_test` 83 + Running `/home/cadey/code/xeiaso.net/target/debug/logger_test` 84 84 TRACE logger_test > starting main 85 85 DEBUG logger_test > debug message 86 86 INFO logger_test > this is some information ··· 353 353 354 354 ```console 355 355 $ cargo run --example json 356 - Compiling xesite v2.0.1 (/home/cadey/code/christine.website) 356 + Compiling xesite v2.0.1 (/home/cadey/code/xeiaso.net) 357 357 Finished dev [unoptimized + debuginfo] target(s) in 0.43s 358 358 Running `target/debug/examples/json` 359 359 comment: Comment { ··· 433 433 434 434 ```console 435 435 $ cargo run --example http 436 - Compiling xesite v2.0.1 (/home/cadey/code/christine.website) 436 + Compiling xesite v2.0.1 (/home/cadey/code/xeiaso.net) 437 437 Finished dev [unoptimized + debuginfo] target(s) in 2.20s 438 438 Running `target/debug/examples/http` 439 439 comment: Comment { ··· 463 463 464 464 ```console 465 465 $ cargo run --example http_fail 466 - Compiling xesite v2.0.1 (/home/cadey/code/christine.website) 466 + Compiling xesite v2.0.1 (/home/cadey/code/xeiaso.net) 467 467 Finished dev [unoptimized + debuginfo] target(s) in 1.84s 468 - Running `/home/cadey/code/christine.website/target/debug/examples/http_fail` 468 + Running `/home/cadey/code/xeiaso.net/target/debug/examples/http_fail` 469 469 Error: HTTP status client error (404 Not Found) for url (https://xena.greedo.xeserv.us/files/comment2.json) 470 470 ``` 471 471
+2 -2
blog/scavenger-hunt-solution-2020-11-25.markdown
··· 128 128 onion URL. You should get a page that looks like this: 129 129 130 130 ![Mara's 131 - Realm](https://cdn.christine.website/file/christine-static/blog/Screenshot_20201125_101515.png) 131 + Realm](https://cdn.xeiaso.net/file/christine-static/blog/Screenshot_20201125_101515.png) 132 132 133 133 This shows some confusing combinations of letters and some hexadecimal text. 134 134 We'll get back to the hexadecimal text in a moment, but let's take a closer look ··· 154 154 155 155 Going to /test.wasm we get a WebAssembly download. I've uploaded a copy to my 156 156 blog's CDN 157 - [here](https://cdn.christine.website/file/christine-static/blog/test.wasm). 157 + [here](https://cdn.xeiaso.net/file/christine-static/blog/test.wasm). 158 158 159 159 ## Layer 4 160 160
+1 -1
blog/site-to-site-wireguard-part-3-2019-04-11.markdown
··· 22 22 23 23 ## What's a Certificate Authority? 24 24 25 - A TLS Certificate Authority is a certificate that is allowed to issue other certificates. These certificates are intended to strongly associate domain names (such as christine.website) to real people or organizations. In theory, the people or tools running the certificate authority do rigorous checking and validation of identities before a certificate is issued. Creating our own certificate authority allows us to create certificates that only select devices will trust as valid. By creating our own certificate authority and manually configuring devices to trust it, we sidestep the need to pay for certificates (mainly for the verification process to ensure you are who you say you are) or expose services to the public internet. 25 + A TLS Certificate Authority is a certificate that is allowed to issue other certificates. These certificates are intended to strongly associate domain names (such as xeiaso.net) to real people or organizations. In theory, the people or tools running the certificate authority do rigorous checking and validation of identities before a certificate is issued. Creating our own certificate authority allows us to create certificates that only select devices will trust as valid. By creating our own certificate authority and manually configuring devices to trust it, we sidestep the need to pay for certificates (mainly for the verification process to ensure you are who you say you are) or expose services to the public internet. 26 26 27 27 ### Why Should I Create One? 28 28
+2 -2
blog/site-update-2021-12-19.markdown
··· 43 43 44 44 Hopefully this should improve the contrast ratio a lot more. I've always wanted 45 45 this website to look a lot like [my emacs 46 - config](https://cdn.christine.website/file/christine-static/blog/Screenshot+from+2021-12-19+12-06-39.png), 46 + config](https://cdn.xeiaso.net/file/christine-static/blog/Screenshot+from+2021-12-19+12-06-39.png), 47 47 but these changes should hopefully reach a balance of readability and stylistic 48 48 choices to get across the vision I have for my website. 49 49 ··· 54 54 Sorry, but you may want to scroll past this section. At the time of writing I 55 55 don't currently have a good fallback set up for people that don't have 56 56 JavaScript enabled on their browser. If you have ideas, please [email 57 - me](mailto:me@christine.website) and let me know them. 57 + me](mailto:me@xeiaso.net) and let me know them. 58 58 59 59 </noscript> 60 60
+2 -2
blog/site-update-patron-page-fixed.markdown
··· 7 7 underlying issue was stupid enough that I feel like explaining it so you all can 8 8 learn from my mistake. 9 9 10 - <xeblog-conv name="Numa" mood="delet">For those of you playing the christine dot 11 - website home game, look 10 + <xeblog-conv name="Numa" mood="delet">For those of you playing the xeiaso dot 11 + net home game, look 12 12 [here](https://github.com/Xe/site/commit/e2b9f384bf4033eddf321b5b5020ac4847609b37) 13 13 to see the fix and play along!</xeblog-conv> 14 14
+2 -2
blog/social-media-mistake-2021-01-26.markdown
··· 84 84 85 85 <center> 86 86 87 - ![](https://cdn.christine.website/file/christine-static/blog/rmdA6xJ.jpg) 87 + ![](https://cdn.xeiaso.net/file/christine-static/blog/rmdA6xJ.jpg) 88 88 89 89 </center> 90 90 ··· 197 197 198 198 ![The old world is dying, and the new world struggles to be born: now is the 199 199 time of 200 - monsters.](https://cdn.christine.website/file/christine-static/blog/tumblr_e2c8ae84bcc1e8489d9c429f64c26aab_a6117f36_500.jpg) 200 + monsters.](https://cdn.xeiaso.net/file/christine-static/blog/tumblr_e2c8ae84bcc1e8489d9c429f64c26aab_a6117f36_500.jpg) 201 201 202 202 </center> 203 203
+1 -1
blog/social-quandry-devops-2022-03-17.markdown
··· 143 143 ![A three panel meme with an old man talking to a child. The child says "it 144 144 works on my machine". The old man replies with "then we'll ship your machine". 145 145 The last panel says "and that is how docker was 146 - born".](https://cdn.christine.website/file/christine-static/blog/1BDBBB94-7052-4E4C-AE32-CFEE4226CBA8.jpeg) 146 + born".](https://cdn.xeiaso.net/file/christine-static/blog/1BDBBB94-7052-4E4C-AE32-CFEE4226CBA8.jpeg) 147 147 148 148 In a way, Docker is one of the perfect examples of the devops philosophy. It 149 149 allows developers to have their own custom versions of everything. They can use
+3 -3
blog/unix-domain-sockets-2021-04-01.markdown
··· 323 323 <center> 324 324 325 325 ![A picture of the nginx "502 Bad Gateway" error message with a man scolding a 326 - router](https://cdn.christine.website/file/christine-static/blog/57f66e907bb62.jpeg) 326 + router](https://cdn.xeiaso.net/file/christine-static/blog/57f66e907bb62.jpeg) 327 327 328 328 </center> 329 329 ··· 371 371 372 372 <center> 373 373 374 - ![](https://cdn.christine.website/file/christine-static/stickers/cadey/percussive-maintenance.png) 374 + ![](https://cdn.xeiaso.net/file/christine-static/stickers/cadey/percussive-maintenance.png) 375 375 376 376 </center> 377 377 378 378 --- 379 379 380 380 I'm experimenting with a new "smol" mode for the Mara interludes as well as 381 - introducing a few more characters to the christine dot website cinematic 381 + introducing a few more characters to the xeiaso dot net cinematic 382 382 universe. Please do let me know how this works out for you. I think I have the 383 383 sizes optimized for mobile usage better, but [contributions to fix my horrible 384 384 CSS](https://github.com/Xe/site/blob/main/css/shim.css) would really, really,
+2 -2
blog/various-updates-2020-11-18.markdown
··· 141 141 yesterday, and I got to work soldering it up with some switches and applying the 142 142 keycaps. 143 143 144 - ![Me soldering the Gergoplex](https://cdn.christine.website/file/christine-static/img/keeb/gergoplex/EnEYNxvW4AEfWcH.jpg) 144 + ![Me soldering the Gergoplex](https://cdn.xeiaso.net/file/christine-static/img/keeb/gergoplex/EnEYNxvW4AEfWcH.jpg) 145 145 146 - ![A glory shot of the Gergoplex](https://cdn.christine.website/file/christine-static/img/keeb/gergoplex/Elm3dN8XUAAYHws.jpg) 146 + ![A glory shot of the Gergoplex](https://cdn.xeiaso.net/file/christine-static/img/keeb/gergoplex/Elm3dN8XUAAYHws.jpg) 147 147 148 148 I picked the Pro Red linear switches with a 35 gram spring in them (read: they 149 149 need 35 grams of force to actuate, which is lighter than most switches) and
+10 -10
blog/vrchat-avatar-to-vrm-vtubing-2022-01-02.markdown
··· 62 62 "Import Package" menu and then click on "Custom Package" and select each of the 63 63 UnityPackage files you downloaded. 64 64 65 - ![](https://cdn.christine.website/file/christine-static/blog/Screenshot+2022-01-02+153934.png) 65 + ![](https://cdn.xeiaso.net/file/christine-static/blog/Screenshot+2022-01-02+153934.png) 66 66 67 67 ### `manifest.json` Install Method 68 68 ··· 109 109 When you install the Unity VRM plugins, you should have a new "VRM0" menu in 110 110 your Unity menu bar. Click on it and select "Export UniVRM-0.80.0". 111 111 112 - ![](https://cdn.christine.website/file/christine-static/blog/Screenshot+2022-01-02+112733.png) 112 + ![](https://cdn.xeiaso.net/file/christine-static/blog/Screenshot+2022-01-02+112733.png) 113 113 114 114 A new window will open titled "VRM Exporter". 115 115 116 - ![](https://cdn.christine.website/file/christine-static/blog/Screenshot+2022-01-02+113005.png) 116 + ![](https://cdn.xeiaso.net/file/christine-static/blog/Screenshot+2022-01-02+113005.png) 117 117 118 118 Change the language to "En" (English) so that you can read the error and warning 119 119 messages. Then fill out the title, version and author information and export ··· 122 122 [Strictly speaking, you don't NEED to use your desktop, however that's where I 123 123 put intermediate files for things like this.](conversation://Mara/hacker) 124 124 125 - ![](https://cdn.christine.website/file/christine-static/blog/Screenshot+2022-01-02+113040.png) 125 + ![](https://cdn.xeiaso.net/file/christine-static/blog/Screenshot+2022-01-02+113040.png) 126 126 127 127 ## Actually Making Your VRM Shine 128 128 ··· 137 137 for a moment while everything gets crunched and you will have a shiny new prefab 138 138 in your project. 139 139 140 - ![](https://cdn.christine.website/file/christine-static/blog/Screenshot+2022-01-02+113833.png) 140 + ![](https://cdn.xeiaso.net/file/christine-static/blog/Screenshot+2022-01-02+113833.png) 141 141 142 142 Drag that prefab into the scene and then click on it to open its inspector. 143 143 144 - ![](https://cdn.christine.website/file/christine-static/blog/Screenshot+2022-01-02+114246.png) 144 + ![](https://cdn.xeiaso.net/file/christine-static/blog/Screenshot+2022-01-02+114246.png) 145 145 146 146 Reset its position to 0,0,0 so that it's in the center of the world. 147 147 148 - ![](https://cdn.christine.website/file/christine-static/blog/Screenshot+2022-01-02+114319.png) 148 + ![](https://cdn.xeiaso.net/file/christine-static/blog/Screenshot+2022-01-02+114319.png) 149 149 150 150 ### Shaders 151 151 ··· 155 155 Japanese VTubers on YouTube. This is going to require some trial and error in 156 156 that annoying "draw the rest of the owl" kind of way. 157 157 158 - ![](https://cdn.christine.website/file/christine-static/blog/Screenshot+2022-01-02+114723.png) 158 + ![](https://cdn.xeiaso.net/file/christine-static/blog/Screenshot+2022-01-02+114723.png) 159 159 160 160 ### Blendshapes 161 161 ··· 179 179 different VRM animations that you can customize. The big ones are the speech 180 180 parts `A`, `I`, `U`, `E` and `O`. These will form the basis of your VTuber vibe. 181 181 182 - ![](https://cdn.christine.website/file/christine-static/blog/Screenshot+2022-01-02+120248.png) 182 + ![](https://cdn.xeiaso.net/file/christine-static/blog/Screenshot+2022-01-02+120248.png) 183 183 184 184 Start with `A`. This correlates to the 185 185 [IPA](https://en.wikipedia.org/wiki/International_Phonetic_Alphabet) vowel /a/, ··· 187 187 bottom of your mouth. Open the `A` blendshape and expand the "Body" dropdown. 188 188 The slider `vrc.v_aa` correlates to this sound, so set it to 100. 189 189 190 - ![](https://cdn.christine.website/file/christine-static/blog/Screenshot+2022-01-02+120745.png) 190 + ![](https://cdn.xeiaso.net/file/christine-static/blog/Screenshot+2022-01-02+120745.png) 191 191 192 192 The rest of the vowels should be customized in the same way, here is a small 193 193 table of what they are called in the blendshapes folder, the IPA for them and
+1 -1
blog/vtubing-setup-2022-01-13.markdown
··· 142 142 model](/blog/vrchat-avatar-to-vrm-vtubing-2022-01-02) that I converted from 143 143 VRChat, the VSeeFace UI looks something like this: 144 144 145 - ![](https://cdn.christine.website/file/christine-static/blog/Screenshot+2022-01-12+204631.png) 145 + ![](https://cdn.xeiaso.net/file/christine-static/blog/Screenshot+2022-01-12+204631.png) 146 146 147 147 The green point cloud you see on the left of this is the data that VSeeFace is 148 148 inferring from the webcam data. It uses that to pick out a small set of
+1 -1
blog/waifud-progress-2022-02-06.markdown
··· 243 243 244 244 <center> 245 245 246 - ![Cadey bashing a sever rack with a wrench](https://cdn.christine.website/file/christine-static/stickers/cadey/percussive-maintenance.png) 246 + ![Cadey bashing a sever rack with a wrench](https://cdn.xeiaso.net/file/christine-static/stickers/cadey/percussive-maintenance.png) 247 247 248 248 </center> 249 249
+1 -1
blog/wasmcloud-progress-domains-2020-10-31.markdown
··· 169 169 The symbol/number layer on my Moonlander has been _so good_. It looks something 170 170 like this: 171 171 172 - ![](https://cdn.christine.website/file/christine-static/blog/m5Id6Qs.png) 172 + ![](https://cdn.xeiaso.net/file/christine-static/blog/m5Id6Qs.png) 173 173 174 174 And it makes using programming sigils _so much easier_. I don't have to stray 175 175 far from the homerow to hit the most common ones. The only one that I still have
+1 -1
blog/windows-pain-2021-03-03.markdown
··· 247 247 After looking through the options I saw a theme named `sorin` that looks like 248 248 this: 249 249 250 - ![the sorin theme in action](https://cdn.christine.website/file/christine-static/blog/Screenshot+2021-03-03+231114.png) 250 + ![the sorin theme in action](https://cdn.xeiaso.net/file/christine-static/blog/Screenshot+2021-03-03+231114.png) 251 251 252 252 ### Project-local Dependencies 253 253
+9 -9
blog/xeact-0.0.69-2021-11-18.markdown
··· 204 204 <div class="conversation"> 205 205 <div class="conversation-picture conversation-smol"> 206 206 <picture> 207 - <source srcset="https://cdn.christine.website/file/christine-static/stickers/mara/hacker.avif" type="image/avif"> 208 - <source srcset="https://cdn.christine.website/file/christine-static/stickers/mara/hacker.webp" type="image/webp"> 209 - <img src="https://cdn.christine.website/file/christine-static/stickers/mara/hacker.png" alt="Mara is hacker"> 207 + <source srcset="https://cdn.xeiaso.net/file/christine-static/stickers/mara/hacker.avif" type="image/avif"> 208 + <source srcset="https://cdn.xeiaso.net/file/christine-static/stickers/mara/hacker.webp" type="image/webp"> 209 + <img src="https://cdn.xeiaso.net/file/christine-static/stickers/mara/hacker.png" alt="Mara is hacker"> 210 210 </picture> 211 211 </div> 212 212 <div class="conversation-chat">&lt;<b>Mara</b>&gt; These are some words and I am writing them.</div> ··· 227 227 h("div", {className: "conversation"}, [ 228 228 h("div", {className: "conversation-picture conversation-smol"}, [ 229 229 h("picture", {}, [ 230 - h("source", {type: "image/avif", srcset: `https://cdn.christine.website/file/christine-static/stickers/${who.toLowerCase()}/${mood}.avif`}), 231 - h("source", {type: "image/webp", srcset: `https://cdn.christine.website/file/christine-static/stickers/${who.toLowerCase()}/${mood}.webp`}), 232 - h("img", {alt: `${who} is ${mood}`, src: `https://cdn.christine.website/file/christine-static/stickers/${who.toLowerCase()}/${mood}.png`}) 230 + h("source", {type: "image/avif", srcset: `https://cdn.xeiaso.net/file/christine-static/stickers/${who.toLowerCase()}/${mood}.avif`}), 231 + h("source", {type: "image/webp", srcset: `https://cdn.xeiaso.net/file/christine-static/stickers/${who.toLowerCase()}/${mood}.webp`}), 232 + h("img", {alt: `${who} is ${mood}`, src: `https://cdn.xeiaso.net/file/christine-static/stickers/${who.toLowerCase()}/${mood}.png`}) 233 233 ]) 234 234 ]), 235 235 h("div", {className: "conversation-chat"}, [ ··· 253 253 h("div", {className: "conversation"}, [ 254 254 h("div", {className: "conversation-picture conversation-smol"}, [ 255 255 h("picture", {}, [ 256 - h("source", {type: "image/avif", srcset: `https://cdn.christine.website/file/christine-static/stickers/${who.toLowerCase()}/${mood}.avif`}), 257 - h("source", {type: "image/webp", srcset: `https://cdn.christine.website/file/christine-static/stickers/${who.toLowerCase()}/${mood}.webp`}), 258 - h("img", {alt: `${who} is ${mood}`, src: `https://cdn.christine.website/file/christine-static/stickers/${who.toLowerCase()}/${mood}.png`}) 256 + h("source", {type: "image/avif", srcset: `https://cdn.xeiaso.net/file/christine-static/stickers/${who.toLowerCase()}/${mood}.avif`}), 257 + h("source", {type: "image/webp", srcset: `https://cdn.xeiaso.net/file/christine-static/stickers/${who.toLowerCase()}/${mood}.webp`}), 258 + h("img", {alt: `${who} is ${mood}`, src: `https://cdn.xeiaso.net/file/christine-static/stickers/${who.toLowerCase()}/${mood}.png`}) 259 259 ]) 260 260 ]), 261 261 h("div", {className: "conversation-chat"}, [
+1 -1
blog/xesite-app-stores-2021-06-26.markdown
··· 41 41 I have also been prototyping an Android app that is currently in review on the 42 42 Google Play store, but if you want to test drive it now, you can download the 43 43 APK 44 - [here](https://cdn.christine.website/file/christine-static/apk/christine.website-1.0.3.1-1.apk). 44 + [here](https://cdn.xeiaso.net/file/christine-static/apk/christine.website-1.0.3.1-1.apk). 45 45 It is currently just a webview pointing to my website and that's all it really 46 46 needs to be. The rest of the magic will happen in the background after you 47 47 explicitly opt-in to push notifications or whatever once I figure out how to do
+5 -5
blog/zsa-moonlander-first-impressions-2020-10-27.markdown
··· 14 14 than normal, I'm still getting used to this. 15 15 16 16 ![a picture of the keyboard on my 17 - desk](https://cdn.christine.website/file/christine-static/img/keeb/ElVbBm_XUAcVhOg.jpg) 17 + desk](https://cdn.xeiaso.net/file/christine-static/img/keeb/ElVbBm_XUAcVhOg.jpg) 18 18 19 19 The Moonlander is a weird keyboard. I knew that it would be odd from the get-go 20 20 (split ergonomic keyboards have this reputation for a reason), but I was ··· 44 44 really nice effects like this: 45 45 46 46 ![The left hand of my steno 47 - layout](https://cdn.christine.website/file/christine-static/img/keeb/ElTG7QSW0AEqXeE.jpg) 47 + layout](https://cdn.xeiaso.net/file/christine-static/img/keeb/ElTG7QSW0AEqXeE.jpg) 48 48 49 49 However brown colors don't come out as well as I'd hoped: 50 50 51 51 ![My media layer that mostly has brown lighting, this looks a bit better in the 52 - dark](https://cdn.christine.website/file/christine-static/img/keeb/ElVdFKoX0AE_dAA.jpg) 52 + dark](https://cdn.xeiaso.net/file/christine-static/img/keeb/ElVdFKoX0AE_dAA.jpg) 53 53 54 54 I am not sure how I feel about the armrests. On one hand they feel a bit cold 55 55 (context: it is currently 1.57 degrees outside and I'm wearing a hoodie at my ··· 66 66 As an added bonus, here is the `if err != nil` key in action: 67 67 68 68 <video controls width="100%"> 69 - <source src="https://cdn.christine.website/file/christine-static/img/keeb/tmp.ZdCemPUcnd.webm" 69 + <source src="https://cdn.xeiaso.net/file/christine-static/img/keeb/tmp.ZdCemPUcnd.webm" 70 70 type="video/webm"> 71 - <source src="https://cdn.christine.website/file/christine-static/img/keeb/tmp.ZdCemPUcnd.mp4" 71 + <source src="https://cdn.xeiaso.net/file/christine-static/img/keeb/tmp.ZdCemPUcnd.mp4" 72 72 type="video/mp4"> 73 73 Sorry, your browser doesn't support embedded videos. 74 74 </video>
+3 -3
blog/zsa-moonlander-review-2020-11-06.markdown
··· 19 19 no influence pushing me either way on this keyboard. 20 20 21 21 ![a picture of the keyboard on my 22 - desk](https://cdn.christine.website/file/christine-static/img/keeb/Elm3dN8XUAAYHws.jpg) 22 + desk](https://cdn.xeiaso.net/file/christine-static/img/keeb/Elm3dN8XUAAYHws.jpg) 23 23 24 24 [That 3d printed brain is built from the 3D model that was made as a part of <a 25 25 href="https://xeiaso.net/blog/brain-fmri-to-3d-model-2019-08-23">this ··· 47 47 space-age vibe to it: 48 48 49 49 ![the left half of the keyboard without the palmrest 50 - attached](https://cdn.christine.website/file/christine-static/img/keeb/EmJ1bqNXUAAJy4d.jpg) 50 + attached](https://cdn.xeiaso.net/file/christine-static/img/keeb/EmJ1bqNXUAAJy4d.jpg) 51 51 52 52 The palmrests feel very solid and fold up into the back of the keyboard for 53 53 travel. However folding up the palmrest does mess up the tenting stability, so ··· 119 119 120 120 If you want to flash my layout to your Moonlander for some reason, you can find 121 121 the firmware binary 122 - [here](https://cdn.christine.website/file/christine-static/img/keeb/moonlander_kadis.bin). 122 + [here](https://cdn.xeiaso.net/file/christine-static/img/keeb/moonlander_kadis.bin). 123 123 You can then flash this to your keyboard with 124 124 [Wally](https://ergodox-ez.com/pages/wally). 125 125
+3 -3
dhall/authors.dhall
··· 4 4 , name = "Xe Iaso" 5 5 , handle = "xe" 6 6 , picUrl = Some "/static/img/avatar.png" 7 - , link = Some "https://christine.website" 7 + , link = Some "https://xeiaso.net" 8 8 , twitter = Some "theprincessxena" 9 9 , default = True 10 10 , inSystem = True ··· 13 13 , name = "Jessie" 14 14 , handle = "Heartmender" 15 15 , picUrl = Some 16 - "https://cdn.christine.website/file/christine-static/img/UPRcp1pO_400x400.jpg" 16 + "https://cdn.xeiaso.net/file/christine-static/img/UPRcp1pO_400x400.jpg" 17 17 , twitter = Some "BeJustFine" 18 18 , inSystem = True 19 19 } ··· 21 21 , name = "Ashe" 22 22 , handle = "ectamorphic" 23 23 , picUrl = Some 24 - "https://cdn.christine.website/file/christine-static/img/FFVV1InX0AkDX3f_cropped_smol.jpg" 24 + "https://cdn.xeiaso.net/file/christine-static/img/FFVV1InX0AkDX3f_cropped_smol.jpg" 25 25 , inSystem = True 26 26 } 27 27 , Author::{ name = "Nicole", handle = "Twi", inSystem = True }
+1 -1
lib/cfcache/Cargo.toml
··· 1 1 [package] 2 2 name = "cfcache" 3 3 version = "0.1.0" 4 - authors = ["Xe Iaso <me@christine.website>"] 4 + authors = ["Xe Iaso <me@xeiaso.net>"] 5 5 edition = "2018" 6 6 7 7 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+1 -1
lib/cfcache/examples/purge.rs
··· 8 8 let zone_id = std::env::var("CF_ZONE_ID")?; 9 9 10 10 let cli = cfcache::Client::new(key, zone_id)?; 11 - cli.purge(vec!["https://christine.website/.within/health".to_string()]) 11 + cli.purge(vec!["https://xeiaso.net/.within/health".to_string()]) 12 12 .await?; 13 13 14 14 Ok(())
+1 -1
lib/mi/Cargo.toml
··· 1 1 [package] 2 2 name = "mi" 3 3 version = "0.1.0" 4 - authors = ["Xe Iaso <me@christine.website>"] 4 + authors = ["Xe Iaso <me@xeiaso.net>"] 5 5 edition = "2018" 6 6 7 7 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+1 -1
lib/patreon/Cargo.toml
··· 1 1 [package] 2 2 name = "patreon" 3 3 version = "0.1.0" 4 - authors = ["Xe Iaso <me@christine.website>"] 4 + authors = ["Xe Iaso <me@xeiaso.net>"] 5 5 edition = "2018" 6 6 7 7 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+1 -1
static/id_ed25519.pub
··· 1 - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPg9gYKVglnO2HQodSJt4z4mNrUSUiyJQ7b+J798bwD9 Xe Iaso <me@christine.website> 1 + ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPg9gYKVglnO2HQodSJt4z4mNrUSUiyJQ7b+J798bwD9 Xe Iaso <me@xeiaso.net>
+3 -3
static/js/conversation.js
··· 5 5 h("div", {className: "conversation gruvbox-dark " + extraClasses}, [ 6 6 h("div", {className: "conversation-picture conversation-smol"}, [ 7 7 h("picture", {}, [ 8 - h("source", {type: "image/avif", srcset: `https://cdn.christine.website/file/christine-static/stickers/${who.toLowerCase()}/${mood}.avif`}), 9 - h("source", {type: "image/webp", srcset: `https://cdn.christine.website/file/christine-static/stickers/${who.toLowerCase()}/${mood}.webp`}), 10 - h("img", {alt: `${who} is ${mood}`, src: `https://cdn.christine.website/file/christine-static/stickers/${who.toLowerCase()}/${mood}.png`}) 8 + h("source", {type: "image/avif", srcset: `https://cdn.xeiaso.net/file/christine-static/stickers/${who.toLowerCase()}/${mood}.avif`}), 9 + h("source", {type: "image/webp", srcset: `https://cdn.xeiaso.net/file/christine-static/stickers/${who.toLowerCase()}/${mood}.webp`}), 10 + h("img", {alt: `${who} is ${mood}`, src: `https://cdn.xeiaso.net/file/christine-static/stickers/${who.toLowerCase()}/${mood}.png`}) 11 11 ]) 12 12 ]), 13 13 h("div", {className: "conversation-chat"}, [
+1 -1
static/stories/test.html
··· 16 16 <h1><code>xeblog-conv</code> Test</h1> 17 17 18 18 <xeblog-conv name="Numa" mood="delet"> 19 - Delete this! <a href="https://christine.website">Go home</a>. 19 + Delete this! <a href="https://xeiaso.net">Go home</a>. 20 20 21 21 <p>I'm baby 3 wolf moon iPhone magna, woke deep v humblebrag butcher ipsum XOXO aesthetic prism pop-up vexillologist non. Activated charcoal dolore sed, williamsburg hammock hashtag cardigan next level live-edge before they sold out mlkshk single-origin coffee. Celiac kickstarter consequat chillwave tattooed quis iceland schlitz copper mug taxidermy. Selvage flexitarian tattooed palo santo. Quis dolore vaporware distillery cred. Nostrud exercitation esse kogi veniam lo-fi selfies listicle lyft, mixtape disrupt offal.</p> 22 22 </xeblog-conv>
+2 -2
talks/systemd-the-good-parts-2021-05-16.markdown
··· 75 75 - If you need to reboot the server right now for some reason, will that service 76 76 come back up on reboot? 77 77 78 - ![](https://cdn.christine.website/file/christine-static/blog/Screen+Shot+2021-05-11+at+23.02.15.png) 78 + ![](https://cdn.xeiaso.net/file/christine-static/blog/Screen+Shot+2021-05-11+at+23.02.15.png) 79 79 80 80 systemd includes a tool called systemctl that allows you to query the status of 81 81 services as well as start and stop them; but for right now we're going to look ··· 112 112 is that it lets you tail the logs for the entire system with one command: 113 113 `journalctl -f`. Here's that command running on a server of mine: 114 114 115 - ![journalctl output](https://cdn.christine.website/file/christine-static/blog/Screen+Shot+2021-05-15+at+11.04.17.png) 115 + ![journalctl output](https://cdn.xeiaso.net/file/christine-static/blog/Screen+Shot+2021-05-15+at+11.04.17.png) 116 116 117 117 There's a lot more to the journal involving structured logging, automatically 118 118 streaming the logs to places, and advanced filtering based off of different
+1 -1
templates/blog_atom.rs.xml
··· 10 10 <updated>@Utc::now().to_rfc3339()</updated> 11 11 <author> 12 12 <name>Xe Iaso</name> 13 - <email>me@@christine.website</email> 13 + <email>me@@xeiaso.net</email> 14 14 </author> 15 15 <link href="https://xeiaso.net/blog.atom" rel="self"/> 16 16 <link href="https://xeiaso.net/blog" rel="alternate"/>