The code and data behind xeiaso.net
5
fork

Configure Feed

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

Broken links (#597)

* Fix broken links to cloudinit.readthedocs.io

* Fix broken links to github.com/Xe/site

* Replace broken link to pronoun.is with link to /pronouns

* Fix broken links to github.com/Xe/olin

* Remove broken link to home.cetacean.club

* Fix broken link to github.com/ziglang/zig

* Fix broken link to when-then-zen.christine.website

* Fix broken links to github.com/Xe/when-then-zen

* Fix broken links to /js/pageview_timer.js

* Remove broken link to tulpaforce.xyz

* Fix broken link to github.com/Xe/x

* Fix broken links to github.com/vlang/v

* Replace broken link to jrl.ninja with the Wayback Machine

* Fix broken links to github.com/Xe/x

* Fix broken link to /css/snow.css

* Fix broken link to github.com/Xe/olin

* Fix broken Markdown in link to linux.die.net

* Remove broken link to github.com/Xe/arrival

* Remove broken link to /api/blog/post

* Remove broken link to vector.im

* Remove broken link to hidduc-posmeg.urbit.org

* Fix broken link to github.com/Xe/site

* Replace broken link to deviantart.com with the Wayback Machine

* Remove broken link to blog.golang.org

* Fix broken link to dokku.viewdocs.io

* Replace broken link to thegirlpowercode.com with the Wayback Machine

* Fix broken link to elemental-ircd.com

* Fix broken link to reddit.com

* Try to fix broken links to "nixos" series

* Try to fix broken links to "short-story" series

* Try to fix broken links to "rust" series

* empty commit to trigger CI

authored by

Stephen Wade and committed by
GitHub
16f4d5e0 59d396fc

+111 -115
+1 -1
blog/cloud-init-2021-06-04.markdown
··· 34 34 charset="utf-8"></script> <center>](conversation://Mara/hacker) 35 35 36 36 cloud-init has a feature called the 37 - [NoCloud](https://cloudinit.readthedocs.io/en/latest/topics/datasources/nocloud.html) 37 + [NoCloud](https://cloudinit.readthedocs.io/en/latest/reference/datasources/nocloud.html) 38 38 data source. To use it, you need to write two yaml files, put them into a 39 39 specially named ISO file and then mount it to the virtual machine. cloud-init 40 40 will then pick up your configuration data and apply it.
-1
blog/coding-on-an-ipad-2018-04-14-2018.markdown
··· 29 29 this iPad: 30 30 31 31 - https://github.com/withinsoft/ventriloquist 32 - - https://github.com/Xe/arrival 33 32 - https://tulpa.dev/cadey/register 34 33 - https://github.com/Xe/when-then-zen (more on this in another blogpost) 35 34
+11 -11
blog/h-language-2019-06-30.markdown
··· 7 7 - release 8 8 --- 9 9 10 - [h](https://h.christine.website) is a project of mine that I have released 10 + [h](https://h.christine.website) is a project of mine that I have released 11 11 recently. It is a single-paradigm, multi-tenant friendly, turing-incomplete 12 12 programming language that does nothing but print one of two things: 13 13 ··· 32 32 - https://xeiaso.net/blog/the-origin-of-h-2015-12-14 33 33 - https://xeiaso.net/blog/formal-grammar-of-h-2019-05-19 34 34 35 - All of the relevant code for h is [here](https://github.com/Xe/x/tree/master/cmd/h). 35 + All of the relevant code for h is [here](https://github.com/Xe/x/tree/v1.1.7/cmd/h). 36 36 37 37 h is a somewhat standard three-phase compiler. Each of the phases is as follows: 38 38 39 39 ## Parsing the Grammar 40 40 41 41 As mentioned in a prior post, h has a formal grammar defined in [Parsing Expression Grammar](https://en.wikipedia.org/wiki/Parsing_expression_grammar). 42 - I took this [grammar](https://github.com/Xe/x/blob/v1.1.7/h/h.peg) (with some 43 - minor modifications) and fed it into a tool called [peggy](https://github.com/eaburns/peggy) 44 - to generate a Go source [version of the parser](https://github.com/Xe/x/blob/v1.1.7/h/h_gen.go). 42 + I took this [grammar](https://github.com/Xe/x/blob/v1.1.7/h/h.peg) (with some 43 + minor modifications) and fed it into a tool called [peggy](https://github.com/eaburns/peggy) 44 + to generate a Go source [version of the parser](https://github.com/Xe/x/blob/v1.1.7/h/h_gen.go). 45 45 This parser has some minimal [wrappers](https://github.com/Xe/x/blob/v1.1.7/h/parser.go) 46 46 around it, mostly to simplify the output and remove unneeded nodes from the tree. 47 47 This simplifies the later compilation phases. ··· 180 180 ## Runtime 181 181 182 182 The h [runtime](https://github.com/Xe/x/blob/v1.1.7/cmd/h/run.go) is incredibly 183 - simple. It provides the `h.h` putchar-like function and executes the `h` 183 + simple. It provides the `h.h` putchar-like function and executes the `h` 184 184 function from the binary you feed it. It also times execution as well as keeps 185 185 track of the number of instructions the program runs. This is called "gas" for 186 186 historical reasons involving [blockchains](https://blockgeeks.com/guides/ethereum-gas/). 187 187 188 - I use [Perlin Network's life](https://github.com/perlin-network/life) as the 188 + I use [Perlin Network's life](https://github.com/perlin-network/life) as the 189 189 implementation of WebAssembly in h. I have experience with it from [Olin](https://github.com/Xe/olin). 190 190 191 191 ## The Playground ··· 221 221 } 222 222 ``` 223 223 224 - The execution duration is in [nanoseconds](https://godoc.org/time#Duration), as 224 + The execution duration is in [nanoseconds](https://godoc.org/time#Duration), as 225 225 it is just directly a Go standard library time duration. 226 226 227 227 ## Bugs h has Found ··· 314 314 ## Why 315 315 316 316 Now, something you might be asking yourself as you read through this post is 317 - something like: "Why the heck are you doing this?" That's honestly a good 317 + something like: "Why the heck are you doing this?" That's honestly a good 318 318 question. One of the things I want to do with computers is to create art for the 319 319 sake of art. h is one of these such projects. h is not a productive tool. You 320 320 cannot create anything useful with h. This is an exercise in creating a compiler 321 - and runtime from scratch, based on my past experiences with parsing lojban, 321 + and runtime from scratch, based on my past experiences with parsing lojban, 322 322 WebAssembly on the server and frustrating marketing around programming tools. I 323 323 wanted to create something that deliberately pokes at all of the common ways 324 324 that programming languages and tooling are advertised. I wanted to make it a 325 325 fully secure tool as well, with an arbitrary limitation of having no memory 326 326 usage. Everything is fully functional. There are a few grammar bugs that I'm 327 - calling features. 327 + calling features.
+1 -1
blog/land-1-syscalls-file-io-2018-06-18.markdown
··· 107 107 108 108 Every system call that deals with C-style strings uses these functions to get arguments out of the WebAssembly virtual machine's memory and to put the results back into the WebAssembly virtual machine. 109 109 110 - Below is the [`open(2)`](open2) implementation for Land. It implements the following C-style function type: 110 + Below is the [`open(2)`][open2] implementation for Land. It implements the following C-style function type: 111 111 112 112 ``` 113 113 int open(const char *name, int flags);
+1 -1
blog/let-it-snow-2018-12-17.markdown
··· 6 6 - fluff 7 7 --- 8 8 9 - I have very terribly added snow to this website for the holidays. See [the CSS](/css/snow.css) for how I did this, it's really low-tech. Feel free to steal this trick, it is low-effort for maximum niceness. I have the `background-color` of the `snowframe` class identical to the `background-color` of the main page. This and `opacity: 1.0` seems to be the ticket. 9 + I have very terribly added snow to this website for the holidays. See [the CSS](https://github.com/Xe/site/blob/00d930e46939fff5700735bf97a62beaa674eb02/css/snow.css) for how I did this, it's really low-tech. Feel free to steal this trick, it is low-effort for maximum niceness. I have the `background-color` of the `snowframe` class identical to the `background-color` of the main page. This and `opacity: 1.0` seems to be the ticket. 10 10 11 11 Happy holidays, all. 12 12
+1 -1
blog/matrix-has-u-2015-11-27.markdown
··· 59 59 base `#matrix:matrix.org`. The bridging is seamless, with one matrix user 60 60 created per active IRC user and vice versa. 61 61 62 - Usage of matrix via the [Vector](https://vector.im/beta) client is very simple: 62 + Usage of matrix via the Vector client is very simple: 63 63 64 64 1. Sign up for an account by clicking on "Create a New Account" 65 65 2. Enter in a valid email address, a password and your desired username
+1 -1
blog/my-career-in-dates-titles-salaries-2019-03-14.markdown
··· 73 73 If you can, please make a blogpost similar to this. Don't include company names. 74 74 Include start date, end date, time spent there, time spent job hunting, salary 75 75 (if you remember it) and how you left it. Let's 76 - [end salary secrecy](https://thegirlpowercode.com/2018/09/12/is-salary-secrecy-coming-to-an-end/) 76 + [end salary secrecy](https://web.archive.org/web/20190403165849/https://thegirlpowercode.com/2018/09/12/is-salary-secrecy-coming-to-an-end/) 77 77 one step at a time.
+2 -2
blog/new-site-2016-12-18.markdown
··· 4 4 --- 5 5 6 6 This post is now being brought to you by the new and improved [https://xeiaso.net](https://xeiaso.net). 7 - This content is [markdown](/api/blog/post?name=new-site-2016-12-18) rendered by 7 + This content is markdown rendered by 8 8 [Purescript](http://www.purescript.org/). The old [site](https://github.com/Xe/christine.website) 9 9 is now being retired in favor of [this one](https://github.com/Xe/site). The old 10 10 site code has been largely untouched since I started writing it 11 11 [in January 2015](https://github.com/Xe/christine.website/commits/master?after=Y3Vyc29yOpa8VV1W2rttryGeYq6m4lxAkKofKzI3OQ%3D%3D). 12 12 13 - Please give me feedback on how to make it even better! 13 + Please give me feedback on how to make it even better!
+1 -1
blog/olin-1-why-09-1-2018.markdown
··· 285 285 [syscall]: https://en.wikipedia.org/wiki/System_call 286 286 [olin]: https://github.com/Xe/olin 287 287 [goslack]: https://invite.slack.golangbridge.org 288 - [wasmgo]: https://github.com/Xe/olin/tree/master/internal/abi/wasmgo 288 + [wasmgo]: https://github.com/Xe/olin/tree/3daf7b85e0c39c56637df8c6680894742c06821b/internal/abi/wasmgo 289 289 [wasm]: https://webassembly.org
+7 -9
blog/olin-progress-2019-12-14.markdown
··· 19 19 20 20 ## What is Olin? 21 21 22 - [Olin][olin] is a userspace kernel designed for multi-tenant secure computing. It provides isolation via WebAssembly to limit the attack scope of malicious user input, resource accounting via its runtime statistics, and a familiar Unix-like API. It is the core that you can build a functions as a service platform on top of. 23 - For an example of Olin in action, please click [here][olin-example]. 22 + [Olin][olin] is a userspace kernel designed for multi-tenant secure computing. It provides isolation via WebAssembly to limit the attack scope of malicious user input, resource accounting via its runtime statistics, and a familiar Unix-like API. It is the core that you can build a functions as a service platform on top of. 24 23 25 24 [olin]: https://github.com/Xe/olin 26 - [olin-example]: https://home.cetacean.club/cwagi 27 25 28 26 As Olin is just a kernel, it needs some work in order to really shine as a true child of the cloud. That work is incoming during the next weeks and months. 29 27 ··· 41 39 42 40 ### Official Docker Hub Build 43 41 44 - The Docker Hub repo [xena/olin][docker-hub] now is automatically built off of the latest master release of Olin. 42 + The Docker Hub repo [xena/olin][docker-hub] now is automatically built off of the latest master release of Olin. 45 43 46 44 [docker-hub]: https://hub.docker.com/r/xena/olin 47 45 ··· 72 70 I am waiting on Zig to release a new nightly version in order to enable it, but the [bring-your-own-OS package][bring-your-own-os] support in Zig means that the Zig standard library is starting to be exposed into Olin programs. Here's an example based on the [example program][zig-example-program]: 73 71 74 72 [bring-your-own-os]: https://github.com/ziglang/zig/commit/b375f6e027a159616e80906aa05e253fbe8cc9df 75 - [zig-example-program]: https://github.com/ziglang/zig/blob/master/lib/std/special/init-exe/src/main.zig 73 + [zig-example-program]: https://github.com/ziglang/zig/blob/b375f6e027a159616e80906aa05e253fbe8cc9df/lib/std/special/init-exe/src/main.zig 76 74 77 75 ```zig 78 76 pub const os = @import("./olin/olin.zig"); ··· 122 120 * The maximum amount of memory an Olin program can use 123 121 * The maximum number of WebAssembly instructions a WebAssembly program can execute 124 122 125 - Here's an example policy file intended to help with relaying webhooks: 123 + Here's an example policy file intended to help with relaying webhooks: 126 124 127 125 ``` 128 126 ## This is an example policy, the ## signifies this line is a comment. ··· 146 144 gas-limit 1048576 147 145 ``` 148 146 149 - This would allow a WebAssembly program to open a HTTP socket to https://tulpa.dev (my git server) and Discord, but disallows any administrative API calls to my git server. It also allows the Olin program to use up to 128 pages of memory (about 8MB, which goes surprisingly far) and 1.04 million instructions. If the handler tries to open any resource that is not explicitly allowed, it is killed. If the handler tries to open a resource that is explicitly forbidden, it is killed. If the handler uses too much ram or too many instructions, it is killed. 147 + This would allow a WebAssembly program to open a HTTP socket to https://tulpa.dev (my git server) and Discord, but disallows any administrative API calls to my git server. It also allows the Olin program to use up to 128 pages of memory (about 8MB, which goes surprisingly far) and 1.04 million instructions. If the handler tries to open any resource that is not explicitly allowed, it is killed. If the handler tries to open a resource that is explicitly forbidden, it is killed. If the handler uses too much ram or too many instructions, it is killed. 150 148 151 149 This allows handlers to safely process user controlled input and even use that as part of the call to the open function. 152 150 ··· 174 172 175 173 ### Generic CGI Support 176 174 177 - Previously there was a half-baked idea I called cwagi in Olin's codebase. The idea was to emulate part of how CGI worked in order to let Olin programs handle HTTP easily. I realize this was a mistake, so now it [just supports normal CGI][cgi-patch], conforming to [RFC 3875][rfc3875]. 175 + Previously there was a half-baked idea I called cwagi in Olin's codebase. The idea was to emulate part of how CGI worked in order to let Olin programs handle HTTP easily. I realize this was a mistake, so now it [just supports normal CGI][cgi-patch], conforming to [RFC 3875][rfc3875]. 178 176 179 177 [cgi-patch]: https://github.com/Xe/olin/commit/92e703fcb2571e1f32e0bf1ba4f17bb45c1d6408 180 178 [rfc3875]: https://tools.ietf.org/html/rfc3875 ··· 202 200 * Policy support for handlers [link](https://tulpa.dev/within/wasmcloud/issues/12) 203 201 * Configuration variables for handlers [link](https://tulpa.dev/within/wasmcloud/issues/6) 204 202 205 - --- 203 + --- 206 204 207 205 Overall, this project is fun. Here's to 1.0 happening soon! Be well.
+8 -6
blog/pageview-time-experiment-2019-08-19.markdown
··· 19 19 20 20 ![A diagram on how this works](/static/img/pageview_flowchart.png) 21 21 22 - When the page is loaded, a [javascript file records the start time](/static/js/pageview_timer.js). 22 + When the page is loaded, a [javascript file records the start time][js]. 23 23 This then sets a [pagehide handler](https://developer.mozilla.org/en-US/docs/Web/API/Window/pagehide_event) 24 24 to send a [navigator beacon](https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon) 25 25 containing the following data: ··· 29 29 - The end time recorded by the pagehide handler 30 30 31 31 This information is asynchronously pushed to [`/api/pageview-timer`](https://github.com/Xe/site/blob/91d7214b341088edba7a37a83a753e75ed02d7ad/cmd/site/pageview.go) 32 - and added to an in-memory prometheus histogram. These histograms can be checked at 32 + and added to an in-memory prometheus histogram. These histograms can be checked at 33 33 [`/metrics`](/metrics). This data is not permanently logged. 34 + 35 + [js]: https://github.com/Xe/site/blob/a6c66568c8b59563b64f3ad3d2d4f4a36ec53004/static/js/pageview_timer.js 34 36 35 37 ## Security Concerns 36 38 ··· 54 56 with). 55 57 56 58 I fully respect the [do not track](https://allaboutdnt.com) header and flag in browsers. 57 - If [`pageview_timer.js`](/static/js/pageview_timer.js) detects the presence of 59 + If [`pageview_timer.js`][js] detects the presence of 58 60 do not track in the browser, it stops running immediately and does not set the pagehide 59 61 handler. If that somehow fails, the server looks for the presence of the `DNT` header 60 62 set to `1` and instantly discards the data and replies with a 404. ··· 71 73 72 74 --- 73 75 74 - EDIT 2019-10-15: browsers disable this call from the context I am using and I don't 75 - really care enough to figure out how to fix it. This experiment is over. Thank you 76 - to everyone that participated. All data will be scrubbed and a followup will be 76 + EDIT 2019-10-15: browsers disable this call from the context I am using and I don't 77 + really care enough to figure out how to fix it. This experiment is over. Thank you 78 + to everyone that participated. All data will be scrubbed and a followup will be 77 79 posted soon.
+3 -3
blog/plurality-driven-development-2019-08-04.markdown
··· 88 88 89 89 However, there is a drawback to this: you're dealing with sapient beings. They 90 90 sometimes don't want to cooperate. Internal drama can and has happened. It helps 91 - for us to have a quarterly [date with a word document](https://tulpaforce.xyz/within/guides/internal-meetings-to-bring-harmonic-synergy.html) 92 - in order to make sure everyone is on the same page. Disagreements happen, but 93 - ultimately I've noticed that the net result is far more positive than if the 91 + for us to have a quarterly date with a word document 92 + in order to make sure everyone is on the same page. Disagreements happen, but 93 + ultimately I've noticed that the net result is far more positive than if the 94 94 disagreement hadn't happened at all. 95 95 96 96 Anyways, plurality-driven development works for me, but it's really _not_ for
+1 -1
blog/readaptation-2021-02-21.markdown
··· 1 1 --- 2 2 title: Readaptation 3 3 date: 2021-02-21 4 - series: short-stories 4 + series: short-story 5 5 --- 6 6 7 7 Thena suddenly saw a large red sign labeled "system overload" in front of her.
+2 -2
blog/reconlangmo-3-typology-2020-05-11.markdown
··· 15 15 prompt][rclm3]. 16 16 17 17 [reconlangmoseries]: /blog/series/reconlangmo 18 - [rclm3]: thttps://www.reddit.com/r/conlangs/comments/ghvo48/reconlangmo_3_morphosyntactic_typology/ 18 + [rclm3]: https://www.reddit.com/r/conlangs/comments/ghvo48/reconlangmo_3_morphosyntactic_typology/ 19 19 20 20 ## Word Order 21 21 ··· 79 79 80 80 L'ewa is a analytic language. Every single word has only one form and particles 81 81 are used to modify the meaning or significance of words. There are only two word 82 - classes: content and particles. 82 + classes: content and particles. 83 83 84 84 ### Alignment 85 85
+4 -4
blog/site-to-site-wireguard-part-2-2019-04-07.markdown
··· 80 80 81 81 ## Why Should I Create a Custom DNS Server? 82 82 83 - There are two main benefits to creating a custom DNS server like this: ad blocking in DNS and custom DNS routes. The main benefit is having seamless [AdBlock DNS](https://adguard.com/en/adguard-dns/overview.html), kind of like a [Pi-hole](https://pi-hole.net) built into your VPN for free. The benefits of the AdBlock DNS cannot be understated. It literally makes it impossible to see ads for a large number of websites, without triggering the adblock protection scripts news sites like to use. This will be covered in more detail below. Custom DNS routes sound like they would be overkill for keeping things private, but people can't easily get information on names that literally only exist in your domain. 83 + There are two main benefits to creating a custom DNS server like this: ad blocking in DNS and custom DNS routes. The main benefit is having seamless [AdBlock DNS](https://adguard.com/en/adguard-dns/overview.html), kind of like a [Pi-hole](https://pi-hole.net) built into your VPN for free. The benefits of the AdBlock DNS cannot be understated. It literally makes it impossible to see ads for a large number of websites, without triggering the adblock protection scripts news sites like to use. This will be covered in more detail below. Custom DNS routes sound like they would be overkill for keeping things private, but people can't easily get information on names that literally only exist in your domain. 84 84 85 85 However, there are reasons why you would NOT want to create a custom DNS server. By creating a custom DNS server, you effectively put yourself in charge of an internet infrastrcture component that is usually handled by people who are dedicated to keeping it working 24/7. You may not be able to provide the same uptime guarantees as your current DNS provider. You are not CloudFlare, Comcast or Google. It's perfectly okay to not want to go through with this. 86 86 ··· 88 88 89 89 ## How Do I Create a Custom DNS Server? 90 90 91 - There are many DNS servers out there, each with their benefits and shortcomings. In order to make this tutorial simpler, I'm going to be using a self-created DNS server named [`dnsd`](https://github.com/Xe/x/tree/master/cmd/dnsd). This server is extremely simple and reloads its zone files every minute over HTTP, to make updating records easier. There are going to be a few steps to setting this up: 91 + There are many DNS servers out there, each with their benefits and shortcomings. In order to make this tutorial simpler, I'm going to be using a self-created DNS server named [`dnsd`](https://github.com/Xe/x/tree/c6e141548632e051b1780cd28f8e2bf245a64eb2/cmd/dnsd). This server is extremely simple and reloads its zone files every minute over HTTP, to make updating records easier. There are going to be a few steps to setting this up: 92 92 93 93 - Creating a DNS zonefile 94 94 - Hosting the zonefile over HTTP/HTTPS ··· 186 186 187 187 This should produce `adblock.zone` in the current working directory. Put this file in the same place you put your custom zone. 188 188 189 - If you are unable to run this script for whatever reason, I update my [adblock.zone file](https://xena.greedo.xeserv.us/files/adblock.zone) weekly (please download this file instead of configuring your copy of `dnsd` to use this URL). 189 + If you are unable to run this script for whatever reason, I update my [adblock.zone file](https://xena.greedo.xeserv.us/files/adblock.zone) weekly (please download this file instead of configuring your copy of `dnsd` to use this URL). 190 190 191 191 ### Installing `dnsd` with Docker 192 192 ··· 200 200 -forward-server 1.1.1.1:53 201 201 ``` 202 202 203 - This will create a new container named `dnsd` running the Docker Image [`xena/dnsd:1.0.2-6-g1a2bc63`](https://hub.docker.com/r/xena/dnsd) (the docker image is created by [this script](https://github.com/Xe/x/blob/master/docker.go) and [this dockerfile](https://github.com/Xe/x/blob/master/cmd/dnsd/Dockerfile)), exposing the DNS server on the host's UDP port 53. To test it: 203 + This will create a new container named `dnsd` running the Docker Image [`xena/dnsd:1.0.2-6-g1a2bc63`](https://hub.docker.com/r/xena/dnsd) (the docker image is created by [this script](https://github.com/Xe/x/blob/c6e141548632e051b1780cd28f8e2bf245a64eb2/docker.go) and [this dockerfile](https://github.com/Xe/x/blob/c6e141548632e051b1780cd28f8e2bf245a64eb2/cmd/dnsd/Dockerfile)), exposing the DNS server on the host's UDP port 53. To test it: 204 204 205 205 ```console 206 206 $ dig @127.0.0.1 oho.pele
+4 -5
blog/site-to-site-wireguard-part-4-2019-04-16.markdown
··· 158 158 | Others | Yes | No | No | 159 159 160 160 This will also configure Caddy to start on boot. 161 - 161 + 162 162 * Configure Caddy for static file serving for aloha.pele 163 163 * root directive 164 164 * browse directive 165 165 * Link to Caddy documentation 166 - 166 + 167 167 ## Configure aloha.pele 168 168 169 169 In the last post, we created the domain and TLS certificates for `aloha.pele`. Let's create a website for it. ··· 222 222 <nav> 223 223 <a href="/">Aloha</a> 224 224 </nav> 225 - 225 + 226 226 {{ .Doc.body }} 227 227 </main> 228 228 </body> 229 229 </html> 230 230 ``` 231 231 232 - This will give a nice [simple style kind of like this](https://jrl.ninja/etc/1/) using [Caddy's built-in markdown templating support](https://caddyserver.com/docs/markdown). Now create `/srv/http/aloha.pele/index.md`: 232 + This will give a nice [simple style kind of like this](https://web.archive.org/web/20190408174002/https://jrl.ninja/etc/1/) using [Caddy's built-in markdown templating support](https://caddyserver.com/docs/markdown). Now create `/srv/http/aloha.pele/index.md`: 233 233 234 234 ```markdown 235 235 <!-- /srv/http/aloha.pele/index.md --> ··· 341 341 Please give me [feedback](/contact) on my approach to this. I also have a [Patreon](https://www.patreon.com/cadey) and a [Ko-Fi](https://ko-fi.com/A265JE0) in case you want to support this series. I hope this is useful to you all in some way. Stay tuned for the future parts of this series as I build up the network infrastructure from scratch. If you would like to give feedback on the posts as they are written, please watch [this page](https://github.com/Xe/site/pulls) for new pull requests. 342 342 343 343 Be well. The sky is the limit, Creator! 344 -
+14 -14
blog/the-cult-of-kubernetes-2019-09-07.markdown
··· 60 60 61 61 ## The Cluster 62 62 63 - I decided it would be a good idea to create my cluster using 63 + I decided it would be a good idea to create my cluster using 64 64 [Terraform][terraform], mostly because I wanted to learn how to use it better. 65 65 I use Terraform at work, so I figured this would also be a way to level up my 66 66 skills in a mostly sane environment. ··· 157 157 - setup HTTP/HTTPS request ingress with [nginx-ingress][nginxingress] (which uses [nginx](https://www.nginx.com/)) 158 158 - setup [automatic DNS management][autodns] because the external IP addresses of Kubernetes nodes can and will change 159 159 160 - After a lot of trial, error, pain, suffering and the like, I created 160 + After a lot of trial, error, pain, suffering and the like, I created 161 161 [this script][setupdotsh] which I am not pasting here. Look at it if you want to 162 162 get a streamlined overview of how to set these things up. 163 163 ··· 233 233 234 234 It was about this time when I wondered if I was making a mistake moving off of 235 235 Dokku. Dokku really does a lot to abstract almost everything involved with nginx 236 - away from you, and it _really shows_. 236 + away from you, and it _really shows_. 237 237 238 238 However, as a side effect of everything being so declarative and Kubernetes really 239 - not assuming anything, you have _a lot_ more freedom to do basically anything 240 - you want. You don't have to have specially magic names for tasks like `web` or 241 - `worker` like you do in Heroku/Dokku. You just have a deployment that belongs to 242 - an "app" that just so happens to expose a TCP port that just so happens to have 239 + not assuming anything, you have _a lot_ more freedom to do basically anything 240 + you want. You don't have to have specially magic names for tasks like `web` or 241 + `worker` like you do in Heroku/Dokku. You just have a deployment that belongs to 242 + an "app" that just so happens to expose a TCP port that just so happens to have 243 243 a correlating ingress associated with it. 244 244 245 245 Lucky for me, most of the apps I write fit into that general format, and the ones ··· 267 267 268 268 ## GitHub Actions 269 269 270 - This does however mean that deployment is no longer as simple as 270 + This does however mean that deployment is no longer as simple as 271 271 "git push; don't care". This is where [GitHub Actions][actions] come into play. 272 272 They claimed to have the ability to run full end-to-end CI/CD on my applications. 273 273 ··· 281 281 configuration and usage as compared to when it was in private beta. This 282 282 included changing the configuration schema from [HCL][hcl] to [YAML][yaml]. 283 283 284 - Of course, all of the documentation (outside of GitHub's 284 + Of course, all of the documentation (outside of GitHub's 285 285 [quite excellent documentation][githubactionsdocs]) was out of date and wrong. 286 286 I tried following a tutorial by [DigitalOcean themselves][dotutorialkube] on 287 287 how to do this exact thing I wanted to do, but it referenced the old HCL syntax 288 - for GitHub Actions and did not work. To make things worse, examples 288 + for GitHub Actions and did not work. To make things worse, examples 289 289 [in the marketplace READMEs][marketplacereadmeexample] simply DID NOT WORK because 290 290 they were written for the old GitHub Actions syntax. 291 291 ··· 340 340 341 341 Thanks for reading, I hope this was entertaining. Be well. 342 342 343 - [dokku]: http://dokku.viewdocs.io/dokku/ 343 + [dokku]: https://dokku.com/ 344 344 [dok8s]: https://www.digitalocean.com/products/kubernetes/ 345 345 [terraform]: https://www.terraform.io 346 346 [dyson]: https://github.com/Xe/within-terraform/tree/master/dyson ··· 355 355 [deploymenttemplateyaml]: https://github.com/Xe/within-terraform/blob/master/dyson/src/dysonPkg/deployment_with_ingress.yaml 356 356 [exampledysonmanifestcommand]: https://github.com/Xe/within-terraform/blob/master/kube_manifests/h.sh 357 357 [actions]: https://github.com/features/actions 358 - [sitegoci]: https://github.com/Xe/site/blob/master/.github/workflows/go.yml 358 + [sitegoci]: https://github.com/Xe/site/blob/e4d7c3c2691acad73d6240ff0c9b208273b95997/.github/workflows/go.yml 359 359 [githubactionsdocs]: https://help.github.com/en/articles/about-github-actions 360 - [kubernetescddotyml]: https://github.com/Xe/site/commits/master/.github/workflows/kubernetes-cd.yml 360 + [kubernetescddotyml]: https://github.com/Xe/site/commits/e4d7c3c2691acad73d6240ff0c9b208273b95997/.github/workflows/kubernetes-cd.yml 361 361 [hcl]: https://github.com/hashicorp/hcl 362 362 [yaml]: https://yaml.org 363 363 [marketplacereadmeexample]: https://github.com/marketplace/actions/github-action-for-digitalocean-doctl 364 - [monster]: https://github.com/Xe/site/blob/master/.github/workflows/kubernetes-cd.yml#L53-L65 364 + [monster]: https://github.com/Xe/site/blob/e4d7c3c2691acad73d6240ff0c9b208273b95997/.github/workflows/kubernetes-cd.yml#L53-L65 365 365 [dotutorialkube]: https://blog.digitalocean.com/how-to-deploy-to-digitalocean-kubernetes-with-github-actions/ 366 366 [doctlgithubaction]: https://github.com/digitalocean/action-doctl
+1 -3
blog/the-universal-design-2015-10-17.markdown
··· 7 7 8 8 ## Deconstructing Monoliths 9 9 10 - One monolith I have been maintaining is [Elemental-IRCd](http://elemental-ircd.com). Taking the head of a project I care about has taught me more about software engineering, community/project management and the like than I would have gotten otherwise. One of these things is that there need to be five basic primitives in your application: 10 + One monolith I have been maintaining is [Elemental-IRCd](https://github.com/Elemental-IRCd/elemental-ircd). Taking the head of a project I care about has taught me more about software engineering, community/project management and the like than I would have gotten otherwise. One of these things is that there need to be five basic primitives in your application: 11 11 12 12 1. State - What is true now? What was true? What happened in the past? What is the persistent view of the world? 13 13 2. Events - What is being changed? How will it be routed? ··· 141 141 Because of this design, you can easily do live code reloading, because there is literally no reason you can't. Wait for a formula to finish and replace it with the new version, provided it compiles. Why not apply this to the above ideas too? 142 142 143 143 --- 144 - 145 - \* Link here: http://hidduc-posmeg.urbit.org/home/pub/hoon-intro/ as of publishing this revision of the article hidduc's urbit is offline, so they cannot be accessed at the moment. If that link fails, the source code for it is apparently [here](https://bitbucket.org/zaphar/hoon-intro/src/6a69c2048036f3e6d4ea1ef065577adf0b21be5f/0/hymn.hook?at=default&fileviewer=file-view-default). Thanks `mst` on Freenode! 146 144 147 145 For comments on this article, please feel free to email me, poke me in `#geek` on `irc.ponychat.net` (my nick is Xena, on freenode it is Xe), or leave thoughts at one of the places this article has been posted.
+5 -4
blog/unix-domain-sockets-2021-04-01.markdown
··· 157 157 158 158 [Wait, what the heck are printer facts?](conversation://Mara/wat?smol) 159 159 160 - Blame Foone and #infoforcefeed. 160 + Blame Foone and #infoforcefeed. 161 161 162 162 Anyways, let's make the TCP logic a bit more clean in the process. Right now it 163 163 only listens on IPv4 and it would be nice if it listened on IPv6 too. Let's ··· 220 220 unconditionally and throw away any errors?](conversation://Mara/hmm?smol) 221 221 222 222 Two reasons: 223 + 223 224 1. Statistically if the file doesn't exist and the service can't create it when 224 225 it binds to that path, you probably have bigger problems and it's probably 225 226 better for the program to explode there. 226 227 2. The filename is passed in as an environment variable. If your environment 227 228 variable is wrong, we can treat this as a fundamental assertion error and 228 229 blow up when the file fails to bind. 229 - 230 + 230 231 Let's define this in the [NixOS module for the printerfacts 231 232 service](https://github.com/Xe/nixos-configs/blob/master/common/services/printerfacts.nix). 232 233 First we will need to add a configuration option for the socket path: ··· 381 382 introducing a few more characters to the xeiaso dot net cinematic 382 383 universe. Please do let me know how this works out for you. I think I have the 383 384 sizes optimized for mobile usage better, but [contributions to fix my horrible 384 - CSS](https://github.com/Xe/site/blob/main/css/shim.css) would really, really, 385 - really be appreciated. 385 + CSS](https://github.com/Xe/site/blob/main/static/css/shim.css) would really, 386 + really, really be appreciated. 386 387 387 388 I'm considering moving over all of the Mara interludes to use smol mode. If you 388 389 have opinions about this please let me know them.
+18 -18
blog/v-vaporware-2019-06-23.markdown
··· 136 136 So the compiler with "zero dependencies" is a _dynamically linked binary_ with 137 137 dependencies on libpthread and libc (the other two are glibc-specific). 138 138 139 - Also of note, I had to modify the [Makefile](https://github.com/vlang/v/blob/master/compiler/Makefile) 139 + Also of note, I had to modify the [Makefile](https://github.com/vlang/v/blob/978ec58fe300929555786fdf58cae1969ea317ba/compiler/Makefile) 140 140 in order to get it to build on Linux without segfaulting every time it tried 141 141 to compile code: 142 142 ··· 231 231 Looking at the [generated C code](https://gist.github.com/Xe/1afdd4c7e7c9cfa23d1aa87194ee5190#file-hello-c-L3698-L3705) 232 232 it's plainly obvious to see this memory leak. `init_consts` creates a 1000 byte 233 233 allocation and never frees it. This is a memory leak that is unavoidable in 234 - any program compiled with V. This is potentially confusing for people who are 234 + any program compiled with V. This is potentially confusing for people who are 235 235 trying to debug memory leaks in their V code. They will always be off by 1 236 236 allocation and 1000 bytes leaked without an easy way to tell why that is the 237 237 case. The compiler itself also leaks memory: ··· 317 317 && apt -y remove clang 318 318 ``` 319 319 320 - As of the time of writing this article, the image `ubuntu:latest` has an 320 + As of the time of writing this article, the image `ubuntu:latest` has an 321 321 uncompressed size of `64.2MB`. If the V compiler only requires 400 KB to build 322 322 like it claims, the resulting image size for this Dockerfile should be around 323 323 65 MB at worst, right? ··· 334 334 335 335 ## HTTP Module 336 336 337 - V has a [http module](https://github.com/vlang/v/tree/master/http). It leaves a 337 + V has a [http module](https://github.com/vlang/v/tree/978ec58fe300929555786fdf58cae1969ea317ba/http). It leaves a 338 338 lot to be desired. My favorite part is the implementation of [`download_file` on macOS](https://github.com/vlang/v/blob/978ec58fe300929555786fdf58cae1969ea317ba/http/download_mac.v): 339 339 340 340 ``` ··· 348 348 } 349 349 ``` 350 350 351 - This has no error checking (the function `os.system2` returns the exit code of 352 - curl) and it _shells out to curl instead of using libcurl_. 353 - [Other parts of the http module use libcurl](https://github.com/vlang/v/blob/master/http/http_mac.v#L79-L191) 351 + This has no error checking (the function `os.system2` returns the exit code of 352 + curl) and it _shells out to curl instead of using libcurl_. 353 + [Other parts of the http module use libcurl](https://github.com/vlang/v/blob/978ec58fe300929555786fdf58cae1969ea317ba/http/http_mac.v#L79-L191) 354 354 correctly (though the HTTP status code, headers and other important metadata 355 355 are not returned). There is also no support for overriding the HTTP transport, 356 - setting a custom TLS configuration or many other basic features that 356 + setting a custom TLS configuration or many other basic features that 357 357 _libcurl provides for free_. 358 358 359 359 I wasn't expecting it to have HTTP support out of the box, but even then I still ··· 365 365 that in the near future though. I would like to suggest the following to the V 366 366 developer in order for them to be able to improve in the future: 367 367 368 - Firstly, do not make claims about disk space, speed or dependencies without 369 - explaining what you mean by that _in detail_. 368 + Firstly, do not make claims about disk space, speed or dependencies without 369 + explaining what you mean by that _in detail_. 370 370 371 371 Do not shell out to arbitrary commands in the standard library for any reason. 372 - If an attacker can somehow run code on a server with a V binary that uses the 373 - `download_file` function, they can replace `curl` with a malicious binary that 372 + If an attacker can somehow run code on a server with a V binary that uses the 373 + `download_file` function, they can replace `curl` with a malicious binary that 374 374 is able to do anything the attacker wants. This feels like a huge vulnerability, 375 375 especially given that the playground allows you to run this function. 376 376 377 377 AMD64 is not the only processor architecture that exists. It's nice that you're 378 - supporting it, but this means that any program compiled with V will be stuck on 378 + supporting it, but this means that any program compiled with V will be stuck on 379 379 that architecture. This also means that V cannot currently be used for systems 380 380 programming like building a system-level package manager. 381 381 ··· 388 388 ``` 389 389 390 390 If you claim your compiler can support 1.2 million lines of code, do not make it 391 - have a limit of 50,000 statements in one function. Yes it is somewhat crazy to 391 + have a limit of 50,000 statements in one function. Yes it is somewhat crazy to 392 392 have 1.2 million statements in a single function, but as a compiler author it's 393 393 generally not your position to make these kinds of judgments. If the user wants 394 394 to have 1.2 million statements in a function, let them. 395 395 396 396 Do not give code examples for libraries that you have not released. This means 397 397 don't show anything about the "built-in web framework" until you have code to 398 - back your claim. If there is no code to back it up, you have backed yourself 398 + back your claim. If there is no code to back it up, you have backed yourself 399 399 into a corner where you are looking like you are lying. I would have loved to 400 400 benchmark V's web framework against Nim's Jester and Go's net/http, but I can't. 401 401 402 402 Thanks for reading this far. I hope this feedback can help make V a productive 403 403 tool for programming. It's a shame it seems to have been hyped so much for 404 - comparatively so little as a result. The developer has been hyping and selling 405 - this language like it's the new sliced bread. It is not. This is a very alpha 406 - product. I bet you could use it for productive development as is if you really 404 + comparatively so little as a result. The developer has been hyping and selling 405 + this language like it's the new sliced bread. It is not. This is a very alpha 406 + product. I bet you could use it for productive development as is if you really 407 407 stuck your head into it, but as it stands I recommend against using it for 408 408 anything.
-3
blog/vanbi-01-08-2019.markdown
··· 48 48 The same Vanbi may be passed to functions running in different goroutines; 49 49 Vanbis are safe for simultaneous use by multiple goroutines. 50 50 51 - See https://blog.golang.org/vanbi for example code for a server that uses 52 - Vanbis. 53 - 54 51 ## Usage 55 52 56 53 ```go
+3 -3
blog/waifud-progress-2022-02-06.markdown
··· 83 83 /path/to/config.yaml` to contain one of your hostnames, the right zfs parent 84 84 dataset and your cloudconfig user data, then hope it works. 85 85 - SSH into the VM and laugh at the haters for doubting you. 86 - 86 + 87 87 [The default set of hosts are the MagicDNS names of my homelab machines. You 88 88 will definitely want to replace them with your server/s unless you also have an 89 89 affinity for Xenoblade-inspired server names.](conversation://Cadey/enby) ··· 94 94 around for a very long time and is actively maintained. 95 95 96 96 In its current state, here's what it looks like to create a VM running Arch 97 - Linux. 97 + Linux. 98 98 99 99 [Arch Linux is notoriously annoying to install, so let's see how hard it is with waifud.](conversation://Mara/hmm) 100 100 ··· 188 188 says. This is an incredibly cursed affair, but it does work. 189 189 190 190 waifud instead uses the 191 - [nocloud-net](https://cloudinit.readthedocs.io/en/latest/topics/datasources/nocloud.html) 191 + [nocloud-net](https://cloudinit.readthedocs.io/en/latest/reference/datasources/nocloud.html) 192 192 data source to fetch the cloudconfig over HTTP. When you create an instance in 193 193 waifud, waifuctl uploads the user-data to the server. This is then stored in 194 194 SQLite and queried from when a VM boots. cloud-init picks up on this data and
+5 -5
blog/wasmcloud-progress-2019-12-08.markdown
··· 40 40 - `write()` - writes to a stream 41 41 - `flush()` - flushes intermediate data and turns async behavior into syncronous 42 42 behavior 43 - 43 + 44 44 And yet this was enough to implement a HTTP client. 45 45 46 46 The core guiding idea was that a cloud-native OS API should expose internet ··· 52 52 53 53 I wrote a 54 54 [blogpost](https://xeiaso.net/blog/land-1-syscalls-file-io-2018-06-18) 55 - about this work and even did a 55 + about this work and even did a 56 56 [talk at GoCon 57 57 Canada](https://xeiaso.net/talks/webassembly-on-the-server-system-calls-2019-05-31) 58 58 about it. ··· 81 81 code for this and gradually started adding more and more things. The [test 82 82 harness][olincwatest] is the biggest wasm program I've written for a while. 83 83 Seriously, there's a lot going on there. It tests every single function exposed 84 - in the CWA spec as well as all of the schemes I had implemented. 84 + in the CWA spec as well as all of the schemes I had implemented. 85 85 86 86 Over time I ended up testing Olin in more and more places and on more and more 87 87 hardware. As a side effect of all of this being pure go, it was very easy to ··· 228 228 [newlib]: https://wiki.osdev.org/Porting_Newlib 229 229 [cwa]: https://github.com/CommonWA 230 230 [olincwa]: https://github.com/Xe/olin/tree/master/docs/cwa-spec 231 - [olincwarust]: https://github.com/Xe/olin/tree/master/cwa/olin 232 - [olincwatest]: https://github.com/Xe/olin/blob/master/cwa/tests/src/main.rs 231 + [olincwarust]: https://github.com/Xe/olin/tree/53746b195a6fb302e968d76ffa01b49ad7505330/cwa/olin 232 + [olincwatest]: https://github.com/Xe/olin/blob/53746b195a6fb302e968d76ffa01b49ad7505330/cwa/tests/src/main.rs 233 233 [olintempleos]: https://xeiaso.net/blog/templeos-2-god-the-rng-2019-05-30 234 234 [wasmcloud]: https://tulpa.dev/within/wasmcloud
+4 -4
blog/when-then-zen-2019-01-20.markdown
··· 85 85 86 86 > Note: "the body" means the sack of meat and bone that you are currently living inside. For the purposes of explanation of this technique, please consider what makes you yourself separate from the body you live in. 87 87 88 - You are not your thoughts. Your thoughts are something [you can witness](https://github.com/Xe/when-then-zen/blob/master/meditation/noting.feature#L41). 88 + You are not your thoughts. Your thoughts are something [you can witness](https://github.com/Xe/when-then-zen/blob/master/bonus/noting.feature#L41). 89 89 You are not required to give your thoughts any attention they don't need. Try 90 - not immediately associating yourself with a few "negative" thoughts when they 90 + not immediately associating yourself with a few "negative" thoughts when they 91 91 come up next. Try digging through the chains of meaning to understand why they 92 92 are "negative" and if that end result is actually truly what you want to align 93 93 yourself with. ··· 105 105 themselves can be confused with the culture. 106 106 107 107 I do not plan to set too many expectations for what people will experience. 108 - When possible, [I tell people to avoid having "spiritual experiences"](https://github.com/Xe/when-then-zen/blob/master/meditation/quantum-pause.feature#L12-L16). 108 + When possible, [I tell people to avoid having "spiritual experiences"](https://github.com/Xe/when-then-zen/blob/master/bonus/quantum-pause.feature#L12-L16). 109 109 The only point in the project where I could be interpreted as telling people 110 - how to have a "spiritual experience" is probably the [paracosm immersion](https://github.com/Xe/when-then-zen/blob/master/skills/paracosm-immersion.feature) 110 + how to have a "spiritual experience" is probably the [paracosm immersion](https://github.com/Xe/when-then-zen/blob/master/bonus/paracosm-immersion.feature) 111 111 feature. But even then, [paracosms](https://en.m.wikipedia.org/wiki/Paracosm) are 112 112 a well-known psychological phenomenon. 113 113
+3 -3
blog/when-then-zen-anapana-2018-08-15.markdown
··· 18 18 19 19 Note: "the body" means the sack of meat and bone that you are currently living inside. For the purposes of explanation of this technique, please consider what makes you yourself separate from the body you live in. 20 20 21 - This article is a more verbose version of [the correlating feature from when-then-zen](https://github.com/Xe/when-then-zen/blob/master/meditation/anapana.feature). 21 + This article is a more verbose version of [the correlating feature from when-then-zen](https://github.com/Xe/when-then-zen/blob/master/bonus/anapana.feature). 22 22 23 23 ## Background Assumptions of Reader 24 24 ··· 169 169 170 170 ### In order to meditate for <time> 171 171 172 - The time is intentionally left as a variable so you can decide what session time length to use. If you need help deciding how long to pick, you can always try [tapering upwards](https://github.com/Xe/when-then-zen/blob/master/skills/tapering-upward.feature) over the course of a month. I find that tapering upwards helps A LOT. 172 + The time is intentionally left as a variable so you can decide what session time length to use. If you need help deciding how long to pick, you can always try [tapering upwards](https://github.com/Xe/when-then-zen/blob/master/bonus/tapering-upward.feature) over the course of a month. I find that tapering upwards helps A LOT. 173 173 174 174 ### Given a timer of some kind is open 175 175 ··· 210 210 This is all material that I have found useful while running into "problems" (there aren't actually any good or bad things, only labels, but that's a topic for another day) while learning or teaching anapana meditation or the concepts of it. All of these articles have been linked in the topic, save three I want to talk about specially. 211 211 212 212 - [To Walk on the Path](https://write.as/mya249cn84nosg9r) 213 - - [Tapering Upward](https://github.com/Xe/when-then-zen/blob/master/skills/tapering-upward.feature) 213 + - [Tapering Upward](https://github.com/Xe/when-then-zen/blob/master/bonus/tapering-upward.feature) 214 214 - [Listen To Your Heart - Roxette](https://www.youtube.com/watch?v=yCC_b5WHLX0) 215 215 - [Maybe](https://write.as/excerpts/maybe) 216 216 - [Ebbs and Flows](https://write.as/excerpts/ebbs-and-flows)
+2 -2
blog/when-then-zen-wonderland-immersion-2019-09-12.markdown
··· 18 18 * 5 senses visualization for the scene you are in to ground yourself 19 19 * Semantic feature analysis for randomly selected items from that visualization 20 20 21 - As an example, consider [this](https://write.as/ma-insa/ma-insa-sense-visualization-morning-1-1-2019). This kind of detail is what you'd be looking for. 21 + As an example, consider [this](https://write.as/ma-insa/ma-insa-sense-visualization-morning-1-1-2019). This kind of detail is what you'd be looking for. 22 22 23 23 Breaking it down further though, let's consider a scene where you are sitting at a table in a cold, metal chair. 24 24 ··· 87 87 88 88 --- 89 89 90 - This is a slightly edited version of [this article](https://when-then-zen.christine.website/skills/paracosm-immerson). 90 + This is a slightly edited version of [this article](https://when-then-zen.christine.website/skills/paracosm-immersion).
+2 -2
blog/xe-2021-08-07.markdown
··· 33 33 orthography) 34 34 - /zi/ in the [International Phonetic 35 35 Alphabet](https://en.wikipedia.org/wiki/International_Phonetic_Alphabet) 36 - 36 + 37 37 I don't expect you to migrate over to calling me this immediately. If anything I 38 38 have a weak preference for this name. If you are used to calling me "Christine" 39 39 or something else, please feel free to do so. 40 40 41 41 Incidentally, this also means I have a mythical level of [neopronoun/handle 42 - synergy](http://pronoun.is/xe/xer/xer/xers/xerself) that few others can match. I 42 + synergy](/pronouns) that few others can match. I 43 43 also don't expect you to use these neopronouns for me (though it would be cool 44 44 if you did). 45 45
+3 -1
dhall/seriesDescriptions.dhall
··· 65 65 , details = 66 66 "Instructions on how to use Nix flakes, a new way to use Nix in a more reproducible way." 67 67 } 68 + , Desc::{ name = "nixos", details = "Nix." } 68 69 , Desc::{ 69 70 , name = "olin" 70 71 , details = "My attempts at running WebAssembly on the server." ··· 88 89 , name = "revueBackup" 89 90 , details = "My revue posts converted to xesite posts." 90 91 } 92 + , Desc::{ name = "rust", details = "Rust." } 91 93 , Desc::{ 92 - , name = "short-stories" 94 + , name = "short-story" 93 95 , details = "Flash fiction stories I've written over the years" 94 96 } 95 97 , Desc::{
+2 -2
gallery/cadey-alicia-ratio-2020-01-09.markdown
··· 13 13 Created with Procreate on iPadOS using an iPad Pro and an Apple Pencil. 14 14 15 15 [Time-lapse video](https://mst3k.interlinked.me/@cadey/103456010097441867) - 16 - [PSD on my Patreon] (https://www.patreon.com/posts/i-arted-my-33016810) 16 + [PSD on my Patreon](https://www.patreon.com/posts/i-arted-my-33016810) 17 17 18 - Based on a base by [DeviantArtist Kawaii-princess-paws](https://www.deviantart.com/kawaii-princess-paws/art/F2U-FTU-Orca-Dragon-Base-723430992). 18 + Based on a base by [DeviantArtist Kawaii-princess-paws](https://web.archive.org/web/20210318104511/https://www.deviantart.com/kawaii-princess-paws/art/F2U-FTU-Orca-Dragon-Base-723430992).
+1 -1
talks/how-my-website-works.markdown
··· 124 124 125 125 <xeblog-conv name="Cadey" mood="coffee">As a look into the kind of suffering it 126 126 is, take a smell of this. This is what <a 127 - href="https://github.com/Xe/site/blob/main/templates/talkpost.rs.html">my 127 + href="https://github.com/Xe/site/blob/eb77e4b7c02511463a871ab5eb27c5503026f17b/templates/talkpost.rs.html">my 128 128 templates</a> have to look like. ructe is great and all, but this is kind of 129 129 annoying to deal with.</xeblog-conv> 130 130