diff --git a/content/sundries/shit-code/birth_of_freedomdates.png b/content/sundries/shit-code/birth_of_freedomdates.png
new file mode 100644
index 0000000..5bef07c
Binary files /dev/null and b/content/sundries/shit-code/birth_of_freedomdates.png differ
diff --git a/content/sundries/shit-code/freedoms_birthday.png b/content/sundries/shit-code/freedoms_birthday.png
new file mode 100644
index 0000000..f90df2f
Binary files /dev/null and b/content/sundries/shit-code/freedoms_birthday.png differ
diff --git a/content/sundries/shit-code/index.md b/content/sundries/shit-code/index.md
index 84241be..7fba898 100644
--- a/content/sundries/shit-code/index.md
+++ b/content/sundries/shit-code/index.md
@@ -10,10 +10,10 @@ toc = false
# A sundry collection of intellectual property, some less intellectual than other
-Something I firmly believe is that it's possible to make jokes in any medium. Here at Nebcorp Heavy
+Something I firmly believe is that it's important to make jokes in any medium. Here at Nebcorp Heavy
Industries & Sundries, despite occasional dabbling with the
[physical](@/sundries/a-thoroughly-digital-artifact/index.md), we work primarily with software, and
-so this medium is one of our primary corporate humor channels. Below is just some of our work there,
+software is one of our primary corporate humor channels. Below is just some of our work there,
from least to most useless.
## *katabastird, a graphical countdown timer*
@@ -116,23 +116,174 @@ users that I can specifically identify:
![randical's popularity is baffling][randical_downloads]
-Who is downloading my software, and why? I don't know, and I don't care about knowing.
+Who is downloading my software, and why? I don't know, and more importantly, I don't care or need to
+know. It's truly better for everyone that way.
-## *freedom-dates, a library noone needed or wanted*
+## *freedom-dates, a library neither wanted nor needed*
-When I started writing this post, "freedom-dates" did not exist as a concrete thing, merely as a
-shit-head suggestion by me about the dumbest possible way to represent dates as a string.
+When I started writing this post, "freedom-dates" existed strictly as a shit-head idea of mine about
+the dumbest possible way to represent dates as a string. In fact, I had had it about a month before,
+while chatting with some friends on Discord.
----
- - freedom-dates
- - bad_print
+![the birth of the birth of freedom][freedomdates-discord]
+*
actually i did ask if i should*
+
+As usual, I thought tossing a small crate together to realize this joke would take, at most, one
+hour, and be maybe ten lines long. At least this time, it only took five or six times as long as I
+thought it would. In its own words, `freedom-dates`
+
+> provides a convenient suite of affordances for working with dates in *freedom format*. That is, it
+> takes representations of dates in Communinst formats like "2023-02-08", and liberates them into a
+> Freedom format like "2/8/23".
+
+For something like this, where I would not want to actually be accused of punching down or being a
+jingoistic moron, it's important to be as multidimensionally absurd as possible; I really needed to
+commit to the bit and provide maximum, richly-textured incongruity.
+
+Luckily, using the [Rust language](https://www.rust-lang.org/) helps with that in a lot of
+ways. After I [published it to the official package
+repository](https://crates.io/crates/freedom-dates), the official documentation site built and
+published the [autogenerated documentation](https://docs.rs/freedom-dates/latest/freedom_dates/) for
+it. This leads to the creation of content that looks like this:
+
+![this is history][freedoms-birthday]
+
+The slick-looking defaults and basically frictionless process for participating in the Rust
+ecosystem make it easy for culture-jamming like this. All I had to do was diligently comment, test,
+and document my code[^just-do-lots-of-work], and the larger systems took care of the rest.
+
+Rust also provides a lot of different fancy programming tools, like
+[`Traits`](https://docs.rs/freedom-dates/latest/freedom_dates/trait.FreedomTime.html), that allow
+you to dress up deeply unserious content in deeply serious costume.
+
+In all real seriousness, though, I hope that seeing how easy it is to get something this silly
+published in the official channels inspires you to overcome any trepidation about doing that
+yourself, if you have something you want to share!
+
+## *bad_print, a silly program*
+
+A few years ago, someone at the [Recurse Center](https://recurse.com/)[^rc-link] started a chat
+thread titled "bad print", and opened it with,
+
+> you probably didn't know that you needed a bad print function, one that spawns a thread for each
+> character in your string and prints the single character before quitting... well, now that you
+> know that you needed this, i've written one for you
+
+and then pasted a 3-line program in Haskell, and asked for other implementations of "bad print", in
+any language. I whipped one up using [Rayon](https://github.com/rayon-rs/rayon), a library for doing
+some things in parallel really easily, but eventually settled on the following, which uses a much
+smaller and more focused external library called
+[threadpool](https://github.com/rust-threadpool/rust-threadpool):
+
+``` rust
+use std::io::Write;
+use std::{env, io};
+
+use threadpool::ThreadPool;
+
+fn main() {
+ let args: Vec = env::args().collect();
+ if args.len() < 2 {
+ panic!("Please supply a phrase to be badly printed.")
+ }
+ let string = args[1..].join(" ");
+ let num_threads = string.len();
+
+ println!(--------);
+ let pool = ThreadPool::new(num_threads);
+ for c in string.chars() {
+ pool.execute(move || {
+ print!("{}", c);
+ let _ = io::stdout().flush();
+ });
+ }
+ pool.join();
+ println!();
+}
+```
+
+I noted about it, relative to earlier versions,
+
+> It appears to output strings with an even larger edit distance from the arguments given to it,
+> presumably due to the chaos inherent to harnessing the power of one full tpc (thread per char).
+
+Indeed, witness it for yourself:
+
+``` text
+$ bad_print Behold the awesome power of one full Thread Per Character.
+--------
+Bwoesmd elpoh or onh eu Thread earPCh ceearfofelwtter la.
+```
+
+By far the most impressive was a bash script that did *Matrix*-style cascading text in your
+terminal, called, appropriately enough, `bad_matrix`; that particular one was by someone [who's a
+bit of a shell
+wizard](https://www.evalapply.org/posts/shell-aint-a-bad-place-to-fp-part-2-functions-as-unix-tools/index.html#main).
# Other peformance arts
+An artist's medium is all of reality and all of time, so every piece of the work is eligible for
+expression; the frame is also part of the work. Software in my culture is still embedded in a
+context that is a bit stuffy, a bit up its ass about things like "copyright" and "semantic
+versioning"[^smegver], and so they're things I enjoy playing with, too.
+
+At the bottom of the [readme for
+freedom-dates](https://github.com/nebkor/misfit_toys/blob/master/freedom-dates/README.md), I have
+the following about the version:
+
+> Freedom *STARTS* at number 1, baby! And every release is ten times the last, so second release is
+> 10, then 100, etc. FREEDOM!
+
+and indeed it is at version 1.0.0; the two `.0`s after the `1` are there to satisfy Cargo's
+requirements about semver[^smegver].
+
## goldver
+When I version software for public consumption, I tend to use a scheme I call
+"[goldver](https://gitlab.com/nebkor/katabastird/-/blob/main/VERSIONING.md)", short for "Golden
+Versioning". It works like this:
+
+> When projects are versioned with goldver, the first version is "1". Note that it is not "1.0", or,
+> "1.0-prealpha-release-preview", or anything nonsensical like that. As new versions are released,
+> decimals from *phi*, the [Golden Ratio](https://en.wikipedia.org/wiki/Golden_ratio), are appended
+> after an initial decimal point. So the second released version will be "1.6", the third would be
+> "1.61", etc., and on until perfection is asymptotically approached as the number of released
+> versions goes to infinity.
+
+In order to be compliant with the semver version structure, the following rule is applied to
+projects published to the official Rust package repository:
+
+> Once there have been at least three releases, the version string in the Cargo.toml file will
+> always be of the form "1.6.x", where x is at least one digit long, starting with "1". Each
+> subsequent release will append the next digit of phi to x. The number of releases can be
+> calculated by counting the number of digits in x and adding 2 to that.
+
+I sincerely believe that this is *better than [semver](https://semver.org/)* for plenty of non-library
+software. It was Windows 95 and then Windows 2000; obviously there was a lot of change. I don't care
+about arguing about the whether or not this is a "patch release" or a "minor release" or a "major
+change". There are no downstream dependents who need to make sure they don't accidentally upgrade to
+the latest release. If someone wants to update it, they know what they're getting into, and they do
+it in an inherently manual way.
+
## chaos license
+Anything that I can[^chaos-software], I license under the Chaos License, which states,
+
+> This software is released under the terms of the Chaos License. In cases where the terms of the
+license are unclear, refer to the [Fuck Around and Find Out
+License](https://git.sr.ht/~boringcactus/fafol/tree/master/LICENSE-v0.2.md).
+
+This is about as
+[business-hostile](https://blog.joeardent.net/2017/01/say-no-to-corporate-friendly-licenses/) as I
+can imagine, far worse even than the strong copyleft licenses that terrified the lawyers at ILM when
+I was there. It oozes uncertainty and risk; you'd have to be deranged to seriously engage with
+it. But if you're just a person? Dive right in, it doesn't really matter!
+
+---
+That's about all I have for now, my droogs. Go take what you know and do something weird with it; it
+may amuse you! You might learn something! You might make someone laugh!
+
+---
[katabastird_normal]: ./katabastird_normal.png "counting down with one hour, twenty-nine minutes, and forty-three seconds remaining"
@@ -141,3 +292,20 @@ shit-head suggestion by me about the dumbest possible way to represent dates as
[katabastird_predator]: ./katabastird_predator.png "get to the choppah"
[randical_downloads]: ./randical_installs.png "who the hell are these people?"
+
+[freedomdates-discord]: ./birth_of_freedomdates.png "a screencap of a conversation where I suggest 'freedom-formatted' dates are 'seconds since july 4 1776'"
+
+[freedoms-birthday]: ./freedoms_birthday.png "Freedom was born at noon on the Fourth of July, '76, Eastern Time. This is History."
+
+[^just-do-lots-of-work]: I did more test-writing and documenting for that useless joke project
+than for most other software I ever write.
+
+[^rc-link]: See also the link at the bottom of the page here.
+
+[^smegver]: "semantic versioning" sounds like it could be a good idea: "the versions should be
+meaningful, and when they change, they should be changed in a way that means something
+consistent". As usual with these things, it's turned into a prescriptivist cult whose adherents
+insist that all software be released according to its terms. This is annoying.
+
+[^chaos-software]: This is basically anything I write by me, for me, as opposed to contributing to
+someone else's project.