Compare commits

...

85 commits

Author SHA1 Message Date
c38323c665
fix: Show abbr on tap for mobile
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2025-03-30 18:47:53 -05:00
77bc19371c
cleanup: Simplify category button code
This is in prep for a similar feature in BibTex citations
2025-03-30 18:47:52 -05:00
266348b302
feat: Add modern web favicons 2025-03-05 10:03:29 -06:00
249e5af628
feat: Add Twitter cards 2025-03-05 10:03:29 -06:00
ae4cbd1575
feat: Add microdata schema 2025-03-05 10:03:29 -06:00
4df3c185c6
feat: Add OpenGraph to pages 2025-03-05 10:03:29 -06:00
fba5c6fa3d
feat: Add RSS subscribe links 2025-03-05 10:03:29 -06:00
11ce31ff25
fix: correct missing word in bio 2025-03-05 10:03:28 -06:00
23f96f6ce0
fix: Add author for Ag Olympics reel
Fixes Atom feed validation error
2025-03-05 10:03:28 -06:00
fc96b7b3a8
feat: Add Atom feeds 2025-03-05 10:03:28 -06:00
763d58e379
style: Fix titles 2025-03-05 10:03:28 -06:00
9f9e96efd9
feat: Add custom blockquote hook 2025-03-05 10:03:28 -06:00
3b6748b59d
style: Shrink images that are in entries without dates
Otherwise there is too much whitespace
2025-03-05 10:03:28 -06:00
100f771f36
feat: Remove dates from entries that don't list them 2025-03-05 10:03:27 -06:00
2867ae44a7
refactor: Move blogroll to files like every other section 2025-03-05 10:03:27 -06:00
785aa22fbe
refactor: Move bio stuff around 2025-03-05 10:03:27 -06:00
d0ea34b38c
feat: Add chemical engineering cow as blog cover image 2025-03-05 10:03:26 -06:00
ed2cb6b71b
refactor: Use Permalink instead of RelPermalink
This allows for staging on Codeberg Pages
2025-02-25 10:03:16 -06:00
b2144788bc
refactor: Revise my bio 2025-02-25 10:01:47 -06:00
a8c42b3b96
style: Adjust spacing 2025-02-24 13:44:53 -06:00
80e48c4e42
fix: Bold my name on all devices 2025-02-24 13:36:20 -06:00
9d99603872
feat: Add microformat2 microdata for item lists 2025-01-31 10:43:02 -06:00
74c807a59c
feat: Add microformat2 markup for personal data 2025-01-31 10:43:02 -06:00
61ff3a1027
feat: Add rel=author to author listings 2025-01-31 10:43:02 -06:00
ddb1d6f0cb
fix: Only use rel=me on pages that are actually about me 2025-01-31 10:43:02 -06:00
2c4172fed6
refactor: Make scrolling image header use flexbox
After a bunch of mucking around, use flexbox as
directly as possible to make scrolling animation
the most consistent.
2025-01-31 10:43:02 -06:00
60747cf3ca
fix: Footer when using Chrome scrolling header 2025-01-31 10:43:02 -06:00
af7269d3e3
refactor: Remove relative positioning from cards 2025-01-31 10:43:02 -06:00
54d4113f16
style: Add padding around scrolling header text 2025-01-31 10:43:02 -06:00
8d3be08794
style: Fix Chrome scrolling header 2025-01-31 10:43:01 -06:00
91f11edae1
feat: Add Lightning crypto address 2025-01-31 10:43:01 -06:00
4e06ea3f95
build: Add weekly builds to check content adapters 2025-01-31 10:43:01 -06:00
25d488ee23
style: Only show blub on first page of lists 2025-01-31 10:43:01 -06:00
4969101fff
feat: Show not just featured pages on home 2025-01-31 10:43:01 -06:00
af1a17e760
refactor: Only show code projects that have been tagged
I don't want my dotfiles or webpage updates constantly
hogging the front page just because they get constant
commits. Switch to using tag dates to highlight when
projects have reached a significant milestone.
2025-01-31 10:43:01 -06:00
b2e5839d34
feat: Add category labels to titles 2025-01-31 10:43:01 -06:00
2f8d7d3080
feat: Add pages with internal link back into sitemap 2025-01-31 10:43:01 -06:00
c3f96dcc9b
feat: Exclude pages that have external link 2025-01-31 10:43:00 -06:00
cd512920da
refactor: Make Ag Olympics Reel link out 2025-01-31 10:43:00 -06:00
e6de2f26ef
feat: Restore Ag Olympics Reel 2025-01-31 10:43:00 -06:00
a146103847
style: Make tags show up in lowercase 2025-01-31 10:43:00 -06:00
3e05184b08
feat: Add tags to code repos 2025-01-31 10:43:00 -06:00
7bf8f6b036
build: Add SourceGit support for commit hooks 2025-01-31 10:43:00 -06:00
2b18eb61d9
cleanup: Add Prettier formatting for gotemplates 2025-01-31 10:43:00 -06:00
8ce938b544
style: Make footer always at bottom 2025-01-31 10:43:00 -06:00
1e620bd63e
feat: Add tags support to video adapter 2025-01-31 10:43:00 -06:00
f08fc89ddc
feat: Add crypto addresses 2025-01-31 10:42:59 -06:00
30f784ed3a
feat: Add GPG key 2025-01-31 10:42:59 -06:00
b2576f1047
cleanup: Remove more accounts that I don't think are important 2025-01-31 10:42:59 -06:00
585ffb5f0d
style: Add border and header around account list 2025-01-31 10:42:59 -06:00
841e42f91a
fix: Use relative units to prevent pagination overflow 2025-01-31 10:42:59 -06:00
5b4b3d9135
fix: Use build date for copyright notice 2025-01-31 10:42:59 -06:00
2af8e8e14f
style: Add padding to make dates look more comfortable 2025-01-31 10:42:59 -06:00
4c7e059c5c
refactor: Use truncate for summaries instead of summary 2025-01-31 10:42:59 -06:00
45d51e63cc
feat: Add people link parsing to video content adapter 2025-01-31 10:42:59 -06:00
2cff4ed16b
feat: Upgrade to Hugo v0.141.0
This update includes the ability to insert QR codes natively. To
complete the upgrade:

- Update flake.nix and flake.lock to the commit of nixpkgs that
  contains Hugo v0.141.0
- Update .woodpecker.yml to pull the Hugo v0.141.0 image
- Update content adapters to use the new error handling
  implemented in v0.141.0
2025-01-31 10:42:58 -06:00
43d69981d4
fix: Fix James Yates name 2025-01-31 10:42:58 -06:00
a2b07c3637
feat: Add Llama3-generated blog posts 2025-01-31 10:42:58 -06:00
d38836e6fd
cleanup: Remove accounts that aren't publicly viewable 2025-01-31 10:42:58 -06:00
e17e6ac867
feat: Add academia thumbnails 2025-01-31 10:42:58 -06:00
2c90c42831
ci: Switch to hugomods docker image
Using external web resources means that nix build will fail. Switch to using the hugomods image instead.
2025-01-31 10:42:58 -06:00
2222716ae1
feat: Add featured content filtering for external data adapters 2025-01-31 10:42:58 -06:00
0bb9bac286
feat: Enable pagination for all lists 2025-01-31 10:42:58 -06:00
ac5d4259e2
feat: Add icon to represent code projects 2025-01-31 10:42:58 -06:00
37427ba982
feat: Add content adapter for code projects 2025-01-31 10:42:57 -06:00
f9606b8e35
feat: Add content adapter for videos 2025-01-31 10:42:57 -06:00
8b83950d85
feat: Show all content on home page 2025-01-31 10:42:57 -06:00
a6dcb45fda
cleanup: Add properties to make all branch pages consistent 2025-01-31 10:42:57 -06:00
07af4c1874
fix: Only render scrolling header space on pages that have scrolling header 2025-01-31 10:42:57 -06:00
8a963afc99
feat: Add rel=me support for about menu link 2025-01-31 10:42:57 -06:00
0cf8b90206
refactor: Move about me stuff from home page to about page 2025-01-31 10:42:57 -06:00
060a6129bd
feat: Complete about people page 2025-01-31 10:42:56 -06:00
b781369485
fix: Rename people/list.html to people/term.html
This is really the layout for the list of works on each person's page,
so switch to the more specific lookup name.
2025-01-31 10:42:56 -06:00
7d50529ad1
refactor: move list card to partial template 2025-01-31 10:42:56 -06:00
9ff5002517
editor: Use Prettier for formatting within Zed 2025-01-31 10:42:56 -06:00
101ae735a2
feat: Add Accounts bar 2025-01-31 10:42:56 -06:00
67bec1e8dd
style: Remove Bootstrap container from main content 2025-01-31 10:42:56 -06:00
a2c32f3c0d
feat: Scaffold initial about me page 2025-01-31 10:42:56 -06:00
4bffdc255e
feat: Add Blog landing page 2025-01-31 10:42:56 -06:00
b4b0c16601
feat: Add Rickrolling login button 2025-01-31 10:42:56 -06:00
28a445915a
feat: Add code menu button 2025-01-31 10:42:55 -06:00
fac68cbec0
feat!: Remove website listing 2025-01-31 10:42:55 -06:00
7973e63ca0
refactor: Redirect videos to external PeerTube ref 2025-01-31 10:42:55 -06:00
c0716d277f
feat: Allow menu items to declare custom URLs 2025-01-31 10:42:55 -06:00
6709b3566f
chore: Add MacOS to gitignore 2025-01-31 10:42:40 -06:00
118 changed files with 2417 additions and 526 deletions

2
.envrc
View file

@ -1,2 +1,4 @@
use flake
layout node
mkdir -p "${HOME}/Library/Application Support/SourceGit"
echo "${PATH}" > "${HOME}/Library/Application Support/SourceGit/PATH"

28
.gitignore vendored
View file

@ -161,3 +161,31 @@ fontawesome-pro-6.3.0-web
### Nix Flake gitignore ###
result
### MacOS gitignore ###
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk

1
.prettierignore Normal file
View file

@ -0,0 +1 @@
layouts/_default/index.manifest.json

View file

@ -4,3 +4,6 @@ overrides:
- files: "*.html"
options:
parser: "go-template"
- files: "*.gotmpl"
options:
parser: "go-template"

View file

@ -1,14 +1,15 @@
when:
branch: master
event: push
event:
- push
- cron
cron: "weekly-build"
steps:
- name: Build site
image: nixos/nix:2.24.11
image: hugomods/hugo:std-base-non-root-0.141.0
commands:
- echo 'experimental-features = flakes nix-command' >> /etc/nix/nix.conf
- nix build
- mkdir public && cp -av result/* public
- hugo --minify
- name: Deploy to pages
image: codeberg.org/xfix/plugin-codeberg-pages-deploy:1
settings:

13
.zed/settings.json Normal file
View file

@ -0,0 +1,13 @@
{
"languages": {
"HTML": {
"formatter": {
"external": {
"command": "prettier",
"arguments": ["--stdin-filepath", "{buffer_path}"]
}
}
}
},
"file_types": { "HTML": ["gotmpl"] }
}

View file

@ -6,18 +6,20 @@ My personal website. Hosted over at <https://millironx.com>
## Notes to self
All dependencies are now bundled as a Nix Flake. The only trouble with this is
that npm packages don't play well with Nix (and especially Flakes), so npm
packages are specified twice: once in `package{-lock}.json` and then again in
`node*.nix`.
### Nix dev shell
All developer dependencies are now bundled as a Nix Flake. The only trouble with
this is that npm packages don't play well with Nix (and especially Flakes), so
npm packages are specified twice: once in `package{-lock}.json` and then again
in `node*.nix`.
Compounding this, there are formatters and commit hooks that require npm to be
functional. So, to develop right now requires allowing direnv to setup the Nix
development shell, then immediately installing npm packages via `npm ci`. VSCode
(with extensions) and Zed are smart enough to figure out how to use direnv, but
other programs (like SourceGit) not so much, so you'll need to launch those
programs from inside a direnv shell to make sure they have Prettier, Husky, and
all that jazz to execute the hooks.
(with extensions) and Zed are smart enough to figure out how to use direnv, and
direnv will pass the PATH to SourceGit for Mac, but other programs aren't that
smart, so you'll need to launch those programs from inside a direnv shell to
make sure they have Prettier, Husky, and all that jazz to execute the hooks.
Last compounding factors: if `node_modules` is present in the root directory,
then node2nix won't create a correct derivation, so `node_modules` will need to
@ -30,3 +32,11 @@ run.
Yes, hopefully I can get completely away from npm here soon, but this is a minor
inconvenience considering how (not) often I install new packages into this site,
and really discourages me from contributing to the website obesity crisis.
### Nix building
Nix building will not work because Hugo reaches out to the internet via content
adapters, and that (by intention) is not perfectly reproducable. As such,
_development_ tools are installed in a Nix shell, but building has been removed
from the Flake. Thankfully, hugomods provides "canonical" Docker images for hugo
now.

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Pro 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zm-141.651-35.33c4.937-32.999-20.191-50.739-54.55-62.573l11.146-44.702-27.213-6.781-10.851 43.524c-7.154-1.783-14.502-3.464-21.803-5.13l10.929-43.81-27.198-6.781-11.153 44.686c-5.922-1.349-11.735-2.682-17.377-4.084l.031-.14-37.53-9.37-7.239 29.062s20.191 4.627 19.765 4.913c11.022 2.751 13.014 10.044 12.68 15.825l-12.696 50.925c.76.194 1.744.473 2.829.907-.907-.225-1.876-.473-2.876-.713l-17.796 71.338c-1.349 3.348-4.767 8.37-12.471 6.464.271.395-19.78-4.937-19.78-4.937l-13.51 31.147 35.414 8.827c6.588 1.651 13.045 3.379 19.4 5.006l-11.262 45.213 27.182 6.781 11.153-44.733a1038.209 1038.209 0 0 0 21.687 5.627l-11.115 44.523 27.213 6.781 11.262-45.128c46.404 8.781 81.299 5.239 95.986-36.727 11.836-33.79-.589-53.281-25.004-65.991 17.78-4.098 31.174-15.792 34.747-39.949zm-62.177 87.179c-8.41 33.79-65.308 15.523-83.755 10.943l14.944-59.899c18.446 4.603 77.6 13.717 68.811 48.956zm8.417-87.667c-7.673 30.736-55.031 15.12-70.393 11.292l13.548-54.327c15.363 3.828 64.836 10.973 56.845 43.035z"/></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Pro 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M448 64H0v64H448V64zm0 160H128v64H448V224zM128 384v64H448V384H128zM64 224H0V448H64V224z"/></svg>

After

Width:  |  Height:  |  Size: 335 B

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Pro 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M0 320H128V224H0v96zM0 448H128V352H0v96zm288 0V352H160v96H288zm0-224H160v96H288V224zm0-160H160V192H288V64zm352 0H320V448H640V64zM33.1 192H128l0 0V160h0V97.1C113.6 111.3 93.8 120 72 120c-6.2 0-12.2-.7-18-2c1.3 5.8 2 11.8 2 18c0 21.8-8.7 41.6-22.9 56z"/></svg>

After

Width:  |  Height:  |  Size: 497 B

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Pro 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M260.6 278.6L238 301.3l-22.6-22.6-192-192L.7 64 46 18.7 68.6 41.4 238 210.7 407.4 41.4 430 18.7 475.3 64 452.6 86.6l-192 192zm0 192L238 493.3l-22.6-22.6-192-192L.7 256 46 210.7l22.6 22.6L238 402.7 407.4 233.4 430 210.7 475.3 256l-22.6 22.6-192 192z"/></svg>

After

Width:  |  Height:  |  Size: 496 B

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Pro 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM216 336h24V272H216 192V224h24 48 24v24 88h8 24v48H296 216 192V336h24zm72-144H224V128h64v64z"/></svg>

After

Width:  |  Height:  |  Size: 389 B

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Pro 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M120.2 391.8L256 256 391.8 391.8C426.5 357 448 309 448 256s-21.5-101-56.2-135.8L256 256 120.2 120.2C85.5 155 64 203 64 256s21.5 101 56.2 135.8zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z"/></svg>

After

Width:  |  Height:  |  Size: 438 B

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Pro 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M362.8 8l-9.4 30.6-128 416L216 485.2 277.2 504l9.4-30.6 128-416L424 26.8 362.8 8zm71.9 136l22.6 22.6L546.7 256l-89.4 89.4L434.7 368 480 413.3l22.6-22.6 112-112L637.3 256l-22.6-22.6-112-112L480 98.7 434.7 144zM160 98.7l-22.6 22.6-112 112L2.7 256l22.6 22.6 112 112L160 413.3 205.3 368l-22.6-22.6L93.3 256l89.4-89.4L205.3 144 160 98.7z"/></svg>

After

Width:  |  Height:  |  Size: 580 B

View file

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 4.233 4.233">
<path d="M0 2.265c0 .398.112.788.323 1.125l1.765-2.281c.013-.016.044-.016.057 0l.737.953h-.528l.011.042h.549l.156.201h-.648l.018.066h.681l.137.177H2.49l.024.085h.81l.122.158h-.888l.029.104h.939l.107.139H2.625l.032.115h1.065l.099.128H2.693l.032.115H3.91c.211-.337.323-.727.323-1.125 0-1.169-.947-2.116-2.117-2.116S0 1.096 0 2.265zm2.761 1.253l.032.115h.939l.091-.115zm.068.243l.032.115h.628l.126-.115zm.067.243l.032.114h.212l.184-.114z" paint-order="markers fill stroke"/>
</svg>

After

Width:  |  Height:  |  Size: 573 B

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Pro 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M606 189.5l-54.8 109.9-54.9-109.9h-37.5l10.9 20.6c-11.5-19-35.9-26-63.3-26-31.8 0-67.9 8.7-71.5 43.1h33.7c1.4-13.8 15.7-21.8 35-21.8 26 0 41 9.6 41 33v3.4c-12.7 0-28 .1-41.7.4-42.4.9-69.6 10-76.7 34.4 1-5.2 1.5-10.6 1.5-16.2 0-52.1-39.7-76.2-75.4-76.2-21.3 0-43 5.5-58.7 24.2v-80.6h-32.1v169.5c0 10.3-.6 22.9-1.1 33.1h31.5c.7-6.3 1.1-12.9 1.1-19.5 13.6 16.6 35.4 24.9 58.7 24.9 36.9 0 64.9-21.9 73.3-54.2-.5 2.8-.7 5.8-.7 9 0 24.1 21.1 45 60.6 45 26.6 0 45.8-5.7 61.9-25.5 0 6.6.3 13.3 1.1 20.2h29.8c-.7-8.2-1-17.5-1-26.8v-65.6c0-9.3-1.7-17.2-4.8-23.8l61.5 116.1-28.5 54.1h35.9L640 189.5zM243.7 313.8c-29.6 0-50.2-21.5-50.2-53.8 0-32.4 20.6-53.8 50.2-53.8 29.8 0 50.2 21.4 50.2 53.8 0 32.3-20.4 53.8-50.2 53.8zm200.9-47.3c0 30-17.9 48.4-51.6 48.4-25.1 0-35-13.4-35-25.8 0-19.1 18.1-24.4 47.2-25.3 13.1-.5 27.6-.6 39.4-.6zm-411.9 1.6h128.8v-8.5c0-51.7-33.1-75.4-78.4-75.4-56.8 0-83 30.8-83 77.6 0 42.5 25.3 74 82.5 74 31.4 0 68-11.7 74.4-46.1h-33.1c-12 35.8-87.7 36.7-91.2-21.6zm95-21.4H33.3c6.9-56.6 92.1-54.7 94.4 0z"/></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Pro 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M311.9 260.8L160 353.6 8 260.8 160 0l151.9 260.8zM160 383.4L8 290.6 160 512l152-221.4-152 92.8z"/></svg>

After

Width:  |  Height:  |  Size: 343 B

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M390.9 298.5c0 0 0 .1 .1 .1c9.2 19.4 14.4 41.1 14.4 64C405.3 445.1 338.5 512 256 512s-149.3-66.9-149.3-149.3c0-22.9 5.2-44.6 14.4-64h0c1.7-3.6 3.6-7.2 5.6-10.7c4.4-7.6 9.4-14.7 15-21.3c27.4-32.6 68.5-53.3 114.4-53.3c33.6 0 64.6 11.1 89.6 29.9c9.1 6.9 17.4 14.7 24.8 23.5c5.6 6.6 10.6 13.8 15 21.3c2 3.4 3.8 7 5.5 10.5zm26.4-18.8c-30.1-58.4-91-98.4-161.3-98.4s-131.2 40-161.3 98.4L0 202.7 256 0 512 202.7l-94.7 77.1z"/></svg>

After

Width:  |  Height:  |  Size: 647 B

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Pro 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M0 32v448h448V32H0zm21.2 197.2H21c.1-.1.2-.3.3-.4 0 .1 0 .3-.1.4zm218 53.9V384h-31.4V281.3L128 128h37.3c52.5 98.3 49.2 101.2 59.3 125.6 12.3-27 5.8-24.4 60.6-125.6H320l-80.8 155.1z"/></svg>

After

Width:  |  Height:  |  Size: 428 B

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Pro 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM232 272H144V248L320 112 280 240h88v24L192 400l40-128z"/></svg>

After

Width:  |  Height:  |  Size: 351 B

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Pro 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M563.2 267.3c56.2-56.2 56.2-147.4 0-203.6S415.8 7.4 359.6 63.7L348.3 75l45.3 45.3 11.3-11.3c31.2-31.2 81.9-31.2 113.1 0s31.2 81.9 0 113.1L404.8 335.2c-31.2 31.2-81.9 31.2-113.1 0c-25.6-25.6-30.3-64.3-13.8-94.6c1.8-3.4 3.9-6.7 6.3-9.8l-51.2-38.4c-4.3 5.7-8.1 11.6-11.4 17.8c-29.5 54.6-21.3 124.2 24.9 170.3c56.2 56.2 147.4 56.2 203.6 0L563.2 267.3zM42.8 244.7c-56.2 56.2-56.2 147.4 0 203.6s147.4 56.2 203.6 0L257.7 437l-45.3-45.3-11.3 11.3c-31.2 31.2-81.9 31.2-113.1 0s-31.2-81.9 0-113.1L201.2 176.8c31.2-31.2 81.9-31.2 113.1 0c25.6 25.6 30.3 64.3 13.8 94.6c-1.8 3.4-3.9 6.7-6.3 9.8l51.2 38.4c4.3-5.7 8.1-11.6 11.4-17.8c29.5-54.6 21.3-124.2-24.9-170.3c-56.2-56.2-147.4-56.2-203.6 0L42.8 244.7z"/></svg>

After

Width:  |  Height:  |  Size: 940 B

View file

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
id="svg30"
width="256"
height="256"
version="1.1"
viewBox="0 0 256 256"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<g
id="layer1"
transform="matrix(1.1717564,0,0,1.1837458,-307.94823,-494.86516)">
<g
id="g4532-1"
transform="translate(5.8770956,91.426111)">
<path
style="fill:currentcolor;fill-opacity:1;stroke:none"
id="path2996-71-2"
d="m 421.12559,370.59555 -0.22191,7.93679 -59.06905,4.6472 -44.51391,28.90141 -10.54758,48.3126 c 0,0 7.17038,31.22666 13.28891,37.55616 6.11851,6.3295 18.77128,24.48348 34.38405,27.64823 15.61277,3.16475 28.90472,6.74153 41.56372,3.57678 12.65901,-3.16475 21.10821,-6.95775 21.10821,-6.95775 l 5.27379,-2.53246 c 0,0 -1.29791,1.13683 -3.38097,2.59773 25.19125,-16.15038 41.87702,-44.40295 41.87702,-76.54826 0,-31.23648 -15.75649,-58.78641 -39.76228,-75.13843 z" />
<path
style="fill:currentcolor;fill-opacity:1;stroke:none"
id="path3970-2-2"
d="m 407.73556,341.565 c 0,0 2.22629,-5.49152 4.30416,-5.63994 2.07787,-0.14842 3.26523,1.18736 4.601,2.67155 1.33578,1.4842 4.00733,3.71049 4.00733,3.71049 0,0 12.1704,-4.15574 25.82499,3.26523 13.65459,7.42097 15.58405,9.64727 18.2556,14.84195 2.67155,5.19468 1.48419,18.25559 1.48419,18.25559 l 1.59552,7.79202 -3.37655,4.37838 -23.74712,-4.00732 -28.34812,-20.92715 z" />
<path
style="fill:currentcolor;fill-opacity:0.15686275;stroke:none"
id="path2996-71-9-9"
d="m 421.14051,370.59877 -4.71875,6.4375 -54.5625,6.125 -44.53125,28.90625 -10.53125,48.3125 c 0,0 7.16272,31.233 13.28125,37.5625 6.11851,6.3295 18.76223,24.4915 34.375,27.65625 15.61277,3.16475 28.9035,6.72725 41.5625,3.5625 12.65901,-3.16476 21.125,-6.9375 21.125,-6.9375 l 5.28125,-2.53125 c 0,0 -1.32319,1.13285 -3.40625,2.59375 2.85284,-1.82899 5.59596,-3.84127 8.21875,-5.96875 -14.61843,9.14896 -32.44705,13.74807 -42.5625,13.75 -37.58529,0 -68.0625,-30.44595 -68.0625,-68.03125 0,-13.26857 3.20363,-26.22913 9.71875,-36.78125 4.58818,1.97009 9.419,5.31967 12.46875,10.21875 0.49071,0.70737 0.82821,1.51845 1.375,2.1875 2.69222,3.29423 5.6,4.14654 8.53125,4.28125 6.26371,0.18237 9.22096,-4.49396 9.5,-10.78125 0.008,-0.4932 0.0453,-0.24655 0.0107,-0.67835 -0.19809,-4.19006 -6.3732,-19.67162 -16.63572,-21.44665 1.79623,-1.38222 3.66804,-2.67393 5.625,-3.84375 6.60974,-3.95111 20.65354,-8.43512 40.125,-5.5 9.8747,1.48851 17.96522,3.61684 30.4375,7.59375 14.47518,4.61555 22.51928,11.06231 33.65625,12.34375 1.87408,0.21564 3.76589,0.12973 5.59375,-0.21875 -6.07268,-20.0996 -18.90378,-37.25222 -35.875,-48.8125 z" />
<path
style="fill:currentcolor;fill-opacity:1;stroke:none"
id="path2996-7-5-8"
d="m 364.27074,330.97552 c -56.86691,0 -102.96753,46.10062 -102.96753,102.96752 0,56.86692 46.31202,104.53546 102.96753,104.54176 36.96195,1.09859 71.24999,-16.1124 82.55185,-44.15204 -4.17009,1.92437 -8.75719,6.55973 -12.21576,9.59364 -6.52122,5.72051 -13.59622,6.87984 -22.59008,11.56447 -17.43318,9.0804 -36.28791,7.87436 -53.8771,4.0099 -14.29694,-3.14114 -29.97844,-10.13252 -38.39328,-21.31617 -8.41484,-11.18365 -13.35469,-37.74208 -13.35469,-37.74208 l 10.59979,-48.55176 44.73427,-29.04448 59.36146,-4.67021 0.22301,-7.97608 c 8.96128,6.10416 16.77558,13.7674 23.06242,22.59015 h 14.29922 c -15.88288,-36.37996 -52.16799,-61.81462 -94.40111,-61.81462 z" />
<path
style="fill:var(--body-background);fill-opacity:1;stroke:none"
id="path3004-7-2"
d="m 402.89176,361.81724 c -19.94083,0.10177 -31.55369,2.41314 -52.24554,11.24749 -26.25073,12.21158 -52.60694,35.07689 -52.75536,72.44929 -0.17297,43.55343 35.31496,78.85563 78.86874,78.85563 22.50608,0 46.74156,-8.22147 61.10833,-23.34185 -15.46163,12.94697 -40.94323,17.04829 -52.97408,17.05059 -37.58529,0 -68.30905,-27.96064 -68.30905,-65.54594 0,-23.74751 11.64012,-41.24257 30.60558,-52.57958 6.60974,-3.95111 20.64508,-8.44491 40.11654,-5.50979 9.8747,1.48851 17.96277,3.61873 30.43505,7.59564 14.47518,4.61555 22.53835,11.06312 33.67532,12.34456 12.68384,1.45943 26.08344,-10.49297 16.1883,-29.08383 0,0 -1.7935,1.78974 -3.29276,2.6893 -1.49926,0.89956 -3.59261,-0.28861 -9.58966,-2.38758 -5.99706,-2.09896 -6.90036,-4.50903 -15.29624,-10.20623 -8.39587,-5.6972 -8.39212,-11.98661 -32.98004,-13.48587 -1.15256,-0.0703 -2.3448,-0.10399 -3.55513,-0.0918 z" />
<circle
style="fill:currentcolor;fill-opacity:1;stroke:none"
id="path3026-6-2"
cx="542.143"
cy="384.505"
r="17.857"
transform="matrix(0.43552317,0,0,0.43552317,200.99133,207.88928)" />
<circle
style="fill:currentcolor;fill-opacity:1;stroke:none"
id="path3026-4-1-7"
cx="542.143"
cy="384.505"
r="17.857"
transform="matrix(0.22576754,0,0,0.28084084,343.47729,272.83142)" />
<path
style="fill:currentcolor;fill-opacity:1;stroke:none"
id="path3889-4-8"
d="m 334.29213,381.2133 c -5.0673,1.23397 -17.41583,4.23292 -24.7524,14.18981 -7.04618,9.56276 -6.47436,20.71233 -6.63135,23.68137 2.04048,-3.28467 7.62657,-2.8188 11.47779,-2.22301 9.08081,1.40481 18.39265,3.8222 24.21457,13.17446 0.49071,0.70737 0.83913,1.52443 1.38592,2.19348 2.69222,3.29423 5.60185,4.13912 8.5331,4.27383 6.26371,0.18237 9.22123,-4.49314 9.50027,-10.78043 0.008,-0.4932 0.002,-0.25694 -0.0327,-0.68874 -0.20697,-4.37798 -6.92743,-21.07877 -18.01254,-21.59268 -0.12354,-0.004 -0.24871,-0.003 -0.37117,-0.0108 -6.14897,-0.3757 -10.92788,-5.61334 -10.74875,-11.86496 0.61735,-4.05018 2.50816,-7.25309 6.21847,-9.85231 z" />
<path
style="fill:currentcolor;fill-opacity:1;stroke:none"
id="path3950-2-5"
d="m 463.82955,388.18782 c 0,0 -1.00956,1.74485 -3.18699,2.79051 -0.89408,0.42937 -2.46423,-0.6477 -3.93792,0.84949 -3.12914,6.28101 4.51484,11.52502 8.07692,11.3766 3.56207,-0.14842 6.37226,-3.73749 6.22386,-6.85431 -0.14844,-4.82363 -7.17587,-8.16229 -7.17587,-8.16229 z" />
<path
style="fill:currentcolor;fill-opacity:0.15686275;stroke:none"
id="path2996-7-8-5-3-8"
d="m 364.27072,330.97552 c -56.86689,0 -102.96751,46.10062 -102.96751,102.96752 0,0.88855 0.0168,1.76604 0.0395,2.64995 1.43019,-55.62033 46.96307,-100.2651 102.92817,-100.2651 15.6777,0 30.54322,3.50458 43.8422,9.77332 0.70651,-1.52648 2.35421,-4.71467 3.93557,-4.82763 2.07785,-0.14841 3.25571,1.19199 4.59149,2.67619 1.33579,1.48419 4.01428,3.71255 4.01428,3.71255 0,0 12.16272,-4.15446 25.81731,3.26652 13.65459,7.42097 15.58946,9.6424 18.26103,14.83708 1.1117,2.16165 1.55378,5.68588 1.69231,9.06492 0.14458,-4.27194 0.0599,-11.0101 -1.69231,-14.41729 -2.67157,-5.19468 -4.60644,-7.41611 -18.26103,-14.83708 -13.65459,-7.42098 -25.81731,-3.26652 -25.81731,-3.26652 0,0 -2.67849,-2.22836 -4.01428,-3.71255 -1.33578,-1.4842 -2.51364,-2.8246 -4.59149,-2.67619 -1.58136,0.11296 -3.22906,3.30115 -3.93557,4.82763 -13.29898,-6.26874 -28.1645,-9.77332 -43.8422,-9.77332 z" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7 KiB

View file

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1536" height="1792" viewBox="0 0 1536 1792">
<path d="M40.467 163.152v1465.696H145.92V1664H0V128h145.92v35.152zm450.757 464.64v74.14h2.069c19.79-28.356 43.717-50.215 71.483-65.575 27.765-15.656 59.963-23.336 96-23.336 34.56 0 66.165 6.795 94.818 20.086 28.652 13.293 50.216 37.22 65.28 70.893 16.246-23.926 38.4-45.194 66.166-63.507 27.766-18.314 60.848-27.472 98.954-27.472 28.948 0 55.828 3.545 80.64 10.635 24.812 7.088 45.785 18.314 63.508 33.968 17.722 15.656 31.31 35.742 41.354 60.85 9.747 25.107 14.768 55.236 14.768 90.683v366.573h-150.35V865.28c0-18.314-.59-35.741-2.068-51.987-1.476-16.247-5.316-30.426-11.52-42.24-6.499-12.112-15.656-21.563-28.062-28.653-12.405-7.088-29.242-10.634-50.214-10.634-21.268 0-38.4 4.135-51.397 12.112-12.997 8.27-23.336 18.608-30.72 31.901-7.386 12.997-12.407 27.765-14.77 44.602-2.363 16.542-3.84 33.379-3.84 50.216v305.133H692.971v-307.2c0-16.247-.294-32.197-1.18-48.149-.591-15.95-3.84-30.424-9.157-44.011-5.317-13.293-14.178-24.223-26.585-32.197-12.406-7.976-30.425-12.112-54.646-12.112-7.088 0-16.542 1.478-28.062 4.726-11.52 3.25-23.04 9.157-33.968 18.02-10.93 8.86-20.383 21.563-28.063 38.103-7.68 16.543-11.52 38.4-11.52 65.28v317.834H349.44V627.792zm1004.309 1001.056V163.152H1390.08V128H1536v1536h-145.92v-35.152z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Pro 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M352 384h108.4C417 455.9 338.1 504 248 504S79 455.9 35.6 384H144V256.2L248 361l104-105v128zM88 336V128l159.4 159.4L408 128v208h74.8c8.5-25.1 13.2-52 13.2-80C496 119 385 8 248 8S0 119 0 256c0 28 4.6 54.9 13.2 80H88z"/></svg>

After

Width:  |  Height:  |  Size: 462 B

1
assets/graphics/fa/p.svg Normal file
View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Pro 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M64 288h96c53 0 96-43 96-96s-43-96-96-96H64V288zM0 352V320 288 96 64 32H32 64h96c88.4 0 160 71.6 160 160s-71.6 160-160 160H64v96 32H0V448 352z"/></svg>

After

Width:  |  Height:  |  Size: 390 B

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Pro 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M192 96L352 256 192 416l-32 0 0-96L0 320 0 192l160 0 0-96 32 0zM352 416l96 0 0-320-96 0-32 0 0-64 32 0 128 0 32 0 0 32 0 384 0 32-32 0-128 0-32 0 0-64 32 0z"/></svg>

After

Width:  |  Height:  |  Size: 404 B

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Pro 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm32 80c150.2 0 272 121.8 272 272H320c0-123.7-100.3-224-224-224V112zm0 96c97.2 0 176 78.8 176 176H224c0-70.7-57.3-128-128-128V208zm0 144a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z"/></svg>

After

Width:  |  Height:  |  Size: 523 B

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Pro 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M0 80v80H48 96V80c0-26.5-21.5-48-48-48S0 53.5 0 80zM112 32c10 13.4 16 30 16 48V384c0 35.3 28.7 64 64 64s64-28.7 64-64V336 320h16H480V128c0-53-43-96-96-96H112zM464 480c61.9 0 112-50.1 112-112V352H288v32c0 53-43 96-96 96H368h96z"/></svg>

After

Width:  |  Height:  |  Size: 474 B

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Pro 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8zm100.7 364.9c-4.2 0-6.8-1.3-10.7-3.6-62.4-37.6-135-39.2-206.7-24.5-3.9 1-9 2.6-11.9 2.6-9.7 0-15.8-7.7-15.8-15.8 0-10.3 6.1-15.2 13.6-16.8 81.9-18.1 165.6-16.5 237 26.2 6.1 3.9 9.7 7.4 9.7 16.5s-7.1 15.4-15.2 15.4zm26.9-65.6c-5.2 0-8.7-2.3-12.3-4.2-62.5-37-155.7-51.9-238.6-29.4-4.8 1.3-7.4 2.6-11.9 2.6-10.7 0-19.4-8.7-19.4-19.4s5.2-17.8 15.5-20.7c27.8-7.8 56.2-13.6 97.8-13.6 64.9 0 127.6 16.1 177 45.5 8.1 4.8 11.3 11 11.3 19.7-.1 10.8-8.5 19.5-19.4 19.5zm31-76.2c-5.2 0-8.4-1.3-12.9-3.9-71.2-42.5-198.5-52.7-280.9-29.7-3.6 1-8.1 2.6-12.9 2.6-13.2 0-23.3-10.3-23.3-23.6 0-13.6 8.4-21.3 17.4-23.9 35.2-10.3 74.6-15.2 117.5-15.2 73 0 149.5 15.2 205.4 47.8 7.8 4.5 12.9 10.7 12.9 22.6 0 13.6-11 23.3-23.2 23.3z"/></svg>

After

Width:  |  Height:  |  Size: 1 KiB

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Pro 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm96-352.5l-4.3 6.2L229.8 336H328h24v48H328 184 160V352.5l4.3-6.2L282.2 176H184 160V128h24H328h24v31.5z"/></svg>

After

Width:  |  Height:  |  Size: 399 B

View file

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1536" height="1792" viewBox="0 0 1536 1792">
<path d="M662.716 1663.44l667.946-310.051V428.98L662.714 128.5.508 428.98v924.408zm-348.331-279.43v-202.24l24.881-96.325 352.155-378.95H314.385V492.137l59.332-82.295h600.96l62.842 78.47v218.181l-338.44 378.95h275.6l62.841 77.188v221.379z" fill-rule="evenodd" stroke-width="14.41"/>
</svg>

After

Width:  |  Height:  |  Size: 385 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

View file

@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="512px"
height="512px"
viewBox="0 0 512 512"
id="svg2"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
>
<style>
svg {
background-color: transparent;
color-scheme: light dark;
}
path {
stroke: black;
fill: none;
fill-rule: evenodd;
stroke-dasharray: none;
stroke-linecap: round;
stroke-linejoin: round;
stroke-miterlimit: 4;
stroke-opacity: 1;
stroke-width: 21;
}
g {
filter: drop-shadow(7px 7px white);
}
@media (prefers-color-scheme: dark) {
path {
stroke: white;
}
g {
filter: drop-shadow(7px 7px black);
}
}
</style>
<g>
<path
d="M 76.0229 257.139 L 148.925 257.139 C 154.744 257.139 160.688 256.874 166.097 254.728 C 171.506 252.583 176.104 248.69 179.651 244.078 C 183.198 239.465 185.786 234.178 189.279 229.525 C 191.026 227.198 193.032 225.031 195.44 223.398 C 197.848 221.766 200.692 220.688 203.602 220.688 C 206.511 220.688 209.355 221.766 211.763 223.398 C 214.171 225.031 216.177 227.198 217.924 229.525 C 221.417 234.178 224.005 239.465 227.552 244.078 C 231.099 248.69 235.697 252.583 241.106 254.728 C 246.515 256.874 252.459 257.139 258.278 257.139 L 331.181 257.139"
/>
<path d="M 363.075 301.564 L 435.977 210.436" />
<path d="M 363.075 210.436 L 435.977 301.564" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View file

@ -1,19 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
width="29.935179mm"
height="8.7677584mm"
viewBox="0 0 106.06953 31.06686"
id="svg2"
version="1.1">
<defs
id="defs4">
version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
>
<style>
svg {
background-color: transparent;
@ -21,23 +15,28 @@
}
path {
stroke: light-dark(black, white);
stroke: black;
fill: none;
fill-rule: evenodd;
stroke-dasharray: none;
stroke-linecap: round;
stroke-linejoin: round;
stroke-miterlimit: 4;
stroke-opacity: 1;
stroke-width: 6;
}
@media (prefers-color-scheme: dark) {
path {
stroke: white;
}
}
</style>
</defs>
<g
transform="translate(-201.95727,-469.32877)">
<g>
<path
style="fill:none;fill-rule:evenodd;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 205,497.3622 h 20 c 1.59641,0 3.22706,-0.0728 4.71101,-0.66135 1.48394,-0.58857 2.74536,-1.65633 3.71836,-2.92194 0.973,-1.26562 1.6829,-2.71578 2.64135,-3.99245 0.47923,-0.63833 1.02956,-1.23277 1.69028,-1.68064 0.66071,-0.44787 1.4408,-0.74362 2.239,-0.74362 0.7982,0 1.57829,0.29575 2.239,0.74362 0.66072,0.44787 1.21105,1.04231 1.69028,1.68064 0.95845,1.27667 1.66835,2.72683 2.64135,3.99245 0.973,1.26561 2.23442,2.33337 3.71836,2.92194 1.48395,0.58857 3.1146,0.66135 4.71101,0.66135 h 20"
transform="translate(1.2499871,-12.187492)" />
<path
style="fill:none;fill-rule:evenodd;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 285,497.3622 20,-25"
/>
<path
style="fill:none;fill-rule:evenodd;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 285,472.3622 20,25"
d="M 4.29299 15.8457 L 24.293 15.8457 C 25.8894 15.8457 27.52 15.7729 29.004 15.1843 C 30.4879 14.5958 31.7494 13.528 32.7224 12.2624 C 33.6954 10.9968 34.4053 9.54663 35.3637 8.26996 C 35.8429 7.63163 36.3933 7.03719 37.054 6.58932 C 37.7147 6.14145 38.4948 5.8457 39.293 5.8457 C 40.0912 5.8457 40.8713 6.14145 41.532 6.58932 C 42.1927 7.03719 42.743 7.63163 43.2223 8.26996 C 44.1807 9.54663 44.8906 10.9968 45.8636 12.2624 C 46.8366 13.528 48.098 14.5958 49.582 15.1843 C 51.0659 15.7729 52.6966 15.8457 54.293 15.8457 L 74.293 15.8457"
/>
<path d="M 83.043 28.0332 L 103.043 3.0332" />
<path d="M 83.043 3.0332 L 103.043 28.0332" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Before After
Before After

View file

@ -165,7 +165,18 @@
);
--container-border: light-dark(var(--swiss-brown-6), var(--eclipse-16));
--container-background: light-dark(var(--swiss-brown-4), var(--eclipse-12));
--container-border-alt: light-dark(var(--eclipse-16), var(--swiss-brown-6));
--container-background-alt: light-dark(
var(--eclipse-12),
var(--swiss-brown-4)
);
--motto-background: rgba(0, 0, 0, 0.66);
--page-button-text: var(--prickly-pear-yellow-1);
--page-button-background: var(--prickly-pear-yellow-8);
--page-button-background-hover: var(--prickly-pear-yellow-10);
--page-button-background-active: var(--prickly-pear-yellow-12);
--page-button-background-disabled: var(--prickly-pear-yellow-6);
--page-button-text-disabled: var(--eclipse-7);
/*
Fonts
@ -175,6 +186,7 @@
--font-family-slab-serif: Rockwell, "Rockwell Nova", "Roboto Slab",
"DejaVu Serif", "Sitka Small", serif;
--font-family-system-ui: system-ui, sans-serif;
--font-family-monospace: "Nimbus Mono PS", "Courier New", monospace;
}
/*
@ -186,6 +198,13 @@ html {
font-family: var(--font-family-slab-serif);
}
body {
display: flex;
flex-direction: column;
min-height: 98vh;
margin: 0 8px;
}
a {
color: var(--link-color);
}
@ -235,6 +254,11 @@ nav a:hover {
background-color: var(--nav-button-background-hover);
}
main {
display: flex;
flex-direction: column;
}
figure {
border-color: var(--container-border);
border-width: 1.5pt;
@ -244,22 +268,29 @@ figure {
padding: 1.25pt;
}
blockquote {
figure:has(blockquote) {
background: linear-gradient(
to right,
var(--container-border),
var(--container-background)
);
border-left: 5px solid black;
padding: 1px;
padding-left: 6px;
border: none;
border-radius: 0;
border-left: 6px solid black;
padding: 0.25em 1em;
}
blockquote small::before {
figure:has(blockquote) > blockquote {
margin: 0;
}
figure:has(blockquote) > figcaption::before {
content: "\2014 \00A0";
}
blockquote small {
figure:has(blockquote) > figcaption {
margin-top: -1em;
margin-bottom: 1em;
font-size: 80%;
}
@ -271,6 +302,7 @@ footer {
display: flex;
justify-content: space-between;
align-items: center;
flex-shrink: 0;
}
form {
@ -295,6 +327,25 @@ textarea:invalid {
border-bottom-color: var(--ear-tag-red);
}
code {
font-family: var(--font-family-monospace);
}
/*
abbr element "tooltip" for mobile
heavily modified from https://bitsofco.de/making-abbr-work-for-touchscreen-keyboard-mouse/
*/
abbr[title]:focus::after {
content: attr(title);
background-color: #1e1e1e;
color: #fff;
border-radius: 0.125em;
box-shadow: 1px 1px 5px 0 rgba(0, 0, 0, 0.4);
font-size: smaller;
padding: 0.5em;
display: block;
}
/*
Container-type helper classes
*/
@ -304,6 +355,12 @@ textarea:invalid {
width: 100%;
}
.motto-wrapper {
display: block;
flex: 1 0 30vh;
margin-bottom: 1em;
}
.motto {
position: relative;
display: grid;
@ -313,6 +370,7 @@ textarea:invalid {
font-weight: 600;
text-shadow: 0 0 10px rgba(0, 0, 0, 0.33);
width: 100%;
height: 100%;
padding: 0 0 0.5em 0;
border-radius: 0.25rem;
z-index: 10;
@ -340,6 +398,7 @@ textarea:invalid {
.motto .motto-inside h1 {
background-color: var(--motto-background);
padding: 0.5rem;
}
.card {
@ -351,11 +410,23 @@ textarea:invalid {
margin: 1rem 0;
padding: 0.5rem;
padding-top: 0;
position: relative;
display: flex;
flex-direction: column;
}
.card-content {
display: flex;
flex-direction: column;
flex-grow: 1;
}
.card-header {
display: flex;
flex-direction: row;
justify-content: space-between;
flex-grow: 1;
}
.card-link {
white-space: nowrap;
display: inline-flex;
@ -363,22 +434,26 @@ textarea:invalid {
align-items: center;
text-underline-offset: 0.25em;
backface-visibility: hidden;
margin: 0 0.5em;
margin: 0.1em 0.25em;
padding: 0.33em;
padding-right: 0.45em;
}
.card-body {
margin-top: 0.33em;
}
.category-button {
position: absolute;
top: 1em;
right: 1em;
display: grid;
align-items: center;
justify-items: center;
color: white;
background-color: var(--ear-tag-red);
border-radius: 0.5em;
padding: 1em;
}
.card-title a h3 {
margin-right: 3.5em;
margin: 1em;
height: 2em;
aspect-ratio: 1 / 1;
}
.card-title > a {
@ -421,6 +496,69 @@ textarea:invalid {
fill: currentColor;
}
.account-bucket {
display: grid;
grid-template-columns: 3em 1em 1fr;
background-color: var(--container-background-alt);
padding: 1em 0;
border-radius: 0.5em;
border-color: var(--container-border-alt);
border-style: solid;
color: light-dark(white, black);
margin: 1em 0;
align-items: center;
}
.account-bucket h3 {
align-self: center;
writing-mode: sideways-lr;
}
.account-bucket details {
grid-column: 3;
}
.account-bucket .crypto-list {
grid-column: 3;
max-width: 100%;
}
.account-list {
display: flex;
justify-content: space-between;
flex-wrap: wrap;
width: calc(100% - 1.5em);
}
.account-bucket .account-list {
grid-column: 3;
}
.account-list a {
font-size: xx-large;
text-decoration: none;
color: inherit;
padding: 0.5em;
}
.account-list a:hover {
background-color: var(--container-background);
border-color: var(--container-border);
border-width: 2.5px;
border-radius: 0.5em;
border-style: solid;
padding: calc(0.5em - 2.5px);
}
figcaption .mono {
color: light-dark(black, white);
overflow-wrap: anywhere;
}
.crypto-list details {
max-width: 100%;
}
/*
Helper classes
*/
@ -431,6 +569,9 @@ textarea:invalid {
.img-fluid {
max-width: 100%;
height: auto;
display: grid;
align-items: center;
justify-items: center;
}
.float-left {
@ -443,6 +584,68 @@ textarea:invalid {
max-width: 100%;
}
.pagination {
display: flex;
justify-content: center;
gap: 0.5em;
padding-left: 0;
}
.pagination li {
list-style-type: none;
color: var(--nav-button-text);
}
.pagination li a {
color: var(--page-button-text);
background-color: var(--page-button-background);
border-radius: 0.05rem;
border-style: outset;
border-width: 0.2rem;
border-color: var(--page-button-background);
width: 2rem;
max-width: 1.8vw;
aspect-ratio: 1 / 1;
display: flex;
justify-content: center;
align-items: center;
margin: 0.2rem;
text-decoration: none;
padding: 0 0.2rem;
font-family: var(--font-family-system-ui);
}
.pagination li a:hover {
background-color: var(--page-button-background-hover);
}
.pagination li.active a {
background-color: var(--page-button-background-active);
}
.pagination li.disabled a {
cursor: not-allowed;
background-color: var(--page-button-background-disabled);
color: var(--page-button-text-disabled);
border-style: solid;
}
.mono {
font-family: var(--font-family-monospace);
font-weight: 600;
}
.bolder {
font-weight: bolder;
background-color: rgba(0, 0, 0, 0.33);
border-radius: 0.25em;
}
/* Specific elements */
#content {
flex: 1 0 max-content;
}
/*
Desktop screen size adjustments
*/
@ -480,6 +683,15 @@ textarea:invalid {
flex-direction: row;
}
.person-profile {
position: sticky;
top: 0;
width: 300px;
min-width: 20vw;
max-width: 30vw;
margin-bottom: 5vh;
}
/*
Helper classes
*/
@ -501,20 +713,19 @@ textarea:invalid {
margin-right: 1rem;
}
.card-header {
.card-thumbnail {
width: 20vw;
flex-shrink: 0;
}
.card-body {
margin-left: 1rem;
.card-thumbnail:not(
:has(~ .card-content > .card-header > .card-title > .dt-published)
) {
width: 10vw;
}
.bolder {
font-weight: bolder;
background-color: rgba(0, 0, 0, 0.33);
border-radius: 0.25em;
padding: 0.25em 0.75em 0.5em 0.33em;
.card-content {
margin-left: 1rem;
}
/*
@ -534,79 +745,3 @@ textarea:invalid {
clear: both;
}
} /* end @media */
@media (prefers-reduced-motion: no-preference) {
@supports (animation-timeline: scroll()) and (animation-range: 0 50vh) {
@keyframes sticky-header {
from {
height: 50vh;
top: 6rem;
}
to {
height: 10vh;
top: -1rem;
}
}
@keyframes blurry-header {
from {
filter: blur(0);
}
to {
filter: blur(2px);
}
}
@keyframes transparent-text-bg {
from {
background-color: var(--motto-background);
}
to {
background-color: rgba(0, 0, 0, 0);
}
}
main,
footer {
position: relative;
top: 55vh;
}
.motto {
position: fixed;
top: 12rem;
animation: sticky-header linear forwards;
animation-timeline: scroll();
animation-range: 0 50vh;
}
.motto::before {
filter: blur(12px);
top: 2rem;
animation: blurry-header linear forwards;
animation-timeline: scroll();
animation-range: 0 50vh;
}
.motto-inside h1 {
animation: transparent-text-bg linear forwards;
animation-timeline: scroll();
animation-range: 0 40vh;
}
@media (min-width: 768px) {
.motto {
width: calc(100% - 8rem);
}
.motto::before {
top: 0;
}
}
} /* end @supports */
} /* end @media */

View file

@ -0,0 +1,65 @@
@media (prefers-reduced-motion: no-preference) {
@supports (animation-timeline: scroll()) and (animation-range: 0 50vh) {
@keyframes sticky-header {
from {
flex-basis: 30vh;
}
to {
flex-basis: 0;
}
}
.motto-wrapper {
position: sticky;
top: 0;
z-index: 100;
animation: sticky-header linear forwards;
animation-timeline: scroll();
animation-range: 0 30vh;
}
@keyframes blurry-header {
from {
filter: blur(0);
}
to {
filter: blur(3.5px);
}
}
.motto::before {
animation: blurry-header linear forwards;
animation-timeline: scroll();
animation-range: 0 30vh;
}
@keyframes transparent-text-bg {
from {
background-color: var(--motto-background);
text-shadow: 0 0 10px rgba(0, 0, 0, 0.33);
}
to {
background-color: rgba(0, 0, 0, 0);
text-shadow: 0 0 10px rgba(0, 0, 0, 1);
}
}
.motto-inside h1 {
animation: transparent-text-bg linear forwards;
animation-timeline: scroll();
animation-range: 0 30vh;
}
.motto-inside h1 small {
display: block;
font-size: calc(1vh + 1vw);
line-height: calc(1vh + 1vw);
}
main section {
margin: 0 0.25em;
}
} /* end @supports */
} /* end @media */

View file

@ -11,8 +11,47 @@ writeStats = true
[Params]
cardImage = "saddles"
motto = ""
images = ["saddles.jpg"]
categories = []
[taxonomies]
people = "people"
tag = "tags"
category = "categories"
[mediaTypes]
[mediaTypes."application/atom+xml"]
suffixes = ["xml"]
[outputs]
home = ["atom", "html", "manifest"]
page = ["html"]
section = ["html", "atom"]
term = ["html", "atom"]
[outputFormats]
[outputFormats.atom]
mediaType = "application/atom+xml"
baseName = "feed"
[outputFormats.manifest]
name = "manifest"
baseName = "manifest"
mediaType = "application/json"
notAlternative = "true"
[markup]
[markup.goldmark]
[markup.goldmark.parser]
[markup.goldmark.parser.attribute]
block = true
[markup.goldmark.renderHooks]
[markup.goldmark.renderHooks.link]
enableDefault = true

View file

@ -1,12 +1,11 @@
---
title: Home
cardImage: charolette
cardImageDescription: She almost looks like she's in her native country again.
motto: <small>My name is Thomas Christensen</small><br />I am Milliron X
description: The homepage of Thomas A. Christensen II
layout: _default/list
menu:
main:
name: Home
params:
icon: home
weight: -1000
@ -29,58 +28,3 @@ to a sense of withholding, prestige, and power.
Together, these two symbols represent the qualities I strive for in each of my
works: authenticity, originality, power, depth, and prestige.
## Who am I?
{{< imgproc me-and-lady Resize "768x" "float-right" >}} Image courtesy
[Guy McCutcheon Photography](https://www.guymccutcheon.com/) {{< /imgproc >}}
I am
- 🧬 A bioinformatician (by profession)
- 📐 An engineer (by education)
- 🐂 A rancher (by lifestyle)
- 🖥️ A techie (self-taught)
- 🎥 And a filmmaker (at heart)
I've got a soft spot for Brown Swiss dairy cows (just in case you couldn't tell
by the pictures), and am sometimes called "one of those crazy, Wyoming dairy cow
people." I love anything to do with cattle or technology, but especially
anything to do with both of them.
_{{< abbr "Born again, fundamentalist, dispensationalist, King James Bible-believing, independent Baptist" >}}Christian{{< /abbr >}},
American, Convervative, Pro-gun, Heterosexual - any questions?_
## Where am I?
{{< imgproc wy-in-ks Resize "768x" "float-left" / >}}
I am a Wyomingite sojurning in Kansas. That ought to lead to some interesting
stories.
Around the web you can find me at (in order of subjective importance)
- {{< fa github >}} GitHub: [@MillironX](https://github.com/MillironX "me")
- {{< fa orcid >}} ORDiD:
[0000-0003-1219-9320](https://orcid.org/0000-0003-1219-9320)
- {{< fa gitlab >}} GitLab: [@MillironX](https://gitlab.com/MillironX)
- {{< fa vimeo >}} Vimeo:
[Thomas Christensen II](https://vimeo.com/tchristensenii)
- {{< fa stack-overflow >}} StackExchange:
[Milliron X](https://stackexchange.com/users/4863541/milliron-x)
- {{< fa steam >}} Steam: [MillironX](https://steamcommunity.com/id/millironx)
This list is intended to verify my identity on other sites. Please do _not_ use
it as fodder to try and "follow" me on each of these platforms. I stand with
RMS:
{{< blockquote "Richard Stallman _in_ [If you feel your organization needs a 'presence' in Facebook](https://stallman.org/facebook-presence.html)" >}}
Facebook is a bad place for a person to be. When people find us on Facebook, we
lead them away from Facebook and then talk with them elsewhere.
{{< /blockquote >}}
I typically don't respond to inquiries made on these platforms. Please use
[my contact form](/contact), instead.
</div>
</div>

View file

@ -14,13 +14,15 @@ menu:
fa-thumbnail: university
---
> I have spent too long in school and not enough time in the middle of nowhere
>
> -- Baxter Black, DVM
During my time in academia, I have amassed a few notable accomplishments. Of
course, as the old saying goes, "if it isn't published, then it never happened,"
so here is a list of everything that actually happened. Several of these
articles are also available on
[my Google Scholar page](https://scholar.google.com/citations?user=gbP4RDgAAAAJ),
but this is the complete list.
so here is a list of everything that actually happened.
Academia is not the be-all and end-all of life (contrary to what your professor
might have told you). I've found the side-effects to be similar to this guy's:
<!-- prettier-ignore-start -->
> I have spent too long in school and not enough time in the middle of nowhere,
> and it has inhibited my ability to learn the simple things.
{author="Baxter Black, DVM"}
<!-- prettier-ignore-end -->

Binary file not shown.

After

Width:  |  Height:  |  Size: 632 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 668 KiB

View file

@ -1,6 +1,7 @@
---
title:
"nf-core/taxprofiler: highly parallelised and flexible pipeline for metagenomic taxonomic classification and profiling"
"nf-core/taxprofiler: highly parallelised and flexible pipeline for
metagenomic taxonomic classification and profiling"
date: 2023-10-23
featured: true
tags:
@ -16,9 +17,25 @@ people:
- Maxime Borry
- Mahwash Jamy
- nf-core community
- James A. Fellows Yate
- James A. Fellows Yates
link: https://doi.org/10.1101/2023.10.20.563221
journal: bioRxiv
---
Metagenomic classification tackles the problem of characterising the taxonomic source of all DNA sequencing reads in a sample. A common approach to address the differences and biases between the many different taxonomic classification tools is to run metagenomic data through multiple classification tools and databases. This, however, is a very time-consuming task when performed manually - particularly when combined with the appropriate preprocessing of sequencing reads before the classification. Here we present nf-core/taxprofiler, a highly parallelised read-processing and taxonomic classification pipeline. It is designed for the automated and simultaneous classification and/or profiling of both short- and long-read metagenomic sequencing libraries against a 11 taxonomic classifiers and profilers as well as databases within a single pipeline run. Implemented in Nextflow and as part of the nf-core initiative, the pipeline benefits from high levels of scalability and portability, accommodating from small to extremely large projects on a wide range of computing infrastructure. It has been developed following best-practise software development practises and community support to ensure longevity and adaptability of the pipeline, to help keep it up to date with the field of metagenomics.
Metagenomic classification tackles the problem of characterising the taxonomic
source of all DNA sequencing reads in a sample. A common approach to address the
differences and biases between the many different taxonomic classification tools
is to run metagenomic data through multiple classification tools and databases.
This, however, is a very time-consuming task when performed manually -
particularly when combined with the appropriate preprocessing of sequencing
reads before the classification. Here we present nf-core/taxprofiler, a highly
parallelised read-processing and taxonomic classification pipeline. It is
designed for the automated and simultaneous classification and/or profiling of
both short- and long-read metagenomic sequencing libraries against a 11
taxonomic classifiers and profilers as well as databases within a single
pipeline run. Implemented in Nextflow and as part of the nf-core initiative, the
pipeline benefits from high levels of scalability and portability, accommodating
from small to extremely large projects on a wide range of computing
infrastructure. It has been developed following best-practise software
development practises and community support to ensure longevity and adaptability
of the pipeline, to help keep it up to date with the field of metagenomics.

View file

Before

Width:  |  Height:  |  Size: 199 KiB

After

Width:  |  Height:  |  Size: 199 KiB

Before After
Before After

View file

@ -1,5 +1,15 @@
---
draft: true
title: "Blogroll"
menu:
main:
name: Blogroll
params:
icon: scroll
weight: -800
cardImage: eclipse
cardImageDescription: |
Randall Monroe was right. Eclipses are way cooler than they sound.
suppressRss: true
---
## Stuff I like on the internet
@ -7,39 +17,4 @@ draft: true
This section of a website used to be called a "blogroll." I don't know what it's
called now. In order to be on this list, I must have been subscribed or
otherwise follow it for over a year. It's amazing how little stuff on the
internet can't make that cut.
### [Thru the Bible](https://ttb.org/)
I'm convinced that the word of God is timeless, and we need less commentary and
cherry-picking of favorite verses, and more study of the complete Bible. Dr.
McGee does just that.
### [Enoch the Cow Vet](https://youtube.com/channel/UC6PPmHUbcdOSzX5tLB3uXdw)
A veterinarian/agricultural channel that doesn't make me cringe. "God built
these things for cows for vets ... [there are] so many aspects of the cow that
are just designed for vets." Amen, Enoch. Amen.
### [Proglogion](https://blog.drwile.com/)
The blog of my high school science teacher (of sorts). It is refreshing to find
a creationist who can still think critically. I love his "bad sermon
illustrations" posts.
### [The Milk Check](https://www.jacoby.com/learning-center/podcasts-overview/)
A pragmatic inside look at dairy marketing. I only understand half of what
they're talking about, but I learn something new every episode.
### [Brian Harry's Blog](https://devblogs.microsoft.com/bharry/)
Where else are you going to find a blog about cows _and_ version control? The
blog is basically dead now, but it's still fun to go back and read the farm
stories.
### [Car Talk](https://cartalk.com/)
The antics of these guys are enough to make anyone have to pull over to the side
of the road from laughing too much. I dread the day when NPR fully axes the only
good program to cross their airwaves.
internet can make that cut.

View file

@ -0,0 +1,8 @@
---
title: Brian Harry's blog
link: https://devblogs.microsoft.com/bharry/
---
Where else are you going to find a blog about cows _and_ version control? The
blog is basically dead now, but it's still fun to go back and read the farm
stories.

Binary file not shown.

After

Width:  |  Height:  |  Size: 514 KiB

View file

@ -0,0 +1,8 @@
---
title: Car Talk
link: https://cartalk.com
---
The antics of these guys are enough to make anyone have to pull over to the side
of the road from laughing too much. I dread the day when NPR fully axes the only
good program to cross their airwaves.

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

View file

@ -0,0 +1,8 @@
---
title: Enoch the Cow Vet
link: https://youtube.com/channel/UC6PPmHUbcdOSzX5tLB3uXdw
---
A veterinarian/agricultural channel that doesn't make me cringe. "God built
these things for cows for vets ... [there are] so many aspects of the cow that
are just designed for vets." Amen, Enoch. Amen.

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View file

@ -0,0 +1,8 @@
---
title: Proslogion
link: https://blog.drwile.com
---
The blog of my high school science teacher (of sorts). It is refreshing to find
a creationist who can still think critically. I love his "bad sermon
illustrations" posts.

Binary file not shown.

After

Width:  |  Height:  |  Size: 323 KiB

View file

@ -0,0 +1,8 @@
---
title: Thru the Bible
link: https://ttb.org
---
I'm convinced that the word of God is timeless, and we need less commentary and
cherry-picking of favorite verses, and more study of the complete Bible. Dr.
McGee does just that.

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

View file

Before

Width:  |  Height:  |  Size: 101 KiB

After

Width:  |  Height:  |  Size: 101 KiB

Before After
Before After

View file

@ -0,0 +1,75 @@
{{ $data := dict }}
{{ $url := "https://code.millironx.com/api/v1/users/millironx/repos" }}
{{ with try (resources.GetRemote $url) }}
{{ with .Err }}
{{ errorf "Unable to get remote resource %s: %s" $url . }}
{{ else with .Value }}
{{ $data = . | transform.Unmarshal }}
{{ end }}
{{ else }}
{{ errorf "Unable to get remote resource %s" $url }}
{{ end }}
{{ range $data }}
{{/* Get tags of this repository. To quote Steve Edstrom, "If it doesn't have a
tag, it doesn't count."
*/}}
{{ $tagUrl := print "https://code.millironx.com/api/v1/repos/millironx/" .name "/tags" }}
{{ $tagData := dict }}
{{ with try (resources.GetRemote $tagUrl) }}
{{ with .Err }}
{{ errorf "Unable to get remote resource %s: %s" $tagUrl . }}
{{ else with .Value }}
{{ $tagData = . | transform.Unmarshal }}
{{ end }}
{{ else }}
{{ errorf "Unable to get remote resource %s" $tagUrl }}
{{ end }}
{{ $firstTag := index $tagData 0 }}
{{ if $firstTag }}
{{ $dates := dict "date" (time.AsTime $firstTag.commit.created) }}
{{ $content := dict "mediaType" "text/markdown" "value" .description }}
{{ $categories := slice "code" }}
{{ $people := slice "Thomas A. Christensen II" }}
{{ $link := .html_url }}
{{ $featured := (gt .stars_count 0) }}
{{ $tags := .topics }}
{{ $params := dict
"categories" $categories
"people" $people
"link" $link
"featured" $featured
"tags" $tags
}}
{{ $page := dict
"content" $content
"dates" $dates
"title" .name
"path" .name
"params" $params
}}
{{ $.AddPage $page }}
{{ $item := . }}
{{ with $url := $item.avatar_url }}
{{ with resources.GetRemote $url }}
{{ with .Err }}
{{ errorf "Unable to get remote resource %s: %s" $url . }}
{{ else }}
{{ $content := dict "mediaType" .MediaType.Type "value" .Content }}
{{ $resource := dict
"content" $content
"path" (print $item.name "/thumbnail." .MediaType.SubType)
}}
{{ $.AddResource $resource }}
{{ end }}
{{ else }}
{{ errorf "Unable to get remote resource %s" $url }}
{{ end }}
{{ end }}
{{ end }}
{{ end }}

14
content/code/_index.md Normal file
View file

@ -0,0 +1,14 @@
---
title: Coding projects
menu:
main:
name: Code
params:
icon: code
link: https://code.millironx.com
weight: 50
fa-thumbnail: code
link: https://code.millironx.com
---
A Forgejo instance dedicated to cows and technology

View file

@ -15,6 +15,7 @@ menu:
weight: 1
fa-thumbnail: file-signature
validation: true
suppressRss: true
---
<form action="https://usebasin.com/f/787df7bfd22e" method="post">

View file

Before

Width:  |  Height:  |  Size: 584 KiB

After

Width:  |  Height:  |  Size: 584 KiB

Before After
Before After

14
content/login/index.md Normal file
View file

@ -0,0 +1,14 @@
---
title: Login
menu:
main:
name: Login
params:
icon: right-to-bracket
link: https://youtu.be/dQw4w9WgXcQ
weight: 99
fa-thumbnail: right-to-bracket
link: https://youtu.be/dQw4w9WgXcQ
---
The password is "Open sesame!"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 MiB

View file

@ -0,0 +1,113 @@
---
title: "Thomas A. Christensen II"
menu:
main:
name: About
params:
icon: circle-info
me: true
weight: -900
homepage: https://millironx.com
accounts:
google-scholar: gbP4RDgAAAAJ
github: MillironX
hacker-news: millironx
matrix: "@millironx:matrix.org"
orcid: 0000-0003-1219-9320
steam: millironx
vimeo: tchristensenii
gpg_key:
fingerprint: 8B12 8295 5A14 9FAB 735F 56D3 AD91 52EB 09C8 4352
public_key: |
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEZ100cRYJKwYBBAHaRw8BAQdAV485J1tB8sQPisFGyRYREcOtJsRSdwQEQ5aM
Exg6ozC0RlRob21hcyBBLiBDaHJpc3RlbnNlbiBJSSA8MjU0OTIwNzArTWlsbGly
b25YQHVzZXJzLm5vcmVwbHkuZ2l0aHViLmNvbT6IkwQTFgoAOxYhBIsSgpVaFJ+r
c19W062RUusJyENSBQJnXTU2AhsBBQsJCAcCAiICBhUKCQgLAgQWAgMBAh4HAheA
AAoJEK2RUusJyENS21UA/iPpRxE8zTQa1xktSXDYSLxWoDcsHhziQGqwULqUKot+
APwMLFpov2TW322SQ8Fui1jYb/Z1SxnJ/jNiarpRRAGYALQ7VGhvbWFzIEEuIENo
cmlzdGVuc2VuIElJIDx0aG9tYXMuY2hyaXN0ZW5zZW5AbWlsbGlyb254LmNvbT6I
kwQTFgoAOxYhBIsSgpVaFJ+rc19W062RUusJyENSBQJnXTRxAhsBBQsJCAcCAiIC
BhUKCQgLAgQWAgMBAh4HAheAAAoJEK2RUusJyENS4ykA/1YyKsTvlW1xgt16p8Yv
J0c+R9XfpwJoVUad/clF7olxAQCqgBYD4HmcGemCuEzIQ3OfQi94scEIu8Q8pA8n
c9MzDLQzVGhvbWFzIEEuIENocmlzdGVuc2VuIElJIDxtaWxsaXJvbnhAcHJvdG9u
bWFpbC5jb20+iJMEExYKADsWIQSLEoKVWhSfq3NfVtOtkVLrCchDUgUCZ101NgIb
AQULCQgHAgIiAgYVCgkICwIEFgIDAQIeBwIXgAAKCRCtkVLrCchDUhbHAQCmHYXF
pyaW2ImR7e2MAkvJGlCP82ssL6ZYvLy/6AnW0AD/bqtMr0qpvIQrMhyodOgBa7Iz
aHd3EpX6b1SiqOEuigS0MFRob21hcyBBLiBDaHJpc3RlbnNlbiBJSSA8bWlsbGly
b254QG1haWxib3gub3JnPoiTBBMWCgA7FiEEixKClVoUn6tzX1bTrZFS6wnIQ1IF
AmddNTYCGwEFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4AACgkQrZFS6wnIQ1I9
gQEA/EWmrCFZfzWB50RuO7vGRsg3ac1fhQRPsZInbSL+Z2YA/RRJBLb8jWngKYd/
cZikJ/GyowGtcoBJJBPruj5thFENtDdUaG9tYXMgQS4gQ2hyaXN0ZW5zZW4gSUkg
PHRjaHJpc3RlbnNlbkB2ZXQuay1zdGF0ZS5lZHU+iJMEExYKADsWIQSLEoKVWhSf
q3NfVtOtkVLrCchDUgUCZ101NgIbAQULCQgHAgIiAgYVCgkICwIEFgIDAQIeBwIX
gAAKCRCtkVLrCchDUtaIAQDmtsVMcVAEYijjwwuTo9uUXq1cq+VAd4nVlzx6cXvK
2gD/Vi6c0YUQMe4XU6p3L8ur2Y0b5fwNvA2q+arerCe6cAq4MwRnXTWNFgkrBgEE
AdpHDwEBB0BtEdEOzEbrbd1RwtbiXfUdO/gecppU4WvtQGQ1uH2RTYj1BBgWCgAm
FiEEixKClVoUn6tzX1bTrZFS6wnIQ1IFAmddNY0CGwIFCQW755MAgQkQrZFS6wnI
Q1J2IAQZFgoAHRYhBN/IAiJKwiYzyKQIMfcVGW6wdYj/BQJnXTWNAAoJEPcVGW6w
dYj/fcsBAIkGSljZ7Gl//uPFiJpNf209EaLIZ4N15gMCbF18/g7iAP46Ah5gPvhp
05IulDKJheDnjJwyrsfKCRg68SZ4dCvVB2BsAQCPhM/oJZdvzsOw0O3k/OAozX6b
RKwSe5tJJiLon7zqygD7B+021foD+snFTYAN4H22xS+BKqN0f8tw71sPWHZx7gW4
MwRnXTWOFgkrBgEEAdpHDwEBB0BDcK/hT+3s452nnww9oinVstMTx7+lNYdEMt0V
TXxvo4h+BBgWCgAmFiEEixKClVoUn6tzX1bTrZFS6wnIQ1IFAmddNY4CGyAFCQW7
55IACgkQrZFS6wnIQ1KddQEA4LOnL5Gg/UHYOMej2nGVjlxI4cnLTo/ju7Ed1m9H
hYUA/iYU3KfUgfSfvLKhg91PwGfFDvmRLoBiYaflbekKe+cEuDgEZ101oBIKKwYB
BAGXVQEFAQEHQN3Bry/+BQMTunIxjcSY/kK7K9ItlPtpLjAWUQrWZqZMAwEIB4h+
BBgWCgAmFiEEixKClVoUn6tzX1bTrZFS6wnIQ1IFAmddNaACGwwFCQW753YACgkQ
rZFS6wnIQ1LuRAD+JvOSrv1xe+HCjsSfNlOqCE9ZR2KcN1hcR/Gd80V4y4kA/3sC
GOYGT+Hm5E5a7oKKHIZOMxBhfFJCPdoxDMBvee0IuDMEZ1013xYJKwYBBAHaRw8B
AQdAURPrApZ0ORNAhLvhCKGjsPUvvpDEdeiuU7yezSkUkoiI9QQYFgoAJhYhBIsS
gpVaFJ+rc19W062RUusJyENSBQJnXTXfAhsCBQkFu+dBAIEJEK2RUusJyENSdiAE
GRYKAB0WIQQbOpuRop10V4Rxy0NLCkigcdPLigUCZ1013wAKCRBLCkigcdPLingd
AP4wnkOjPOUbbJq60e9eVwBATc6oMs8PUs/RW5IjQLo0+QEAnNN2GN0Ck9Ondxol
/vHmZCE2w5D+KNXighkM08qNGw1MRgEAt4cQmCD1BVQe+Vn5i0MxVvTDP4iBagAP
0lUd2eSFtwwBAI2EjttUu1jY+TMlrav6WotRY9zB10Tc6OSBMA0kPpgEuDMEZ101
4BYJKwYBBAHaRw8BAQdA68JzWAJ5/aMLlx9/sTNVbP4HUnk+FMRR6B8WD0xL7z6I
fgQYFgoAJhYhBIsSgpVaFJ+rc19W062RUusJyENSBQJnXTXgAhsgBQkFu+dAAAoJ
EK2RUusJyENS4MoA/2T1RjkEhwII6FAJWj8UV/nvwodXyX2eDgZj+h7izRflAP9y
19MsNmOkEhVJJbz1rnCkpzdcG4x0PNoMGy+44xj1ArgzBGddNeAWCSsGAQQB2kcP
AQEHQGMufoZikOyOFbHvu+CJcQlK5DclCVNJBgZQcImpEqm/iPUEGBYKACYWIQSL
EoKVWhSfq3NfVtOtkVLrCchDUgUCZ1014AIbAgUJBbvnQACBCRCtkVLrCchDUnYg
BBkWCgAdFiEEhp1tRu+xCJg9TLHNGaLvOjwMGKkFAmddNeAACgkQGaLvOjwMGKko
4gD+NLJaxLDatmU+C/l5fLV6xp0PRS/c5tRRMdhtic211BgA/0lrdz2pHGHlQwvw
PRZg2EMiTDreawVZrlSZdfexBeMD7bYA/A9gGeZYVzKKABjoyF1EMvDPm7x7bSrE
xpB7tEzJy7a7AQCs+x55xgk9NSrmo4ZjTIXsj7BZTkhTDkJay1FZ65lsAbgzBGdd
NeAWCSsGAQQB2kcPAQEHQLa2MGXl7JyU/yS+dz0mkPcRIZpU4C3USLmYWJVT/deN
iH4EGBYKACYWIQSLEoKVWhSfq3NfVtOtkVLrCchDUgUCZ1014AIbIAUJBbvnQAAK
CRCtkVLrCchDUnXBAQCmFWVZzm3vOEftIPCRcKKsgaFg31CoxCpxhCw5rglwKgD/
eQOxmwkpRQUe+R3qoyVGy/K2XHoPFJrdVb8JTh/krQ64MwRnXTXhFgkrBgEEAdpH
DwEBB0Dgt18beC6Ttlfr0QbXy2/gAX55kKHHpALY2mMm++/HNYj1BBgWCgAmFiEE
ixKClVoUn6tzX1bTrZFS6wnIQ1IFAmddNeECGwIFCQW75z8AgQkQrZFS6wnIQ1J2
IAQZFgoAHRYhBBBFsbS1b3+lJiAJEYvIgJ5FpsrQBQJnXTXhAAoJEIvIgJ5FpsrQ
xdEBAK1to7pkMw1JJzL/OKgexB/HAYryDU20HiCTWbMBPTWRAP9uIiNkVUZ58ja/
3Dcl+ah1kUxd3Mrxs49jI4ItJtZ8D4FBAQAA1aRdYoFwvWrxuDUONNHZGZBWczm0
9kttdmGfIpfEAgD/ZDJWfRpxO3AEwU0BpVB3mxFSSF058ShOAjXcbZMEngq4MwRn
XTXhFgkrBgEEAdpHDwEBB0AMqjR+Y5jc/tawBcWLAkUbhWXvGFoRZziglCW76vw1
44h+BBgWCgAmFiEEixKClVoUn6tzX1bTrZFS6wnIQ1IFAmddNeECGyAFCQW75z8A
CgkQrZFS6wnIQ1IRFwEA5KMPbay92FCsR8gBqDWSBfZXxgXxasYMKYHFmFIQ7yAB
APU7TUwdw8yA55fUC6XqwtlQ2khyIiq/TBExZ4oFkbUF
=hbg7
-----END PGP PUBLIC KEY BLOCK-----
crypto:
bitcoin: bc1q66u7fqmptr4sczfmvxxfckzl6566633umx40n7
lightning: "millironx@coinos.io"
ethereum: 0x97610b550a5eB6eB2c4a57d3D2b317816c413Fb4
monero: 4649mFt2BVjC8pYD7K5kKzSgbWseoL9r3d6eQJ6nebwnLTe6jQKwB9g3jXkwiXAu1aizir8Uf2TYwAM5sQ4Ggp5434p7fzb
zcash: zs13kw2rkljxj6uymx6nnk2npamn2dhafuljfq79ntv67320jaxshnw49h7prrjj5v0pr5ry44c3ml
---
Hi! I'm Thomas. I love anything to do with cattle or technology, but especially
anything to do with both of them. I spend way more time in beef country with
beef cows, but I've got a soft spot for Brown Swiss dairy cows (just in case you
couldn't tell by the pictures). I've worn a lot of different hats:
| | |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| First and foremost | ✝️ {{< abbr "Born again, fundamentalist, dispensationalist, King James Bible-believing, independent Baptist" >}}Christian{{< /abbr >}} |
| Location | 🦬 {{< abbr "I want to keep claiming Wyoming, but they're pretty strict about residency there, and I don't want to repeat the Liz Cheney fishing license incident" >}}Wyomingite{{< /abbr >}} sojourning in 🌻 {{< abbr "Yes, Toto, we are in Kansas now" >}}Kansas{{< /abbr >}} (this ought to be interesting) |
| Education | 📐 {{< abbr "noun. A person who cannot build cool things like airplanes or bridges, but can blow up an entire neighborhood and kill dozens of children by misplacing a decimal point. See also: self-hating chemist" >}}Chemical Engineer{{< /abbr >}} |
| Profession | 🧬 {{< abbr "I do genetics and computers" >}}Bioinformatician{{< /abbr >}} and 🐄🩺 {{< abbr "I can't rope well enough to be a cowboy, so being a cow doctor will have to suffice" >}}Veterinarian{{< /abbr >}} (soon!) |
| Politics | 🗽 {{< abbr "Refers to the belief in natural social and political laws created by God that are as inflexible as the laws of physics" >}}Juris naturalist{{< /abbr >}} |
| Hobbies | 🎥 {{< abbr "Storytelling at 24 frames per second" >}}Filmmaker{{< /abbr >}} and 💃🏻 {{< abbr "Square dancing is more musically rigid and is standardized across the country. Swing dancing is more freeform and differs regionally. It's like the difference between classical music and jazz. I like both." >}}Square/swing dancer{{< /abbr >}} |

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 MiB

20
content/posts/_index.md Normal file
View file

@ -0,0 +1,20 @@
---
title: "ChemE Cows"
cardImage: stable-diffusion-cheme-cow-08
cardImageDescription: |
black and white dairy cow wearing a bright yellow hard hat at an oil refinery on a clear sunny day
Fooocus v2.5.5 realisticStockPhoto_v20.safetensors
Hopefully someday I can replace this with a real image
motto:
ChemE Cows<br /><small>A blog about cattle, technology, or anything remotely
affecting either of them</small>
menu:
main:
name: Blog
params:
icon: block-quote
weight: 2
fa-thumbnail: block-quote
---
A blog where I might post stuff some day.

View file

@ -0,0 +1,104 @@
---
title:
"On Baptist habits (or why Baptist churches feel like they're run by the
Mafia)"
date: 2024-03-01
people:
- Thomas A. Christensen II
draft: true
tags:
- religion
- baptist
- christianity
- love
- doctrine
featured: true
categories:
- blog
---
<!--
This is not a real blog post - this is just an idea for a provocative article
that I fed into Llama3.2 to generate some text that is slightly more
interesting than lorem ipsum. Gee howdy, is this writing crap, but I have
committed it to the repository so I can rebase around it. If you are here
reading this somehow, please understand that these are not my thoughts.
-->
In the grand tapestry of American religiosity, there exists a peculiar breed of
Christian denomination that stands out for its unique blend of fervent devotion
and...let's be honest, a hint of authoritarianism. I'm, of course, referring to
Baptist churches. Yes, those churches that make you wonder if they're being run
by the Mafia.
Now, before I proceed, let me just clarify that this isn't an attempt to
disparage the good people who worship in these esteemed institutions. No, no,
nothing like that. It's merely a case of observational reporting, where I'm
poking around the fringes of Baptist culture to get a better understanding of
what makes them tick.
As someone who's spent considerable time within the fold (hello, 20+ years of
being born again), I've come to realize that there are certain habits,
practices, and attitudes that seem endemic to Baptist churches. Now, keep in
mind that this isn't a generalization, but rather an observation born out of
personal experience.
One of these habits is an extraordinary level of fervor and zealotry. Baptists
tend to be deeply invested in their faith, often to the point where it borders
on fanaticism. I've seen folks who will passionately argue for or against just
about anything that's perceived as contrary to their interpretation of
scripture. Now, while this can be a laudable trait in moderation, excessive
fervor can quickly turn toxic.
Another peculiar habit of Baptist churches is an unsettling preoccupation with
hierarchy and authority. It's not uncommon to see senior pastors wielding near
absolute power within the church, often based on factors such as age,
experience, or heaven forbid personal popularity. This can lead to a culture
where dissenting voices are stifled, and nonconformity is discouraged.
The worship services themselves often feel more like formal lectures or
performances than genuinely communal gatherings. Don't get me wrong; I love a
good hymn or sermon as much as the next person, but sometimes it feels like
you're trapped in a 90-minute lecture on theology. And if you're sitting too far
forward, forget about trying to contribute to the conversation your
participation will be met with stern disapproval.
In addition, there's an omnipresent air of suspicion and mistrust that seems to
pervade every aspect of Baptist life. If someone doesn't toe the party line,
they're often met with swift reprimand or outright ostracism. This creates a
toxic environment where people feel pressured into conformity rather than being
encouraged to explore their own spirituality.
Of course, there are always exceptions to the rule, just like in any other human
endeavor. I've encountered Baptist churches that embody the very opposite of
these described habits places where worship is genuine, inclusive, and
welcoming, where individual freedom and creativity are cherished, and where the
emphasis is on community rather than control.
So what drives this peculiar breed of authoritarianism within some Baptist
churches? Is it a genuine misunderstanding of scripture, or perhaps a result of
historical context? Or is there something deeper at play perhaps an inherent
tension between the democratic values of American society and the hierarchical
structures of traditional Christianity?
These questions are central to my exploration of this topic. I'll delve into the
complexities of Baptist history, the role of patriarchal ideology, and the ways
in which cultural and social factors have shaped the institution over time.
In conclusion, while I'm not ready to declare war on all things Baptist just yet
(although, I must admit, it's tempting), I do hope that this exploration will
shed some light on a fascinating aspect of American religiosity. Perhaps,
through a better understanding of these peculiar habits and practices, we can
foster a more inclusive and compassionate community one where faith and
conviction are tempered by empathy and respect for differing viewpoints.
Ultimately, as someone who's found their own spiritual home within the Baptist
fold, I believe it's essential to approach this conversation with sensitivity,
curiosity, and an open mind. By embracing our shared humanity rather than
perpetuating artificial divisions, we can work towards creating a more vibrant
tapestry of faith in America one that celebrates diversity while remaining
committed to core principles of love and service.
But for now, I'll leave you with these final thoughts on Baptist habits habits
that may seem baffling or even disturbing at times, but are ultimately part of
what makes the Baptist experience so richly textured.

View file

@ -0,0 +1,178 @@
---
title: "A Brief History of Medicine (2438)"
date: 2024-05-01
people:
- Thomas A. Christensen II
draft: true
tags:
- medicine
- technology
- fiction
- epidemiology
- veterinary medicine
featured: true
categories:
- blog
---
<!--
This is not a real blog post - this is just an idea for a provocative article
that I fed into Llama3.2 to generate some text that is slightly more
interesting than lorem ipsum. Gee howdy, is this writing crap, but I have
committed it to the repository so I can rebase around it. If you are here
reading this somehow, please understand that these are not my thoughts.
-->
I still remember the first time I set foot in the hospital where I would spend
most of my working life. It was 2123, and medicine was already a highly advanced
field, thanks to the rapid progress made possible by nanotechnology and
artificial intelligence. The patient I was assigned to that day was an elderly
man who had been suffering from a rare genetic disorder for years. With the help
of a swarm of microscopic robots that could repair damaged cells at a molecular
level, we were able to extend his lifespan by several decades.
As a young physician, it was exhilarating to be part of a field that seemed to
have no limits. We were constantly pushing the boundaries of what was thought
possible, and it showed in our results. Patients who would have been doomed
years ago were now thriving, thanks to advances in medicine.
But as with any rapidly advancing field, there were also risks involved. The use
of nanorobots and AI algorithms raised concerns about accountability and
transparency. As a physician, I had to be careful to ensure that my actions were
guided by the highest ethical standards.
The years that followed were marked by incredible breakthroughs in medicine.
Diseases that had plagued humanity for centuries began to disappear as
treatments became more effective. Cancer, in particular, was a major target for
researchers, and significant progress was made in understanding its causes and
developing targeted therapies.
One of the most exciting developments in this area was the discovery of a new
type of cancer-killing nanobot that could selectively target and destroy tumor
cells while leaving healthy tissue intact. The technology was still in its
infancy, but the potential it held was enormous.
As I look back on those early years of my career, I am reminded of the
importance of perseverance and creativity. Medicine is a field that requires
constant innovation and adaptation, and it takes a lot of hard work to stay
ahead of the curve.
Over time, medicine evolved to become an integral part of daily life. People
began to live longer, healthier lives, thanks to advances in preventative care
and personalized medicine. The rise of genomics and precision medicine allowed
for tailored treatments that could be customized to individual needs.
As a physician, I had the privilege of witnessing firsthand the impact that
these advancements had on people's lives. Patients who would have been confined
to beds for years were now able to return to their normal activities, thanks to
the latest treatments.
But with all the progress we made, there were also new challenges that emerged.
The increasing reliance on technology led to concerns about the ethics of
medicine. As medical robots and AI algorithms took over more tasks, there were
questions about accountability and the role of human physicians in this new
landscape.
These debates are ongoing to this day. As a physician, it's essential for me to
stay up-to-date with the latest developments and advancements in my field. By
doing so, I can ensure that patients receive the best possible care, while also
navigating the complex issues surrounding medicine in the 24th century.
Fast forward to 2438, and medicine has changed dramatically. Diseases have
become a rarity, thanks to breakthroughs in biotechnology and genetic
engineering. Humans live longer, healthier lives, with an average lifespan of
over 120 years.
Despite these advancements, there are still challenges to overcome. The
increasing reliance on AI and biotechnology has raised concerns about the ethics
of medicine. Many people worry that as medical robots and algorithms take over
more tasks, human physicians will become obsolete.
However, I firmly believe that this is a misconception. As a physician in 2438,
I can attest that being a doctor still requires a deep understanding of human
biology, psychology, and sociology. While technology has certainly advanced
medicine, there are also skills and qualities that cannot be replicated by
machines alone.
One of the most critical aspects of being a doctor is empathy. As a human being,
you need to understand your patients' emotional states, their fears and
anxieties, in order to provide them with effective care. This is something that
AI systems struggle to replicate, no matter how advanced they become.
In my practice, I see patients who have been diagnosed with conditions that were
previously considered incurable. Cancer, for example, has all but disappeared
thanks to targeted therapies and immunotherapies. However, there are still other
challenges to overcome.
As a physician, it's essential to stay informed about the latest developments in
medicine. This includes understanding how new technologies can be used to
improve patient outcomes, as well as addressing any concerns or fears that
patients may have regarding these advancements.
One of the most significant breakthroughs in recent years has been the
development of advanced bioprinting techniques. These allow for the creation of
complex tissue structures and organs, which can then be transplanted into
patients who require them.
The potential applications for this technology are vast. It could revolutionize
organ transplantation, allowing for more efficient use of donor organs and
reducing the need for long-term immunosuppression treatments.
However, there are also concerns about the ethics of bioprinting. As with any
new technology, there are questions about accountability, safety, and the role
of human physicians in this process.
Despite these challenges, I remain optimistic about the future of medicine. As a
physician in 2438, I've seen firsthand the incredible progress that has been
made, and I'm excited to see what the next generation of medical breakthroughs
will bring.
One area of particular interest is the development of new treatments for mental
health disorders. In my practice, I often encounter patients who struggle with
anxiety, depression, or post-traumatic stress disorder (PTSD). These conditions
are complex and multifaceted, and it's essential to develop treatments that
address all aspects of their impact.
Recently, there has been a significant breakthrough in the development of new
therapies for mental health disorders. A team of researchers has made
significant progress in understanding the underlying mechanisms of these
conditions, and this has led to the development of new treatments that are more
effective than anything that came before.
The treatment is based on the idea that mental health disorders are not just
symptoms, but rather a manifestation of an imbalance in the body's natural
chemistry. By developing targeted therapies that address this imbalance,
researchers have been able to create medications that can effectively treat a
wide range of conditions.
One of the most promising developments in this area is the use of
neurotransmitter modulators. These are small molecules that can be used to
regulate the balance of neurotransmitters in the brain, which play a critical
role in regulating mood and emotional states.
The implications for mental health treatment are enormous. For the first time in
history, we have a class of medications that could potentially treat multiple
conditions at once. This is a game-changer for patients who suffer from complex
mental health disorders, and it's a testament to the power of medical research.
As I look back on my career as a physician, I am reminded of the importance of
perseverance and creativity. Medicine is a field that requires constant
innovation and adaptation, and it takes a lot of hard work to stay ahead of the
curve.
Despite all the progress we've made, there are still challenges to overcome. The
increasing reliance on technology raises concerns about accountability and
transparency, as well as questions about the role of human physicians in this
new landscape.
These debates will likely continue for years to come. As a physician, it's
essential for me to stay informed about the latest developments in medicine,
while also addressing any concerns or fears that patients may have regarding
these advancements.
Ultimately, my goal is to provide the best possible care to my patients, while
also pushing the boundaries of what's thought possible in this field. As a
doctor in 2438, I am excited to see what the future holds for medicine, and I am
confident that we will continue to make tremendous progress in the years ahead.
}}

View file

@ -0,0 +1,121 @@
---
title: "Keep EPDs Real"
date: 2024-07-01
people:
- Thomas A. Christensen II
draft: true
tags:
- cattle
- genetics
- technology
- epds
- ptas
featured: true
categories:
- blog
---
<!--
This is not a real blog post - this is just an idea for a provocative article
that I fed into Llama3.2 to generate some text that is slightly more
interesting than lorem ipsum. Gee howdy, is this writing crap, but I have
committed it to the repository so I can rebase around it. If you are here
reading this somehow, please understand that these are not my thoughts.
-->
In the world of cattle breeding, there's a concept that can be both fascinating
and intimidating: Expected Progeny Differences (EPDs). I've come to appreciate
the importance of genetics and EPDs in cattle breeding. In this blog post, we'll
delve into what EPDs are, why they matter, and how to keep them real.
## What Are EPDs?
EPDs are a way to measure the genetic differences between animals that can help
breeders predict which offspring will be more or less desirable for certain
traits. Think of it like trying to guess what your favorite cow's children will
look like based on their parents' characteristics. In genetics, we call this
inheritance and EPDs are a simple yet powerful tool to help us understand how
genetic traits are passed down.
## The Basics of Genetics
Before diving into EPDs, let's quickly review the basics of genetics. You see,
every living thing has DNA (deoxyribonucleic acid), which contains the
instructions for its development and function. The DNA is made up of genes,
which code for specific traits like eye color, hair color, or in our case, milk
production.
Genes are like recipes that tell our bodies what to make but instead of
ingredients like flour and sugar, they're made up of nucleotides. These
nucleotides can be either A (adenine), C (cytosine), G (guanine), or T
(thymine). The sequence of these nucleotides determines the genetic information.
## How EPDs Work
Now that we've covered some basics, let's talk about how EPDs work. Imagine
you're breeding two cows, Bessie and Daisy, to produce offspring. You want
Bessie to pass on her desirable traits, like excellent milk production, to their
children.
To predict which calf will inherit these traits, you'd look at the genetic
information of both parents. You'd then use a complex formula that takes into
account the genetic potential of each parent and their offspring's genotype (the
actual DNA sequence). This gives you an Expected Progeny Difference score
which represents how much better or worse the trait is expected to be in the
offspring compared to the parent.
For example, let's say Bessie has a high EPD for milk production, but Daisy has
a low EPD. The formula would take into account both parents' scores and predict
that their calf will have an average EPD for milk production.
## Benefits of EPDs
So why do we need EPDs? In short, they help us make informed decisions about
breeding. By knowing which traits are being passed down from one generation to
the next, we can:
1. Make better breeding choices
2. Predict potential problems or improvements in future generations
3. Develop more accurate breeding strategies
But that's not all EPDs also have a significant impact on the cattle industry
as a whole. By using data-driven approaches, breeders and farmers can:
1. Increase efficiency and reduce costs
2. Improve animal welfare by selecting for desirable traits
3. Support sustainable agriculture practices
## Challenges with EPDs
While EPDs offer many benefits, there are also some challenges to consider:
1. Data quality: If the data used to calculate EPDs is inaccurate or incomplete,
it can lead to incorrect predictions.
2. Complex genetics: Genetic inheritance can be complex, making it difficult to
predict how certain traits will manifest in offspring.
3. Selection bias: Breeders may unconsciously favor certain breeds or animals
due to personal preferences rather than objective genetic data.
## Staying Up-to-Date with EPD Research
EPDs are constantly evolving as new research emerges and technology improves. To
stay informed, it's essential to:
1. Follow industry publications and scientific journals
2. Attend workshops and conferences on genetics and EPDs
3. Network with other breeders and researchers in the field
## Conclusion
In conclusion, Expected Progeny Differences (EPDs) are a valuable tool for
cattle breeders. By understanding how genetic traits are passed down through
generations, we can make more informed decisions about breeding and improve
animal welfare.
Remember keeping EPDs real means staying current with the latest research,
attending workshops, and networking with experts in the field. With these
skills, you'll be well on your way to becoming a genetics-savvy breeder!
As always, I'm grateful for this opportunity to share my passion for cattle
breeding and genetics with you whether it's through EPDs or something entirely
different!

106
content/posts/nf-core.md Normal file
View file

@ -0,0 +1,106 @@
---
title: "My Troubles with nf-core"
date: 2024-09-01
people:
- Thomas A. Christensen II
draft: true
tags:
- bioinformatics
- nf-core
- technology
- programming
- people
featured: true
categories:
- blog
---
<!--
This is not a real blog post - this is just an idea for a provocative article
that I fed into Llama3.2 to generate some text that is slightly more
interesting than lorem ipsum. Gee howdy, is this writing crap, but I have
committed it to the repository so I can rebase around it. If you are here
reading this somehow, please understand that these are not my thoughts.
-->
# My Troubles with nf-core
A blog post about my frustrations and experiences working with the popular
nf-core framework in bioinformatics.
## Introduction
As a biologist who has worked extensively with different software tools for
analyzing biological data, I have always been impressed by the power and
flexibility of the nf-core platform. However, after several years of using and
contributing to this excellent toolset, I have come to realize that there are
some fundamental issues with the way nf-core is currently structured and
maintained.
## Background
NF-core (short for Next-Generation Sequencing Core) is an open-source framework
developed by the Broad Institute of MIT and Harvard that provides a
comprehensive set of tools for analyzing high-throughput sequencing data. The
platform has been widely adopted in the scientific community due to its ease of
use, scalability, and flexibility.
## My Experience with nf-core
As a bioinformatician, I have worked extensively with various pipelines built on
top of nf-core, including the popular
[SNEAK](https://github.com/broadinstitute/SNEAK) pipeline for variant discovery.
While nf-core has provided me with a reliable platform for analyzing large
datasets, I have consistently encountered issues with its organization,
documentation, and community support.
## Issues with Organization
One of my biggest frustrations with nf-core is the lack of clear organization
within its repository. The project's main directory contains an overwhelming
number of subdirectories, each representing a different tool or pipeline. This
makes it difficult to navigate the codebase and understand how the various tools
interact with each other.
## Documentation and Community Support
NF-core has excellent documentation, but in my experience, this documentation is
often incomplete or outdated. I have encountered several instances where I was
unable to find relevant information about a particular tool or pipeline, leading
me to waste hours of time searching for answers online.
Moreover, the nf-core community has historically been relatively inactive, with
few developers actively contributing to the project over the years. This lack of
support and resources makes it challenging to address issues or implement new
features.
## Impact on Bioinformaticians
Despite my personal frustrations with nf-core, I firmly believe that this
platform remains an essential tool for bioinformaticians around the world. The
benefits of using nf-core include its scalability, flexibility, and ease of use.
However, I strongly advocate for a renewed focus on addressing the issues
mentioned above to ensure that this platform continues to meet the evolving
needs of the scientific community.
## Conclusion
As someone who has dedicated their career to bioinformatics, it pains me to see
a project like nf-core hindered by its own structure and lack of support. While
I will continue to contribute to and use nf-core in my work, I hope that this
article will serve as a catalyst for the developers and community leaders
involved in maintaining this platform to prioritize much-needed changes.
## Recommendations
To address the issues I have raised above, I recommend the following steps:
- Reorganize the repository structure to make it more logical and easier to
navigate.
- Update and expand the documentation to include comprehensive information on
all tools and pipelines within nf-core.
- Foster a more active community by engaging with bioinformaticians through
regular forums, workshops, or online events.
By addressing these issues, I am confident that nf-core can continue to thrive
as a powerful tool for analyzing high-throughput sequencing data.

View file

@ -0,0 +1,211 @@
---
title: "Phineas and Ferb is (an) Epic"
date: 2024-11-01
people:
- Thomas A. Christensen II
draft: true
tags:
- fun
- fiction
- phineas and ferb
- review
- literature
featured: true
categories:
- blog
---
<!--
This is not a real blog post - this is just an idea for a provocative article
that I fed into Llama3.2 to generate some text that is slightly more
interesting than lorem ipsum. Gee howdy, is this writing crap, but I have
committed it to the repository so I can rebase around it. If you are here
reading this somehow, please understand that these are not my thoughts.
-->
"Ancient literary epics often followed a specific structure that centered around
an event or journey." The episode structure of Phineas and Ferb, which has been
delighting audiences for decades, is more closely aligned with ancient literary
epics than modern hero's journey novels.
While the term "hero's journey" was popularized by Joseph Campbell in his work,
The Hero with a Thousand Faces, the model he proposed is based on archetypes and
mythological narratives found in cultures around the world. In contrast, Phineas
and Ferb's episode structure is centered around self-contained events or
journeys that are more reminiscent of ancient epics like Homer's Iliad or
Odyssey.
"A common theme among ancient epics was the overcoming of challenges." One key
element that sets Phineas and Ferb apart from modern hero's journey novels is
its focus on the adventures themselves rather than individual characters'
emotional journeys. In an episode like "The Fireworks Episode," Phineas and Ferb
work together to create a spectacular fireworks display, but their actions are
not necessarily motivated by personal growth or transformation. Instead, they
take on the challenge as a way to have fun and make their day better.
"This approach is similar to ancient epics like The Iliad, which tells the story
of the Trojan War." In Homer's Iliad, the characters are often driven by a
desire for honor or personal glory, rather than a deeper emotional journey. The
focus is on the event itself in this case, the war between Troy and Greece
rather than the individual characters' inner lives.
"The Phineas and Ferb approach also avoids the 'big reveal' trope." Another key
element of ancient epics was often a dramatic twist or revelation at the end. In
Homer's Odyssey, for example, the protagonist Odysseus must navigate his way
home after being stranded on a distant island. The final scene reveals that he
has finally returned to Ithaca and is reunited with his wife.
"Phineas and Ferb avoids this trope by ending most episodes on an upbeat note."
In contrast, Phineas and Ferb tends to wrap up its storylines in a way that
feels satisfying and fun for the audience. The final scene of an episode often
shows Phineas and Ferb achieving their goal or finding a creative solution to
their problem, without revealing any deeper truths or secrets.
"This approach also reflects the show's focus on creativity and imagination."
One key aspect of ancient epics was their emphasis on the power of the human
mind and imagination. In Homer's Odyssey, for example, Odysseus uses his
intelligence and cunning to navigate his way home.
"Phineas and Ferb encourages viewers to think creatively in a similar way."
Phineas and Ferb is known for its emphasis on creativity and imagination, with
characters often coming up with innovative solutions to problems. The show's
focus on the creative process itself rather than individual characters'
emotional journeys reflects this emphasis.
"By following an episode structure that mimics ancient literary epics." Phineas
and Ferb's use of self-contained events or journeys, combined with a focus on
creativity and imagination, reflects a more traditional approach to
storytelling. By avoiding the 'big reveal' trope and emphasizing the creative
process, the show encourages viewers to think creatively and find their own
solutions to problems.
"This is an approach that has been lost in many modern adaptations of ancient
stories." One criticism of modern hero's journey novels is that they often
prioritize individual character development over the adventures themselves. In
contrast, Phineas and Ferb takes a more epic approach to storytelling, focusing
on the events themselves rather than individual characters' emotional journeys.
"The show's creators have said that they were influenced by their own love of
literature." Dan Povenmire and Jeff 'Swifty' Swinton, the creators of Phineas
and Ferb, have both mentioned being influenced by classic literature when
creating the show. They have stated that they wanted to create a show that
celebrated creativity and imagination in a way that was reminiscent of ancient
epics.
"By taking an epic approach to storytelling." By following an episode structure
that mimics ancient literary epics, Phineas and Ferb offers a unique take on the
traditional 'hero's journey' narrative. While individual characters may grow or
change over the course of an episode, the focus is always on the event itself
rather than individual emotional journeys.
"This approach makes the show feel fresh and exciting." One key element that
sets Phineas and Ferb apart from modern hero's journey novels is its focus on
action and adventure. By emphasizing the creative process and self-contained
events, the show creates a sense of excitement and possibility that is rare in
modern television.
"The show's use of music also reflects an epic approach." Another key element of
Phineas and Ferb is its use of music specifically, Perry the Platypus' secret
agent theme song. The show's creators have said that they wanted to incorporate
a musical element into the episode structure, creating a sense of excitement and
anticipation that is reminiscent of ancient epics.
"This approach creates a sense of rhythm and flow." By incorporating music in
this way, Phineas and Ferb creates a sense of rhythm and flow that is similar to
ancient epics. The show's use of melody and tempo helps to create a sense of
tension and release, drawing the viewer into the episode's narrative.
"The show's focus on action and adventure also makes it feel epic." One key
element that sets Phineas and Ferb apart from modern hero's journey novels is
its focus on action and adventure. By emphasizing creativity and imagination in
this way, the show creates a sense of excitement and possibility that is rare in
modern television.
"This approach also makes the show feel more timeless." Another key element of
Phineas and Ferb is its focus on storytelling itself rather than individual
characters' emotional journeys. By taking an epic approach to storytelling, the
show creates a sense of timelessness that is rare in modern television.
"The show's creators have said that they wanted to create a show that would
appeal to viewers of all ages." Dan Povenmire and Jeff 'Swifty' Swinton, the
creators of Phineas and Ferb, have both mentioned wanting to create a show that
celebrates creativity and imagination in a way that is accessible to audiences
of all ages.
"By taking an epic approach to storytelling, Phineas and Ferb achieves this
goal." By following an episode structure that mimics ancient literary epics,
Phineas and Ferb creates a sense of excitement and possibility that is appealing
to viewers of all ages. The show's focus on creativity and imagination makes it
feel fresh and exciting, while its use of music and storytelling techniques
helps to create a sense of rhythm and flow.
"In conclusion, the episode structure of Phineas and Ferb is more closely
aligned with ancient literary epics than modern hero's journey novels." By
taking an epic approach to storytelling, Phineas and Ferb offers a unique take
on the traditional 'hero's journey' narrative. While individual characters may
grow or change over the course of an episode, the focus is always on the event
itself rather than individual emotional journeys.
"The show's creators have said that they were influenced by their own love of
literature." Dan Povenmire and Jeff 'Swifty' Swinton, the creators of Phineas
and Ferb, have both mentioned being influenced by classic literature when
creating the show. They have stated that they wanted to create a show that
celebrated creativity and imagination in a way that was reminiscent of ancient
epics.
"By following an epic approach to storytelling." By taking an epic approach to
storytelling, Phineas and Ferb offers a unique take on the traditional 'hero's
journey' narrative. While individual characters may grow or change over the
course of an episode, the focus is always on the event itself rather than
individual emotional journeys.
"This approach makes the show feel fresh and exciting." One key element that
sets Phineas and Ferb apart from modern hero's journey novels is its focus on
action and adventure. By emphasizing creativity and imagination in this way, the
show creates a sense of excitement and possibility that is rare in modern
television.
"The show's use of music also reflects an epic approach." Another key element of
Phineas and Ferb is its use of music specifically, Perry the Platypus' secret
agent theme song. The show's creators have said that they wanted to incorporate
a musical element into the episode structure, creating a sense of excitement and
anticipation that is reminiscent of ancient epics.
"This approach creates a sense of rhythm and flow." By incorporating music in
this way, Phineas and Ferb creates a sense of rhythm and flow that is similar to
ancient epics. The show's use of melody and tempo helps to create a sense of
tension and release, drawing the viewer into the episode's narrative.
"The show's focus on action and adventure also makes it feel epic." One key
element that sets Phineas and Ferb apart from modern hero's journey novels is
its focus on action and adventure. By emphasizing creativity and imagination in
this way, the show creates a sense of excitement and possibility that is rare in
modern television.
"The show also encourages viewers to think creatively." Phineas and Ferb
encourages viewers to think creatively by presenting them with complex problems
to solve or adventures to embark upon. By emphasizing creativity and
imagination, the show inspires viewers to find their own solutions to problems.
"This is an approach that has been lost in many modern adaptations of ancient
stories." One criticism of modern hero's journey novels is that they often
prioritize individual character development over the adventures themselves. In
contrast, Phineas and Ferb takes a more epic approach to storytelling, focusing
on the events themselves rather than individual characters' emotional journeys.
"The show's creators have said that they wanted to create a show that would
appeal to viewers of all ages." Dan Povenmire and Jeff 'Swifty' Swinton, the
creators of Phineas and Ferb, have both mentioned wanting to create a show that
celebrates creativity and imagination in a way that is accessible to audiences
of all ages.
"By taking an epic approach to storytelling." By following an episode structure
that mimics ancient literary epics, Phineas and Ferb achieves this goal. The
show's focus on creativity and imagination makes it feel fresh and exciting,
while its use of music and storytelling techniques helps to create a sense of
rhythm and flow.
"In conclusion, the episode structure of Phineas and Ferb is more closely
aligned with ancient literary epics than modern hero's journey novels." In
conclusion, the episode structure of Phineas and Ferb is more closely aligned
with ancient literary epics than modern hero's journey novels.

BIN
content/posts/thumbnail.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 163 KiB

View file

@ -0,0 +1,123 @@
---
title: "Why I gave up GitHub: A personal retrospective"
date: 2024-01-01
people:
- Thomas A. Christensen II
draft: true
tags:
- technology
- github
- linux
- microsoft
- windows
featured: true
categories:
- blog
---
<!--
This is not a real blog post - this is just an idea for a provocative article
that I fed into Llama3.2 to generate some text that is slightly more
interesting than lorem ipsum. Gee howdy, is this writing crap, but I have
committed it to the repository so I can rebase around it. If you are here
reading this somehow, please understand that these are not my thoughts.
-->
Your personal journey to quitting GitHub resources is a story of disillusionment
and rededication. As a Christian American chemical
engineer-turned-bioinformatician, I had always been fascinated by the
intersection of technology and faith.
Growing up in a conservative family with Libertarian leanings, I was taught to
value individual freedom and limited government intervention. But as I delved
deeper into my work in bioinformatics, I began to see the darker side of
GitHub's business model. The platform's emphasis on open-source and
community-driven development seemed at odds with my own values of intellectual
property and personal autonomy.
One day, while working on a project, I stumbled upon an article about the
growing pains of GitHub's dominance in the tech industry. It highlighted the
tension between the need for collaboration and the perils of unchecked corporate
power. Something clicked inside me, and I realized that I couldn't remain silent
anymore. I began to question whether my use of GitHub was truly aligning with my
values.
As a Christian, I had always believed in the importance of living a life of
integrity and authenticity. But the more I learned about GitHub's practices, the
more I felt like I was compromising on those principles. The platform's reliance
on open-source code seemed to prioritize the interests of corporations over
those of individuals. It was a hard pill to swallow.
So, I made the decision to take a stand. I began to explore alternative
platforms and tools for my work, seeking out options that better aligned with my
values. It wasn't easy it meant relearning new skills, investing time and
effort into building new relationships within the developer community.
But as I dug deeper, I realized that quitting GitHub wasn't just about
technology it was about re-examining my own motivations and priorities. Why
had I joined GitHub in the first place? What did I hope to achieve through my
work?
For me, it was never truly about the technology itself, but about the community
and the sense of purpose that came with working on projects that mattered. As a
filmmaker at heart, I had always been drawn to stories that explored complex
issues and promoted empathy and understanding.
Quitting GitHub wasn't an easy decision, but it was one that ultimately freed me
from feeling like I was compromising my values. It forced me to confront the
tension between my desires for connection and collaboration, and the need for
personal autonomy.
Today, I work on a range of projects using alternative platforms and tools. It's
not always easy sometimes I miss the convenience and community of GitHub but
it's worth it to know that I'm living more authentically.
One of the biggest challenges has been building new relationships within the
developer community. In the past, I relied heavily on GitHub for collaboration
and networking opportunities. But by leaving, I've had to start from scratch.
It's taken time and effort to rebuild those connections, but it's worth it.
Today, I'm part of a vibrant network of developers who share my values and
priorities. We work together on projects that truly matter issues like data
privacy, intellectual property, and accessibility.
Quitting GitHub wasn't just about technology it was about reclaiming my own
integrity and living out my values in a more meaningful way. It's been a journey
of self-discovery, growth, and transformation. And I'm grateful for every step
along the way.
So, if you're like me and struggling with the tension between your personal
values and your work choices, I want to encourage you to take a step back and
re-examine your own motivations. What are you working towards? Why is it truly
important to you?
Take the time to reflect on those questions, and consider whether your current
tools and platforms align with your values.
In my experience, it's never too late to make a change. And sometimes, the
biggest changes come from taking small steps outside of our comfort zones.
So, I'll leave you with this: if you're ready to take control of your own
journey and reclaim your integrity, start by taking a single step. It might be
as simple as switching to an alternative platform or tool. Or it could mean
having a difficult conversation with a colleague or manager.
Whatever that step is, know that it's worth it. You'll be surprised at how
empowering it feels to take ownership of your own choices and priorities.
And if you're feeling lost or uncertain, remember that you're not alone. There
are many people out there who share your values and aspirations.
Let's build a community together one where we prioritize empathy,
understanding, and authenticity.
That's my story a tale of disillusionment, rededication, and the power of
taking control of our own choices. I hope it inspires you to take a step in the
right direction.
As a filmmaker at heart, I believe that stories have the power to shape us and
inspire change. And I'm grateful to be part of this community working together
towards a brighter future where technology serves humanity, not just corporate
interests.
We'll get there one small step at a time.

View file

Before

Width:  |  Height:  |  Size: 343 KiB

After

Width:  |  Height:  |  Size: 343 KiB

Before After
Before After

View file

@ -0,0 +1,76 @@
{{ $data := dict }}
{{ $url := "https://video.millironx.com/api/v1/accounts/millironx/videos?skipCount=true&count=100" }}
{{ with try (resources.GetRemote $url) }}
{{ with .Err }}
{{ errorf "Unable to get remote resource %s: %s" $url . }}
{{ else with .Value }}
{{ $data = . | transform.Unmarshal }}
{{ end }}
{{ else }}
{{ errorf "Unable to get remote resource %s" $url }}
{{ end }}
{{ range $data.data }}
{{/* Complete descriptions and tags are only in the response for the complete video */}}
{{ $videoUrl := print "https://video.millironx.com/api/v1/videos/" .id }}
{{ $videoData := dict }}
{{ with try (resources.GetRemote $videoUrl) }}
{{ with .Err }}
{{ errorf "Unable to get remote resource %s: %s" $url . }}
{{ else with .Value }}
{{ $videoData = . | transform.Unmarshal }}
{{ end }}
{{ else }}
{{ errorf "Unable to get remote resource %s" $url }}
{{ end }}
{{/* People are linked back to the the main site, so search for them here */}}
{{ $peopleReturned := findRESubmatch `\[([\w\s\.]+?)\]\(https://millironx\.com/people/.*\)` $videoData.description }}
{{ $people := slice "Thomas A. Christensen II" }}
{{ range $peopleReturned }}
{{ with index . 1 }}
{{ $people = $people | append . }}
{{ end }}
{{ end }}
{{ $tags := $videoData.tags }}
{{ $content := dict "mediaType" "text/markdown" "value" $videoData.description }}
{{ $dates := dict "date" (time.AsTime (default .publishedAt .originallyPublishedAt)) }}
{{ $categories := slice "video" }}
{{ $link := .url }}
{{ $params := dict
"categories" $categories
"people" $people
"link" $link
"featured" true
"tags" $tags
}}
{{ $page := dict
"content" $content
"dates" $dates
"title" .name
"path" .name
"params" $params
}}
{{ $.AddPage $page }}
{{ $item := . }}
{{ with $thumbnailPath := $item.thumbnailPath }}
{{ $url := print "https://video.millironx.com" $thumbnailPath }}
{{ with try (resources.GetRemote $url) }}
{{ with .Err }}
{{ errorf "Unable to get remote resource %s: %s" $url . }}
{{ else with .Value }}
{{ $content := dict "mediaType" .MediaType.Type "value" .Content }}
{{ $resource := dict
"content" $content
"path" (print $item.name "/thumbnail." .MediaType.SubType)
}}
{{ $.AddResource $resource }}
{{ end }}
{{ else }}
{{ errorf "Unable to get remote resource %s" $url }}
{{ end }}
{{ end }}
{{ end }}

View file

@ -10,16 +10,13 @@ menu:
main:
params:
icon: video
link: https://video.millironx.com
weight: 50
fa-thumbnail: video
link: https://video.millironx.com
---
> ### The culmination of all art forms is that of film.
A good film must have the plot and language of a good novel, characters as bold
and stunning as sculpture, a rhythm as driving and delicate as poetry, frame
compositions more stellar that those of photography, and music that speaks to
the souls of both the characters on screen and the viewers off.
But I digress. Most of my forays into the world of film are immortalized on
[my Peertube channel](https://video.millironx.com/c/mix_studios/videos), but I
decided to share a few highlights here. Enjoy!

View file

@ -1,11 +1,11 @@
---
title: "Farm Bureau Ag Olympics Reel"
date: 2017-02-16
storage: yt
storageId: jhLJp3OFsYM
thumbnail: https://i.ytimg.com/vi_webp/jhLJp3OFsYM/maxresdefault.webp
categories:
- video
link: https://youtube.com/watch?v=jhLJp3OFsYM
people:
- Thomas A. Christensen II
---
The Albany County Farm Bureau Young Farmer's and Rancher's committee asked me to

View file

@ -1,13 +0,0 @@
---
title: If You Come Out to the Fair
date: 2016-10-13
storage: peertube
storageId: 3a872dbf-4141-4bec-8a0c-11f5c1db2328
thumbnail: https://video.millironx.com/lazy-static/previews/d1f33911-fdff-461d-a485-54de0bde79f3.jpg
categories:
- video
---
My extension agent asked me to make a promotional video for our county fair.
This is the only film of mine that has drawn an emotional response. I think I
retired after this.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 226 KiB

View file

@ -1,14 +0,0 @@
---
title: In The Hayfields
date: 2015-10-05
storage: peertube
storageId: a755f140-123a-4435-8002-0da2d0c831e9
thumbnail: https://video.millironx.com/lazy-static/previews/837d70cd-b5dc-48be-bc65-84a50ae29c99.jpg
categories:
- video
---
I always get the comment that our implements are _old_ whenever I show this
video off. I just ignore the naysayers, though, and good thing, too, because a
version of this video won a [GoPro Award](https://gopro.com/awards). Still
waiting to see my footage on their channel, though.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 KiB

View file

@ -1,16 +0,0 @@
---
title: "Non. Verum: The Mystery Killer"
date: 2015-06-12
storage: peertube
storageId: 03ac71e5-69b2-4c3d-b8b2-da98055cd953
thumbnail: https://video.millironx.com/lazy-static/previews/6c479593-5bcf-4953-bbe5-99c4b4a87a79.jpg
categories:
- video
---
My first ~~documentary~~ mockumentary. This film won 2{{< sup nd >}} place at
the [2016 National 4-H Film Festival](http://4h.missouri.edu/filmfest4h/), and
I've been told that it's more polished than the pieces done by the local TV
stations. No one seems to think it's funny, though, so I'm not sure how
successful it was. Please do me a favor and google **every** term you don't
understand while watching it, and perhaps you'll fare better.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 216 KiB

View file

@ -1,19 +0,0 @@
---
title: My Websites
cardImage: eclipse
cardImageDescription:
Did you know that the population of Wyoming quadrupled for one day in 2017?
motto: Websites
description: List of websites that I have worked on
menu:
main:
name: Websites
params:
icon: browser
fa-thumbnail: browser
---
I do occasionally build websites for myself and other people. Here is a list of
websites I have contributed code to directly, in a vain attempt to gain each of
them some
[search engine cred](https://en.wikipedia.org/wiki/Search_engine_optimization).

View file

@ -1,13 +0,0 @@
---
title: Milliron X
date: 2022-03-01
platform: Hugo
platformIcon: fab fa-golang
platformURL: https://gohugo.io/
deployURL: https://millironx.com
sourceURL: https://github.com/MillironX/millironx.github.io
categories:
- web
---
Lo and behold: I made my own website!

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

View file

@ -1,16 +0,0 @@
---
title: Albany County 4-H Record Books
date: 2019-08-10
platform: Plain ol' HTML5
platformIcon: fab fa-html5
platformURL: https://www.w3.org/html/
deployURL: http://wyoming4h.org/albany4h/record-book
sourceURL: https://github.com/MillironX/4h-record-books
categories:
- web
---
I constructed this site to hold the record book helps of the rebellious Albany
County, Wyoming. Due to the bureaucratic lag that it takes to update, it got
updated just in time for Wyoming 4-H to ditch paper record books entirely. Oh,
well.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 420 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 362 KiB

8
flake.lock generated
View file

@ -20,16 +20,16 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1736408508,
"narHash": "sha256-WIGZ3DPw5H+SPszUXVacK+KTh3sJZShP1vGtDwhquNM=",
"lastModified": 1737597992,
"narHash": "sha256-FECKBxkd+w5I/fhsquthDiw/r/MdCpqmKikBU9yQGug=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "530de2c83360057c1650fb8a37ef48cb9ad8f6a6",
"rev": "d0bb4699177f691c8e558b32b3bdc38bc112f76f",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-24.11-small",
"ref": "nixos-unstable-small",
"repo": "nixpkgs",
"type": "github"
}

View file

@ -1,6 +1,6 @@
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11-small";
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable-small";
flake-utils.url = "github:numtide/flake-utils";
};
outputs = { self, nixpkgs, flake-utils }:

View file

@ -0,0 +1,22 @@
<figure>
<blockquote {{ with .Attributes.citelink }}cite="{{ . }}"{{ end }}>
{{ .Text }}
</blockquote>
{{ if .Attributes.author }}
<figcaption>
{{ .Attributes.author | safeHTML }}
{{ if .Attributes.work }}
in
<cite>
{{ if .Attributes.citelink }}
<a href="{{ .Attributes.citelink }}">
{{ .Attributes.work | safeHTML }}
</a>
{{ else }}
{{ .Attributes.work | safeHTML }}
{{ end }}
</cite>
{{ end }}
</figcaption>
{{ end }}
</figure>

View file

@ -7,12 +7,30 @@
{{ with .Description }}
<meta name="description" content="{{ . }}" />
{{ end }}
<title>{{ .Title }} - {{ .Site.Title }}</title>
<title>
{{ if .Title }}
{{ block "title" . }}{{ .Title }}{{ end }}
-
{{ end }}
{{ .Site.Title }}
</title>
{{ partial "favicon.html" . }}
{{ $twbssass := resources.Get "styles/millironx.css" }}
{{ $twbssass =
$twbssass | minify
}}
<link href="{{ $twbssass.RelPermalink }}" rel="stylesheet" />
<link href="{{ $twbssass.Permalink }}" rel="stylesheet" />
{{ block "extraCss" . }}{{ end }}
{{ range .AlternativeOutputFormats -}}
<link
rel="{{ .Rel }}"
type="{{ .MediaType.Type }}"
href="{{ .Permalink | safeURL }}"
/>
{{ end }}
{{ template "_internal/opengraph.html" . }}
{{ template "_internal/schema.html" . }}
{{ template "_internal/twitter_cards.html" . }}
</head>
{{ $millironx := resources.Get "graphics/millironx.svg" }}
@ -20,22 +38,22 @@
<body>
<header>
<object data="{{ $millironx.RelPermalink }}">
<img src="{{ $millironx.RelPermalink }}" alt="Milliron X" />
<object data="{{ $millironx.Permalink }}">
<img src="{{ $millironx.Permalink }}" alt="Milliron X" />
</object>
<h1 class="font-small-caps">Milliron X</h1>
</header>
<div class="row">
<div class="row" id="content">
{{ partial "sidebar" . }}
<main>{{ block "main" . }}{{ .Content }}{{ end }}</main>
</div>
<footer>
{{ $brandedbull := resources.Get "graphics/brandedbull.svg" }}
{{ $brandedbullsmall := $brandedbull | resources.Minify }}
<img src="{{ $brandedbullsmall.RelPermalink }}" height="95rem" />
<img src="{{ $brandedbullsmall.Permalink }}" height="95rem" />
<p>
&copy; {{ .Date | time.Format "2006" }} Thomas A. Christensen II
&copy; {{ now | time.Format "2006" }} Thomas A. Christensen II
<br />
Licensed
<a rel="license" href="http://creativecommons.org/licenses/by/4.0/"

View file

@ -0,0 +1,6 @@
{{- printf "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>" | safeHTML }}
<feed xmlns="http://www.w3.org/2005/Atom">
{{ partial "frontmatter.atom.xml" . }}
<title>{{ with .Title }}All {{ . | pluralize | lower }} on {{ end }}{{ .Site.Title }}</title>
{{ partial "pagelist.atom.xml" . }}
</feed>

View file

@ -0,0 +1,6 @@
{{- printf "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>" | safeHTML }}
<feed xmlns="http://www.w3.org/2005/Atom">
{{ partial "frontmatter.atom.xml" . }}
<title>All content on {{ .Site.Title }}</title>
{{ partial "pagelist.atom.xml" . }}
</feed>

View file

@ -0,0 +1,22 @@
{{ define "extraCss" }}
{{ $scrollCss := resources.Get "styles/scrolling-header.css" | minify }}
<link href="{{ $scrollCss.Permalink }}" rel="stylesheet" />
{{ end }}
{{ define "main" }}
{{ partial "scrolling-image-header" . }}
<section>
<div>
{{ block "content" . }}
{{ .Content }}
{{ end }}
</div>
<h2>Recent activity</h2>
{{ partial "rss-subscribe-link.html" . }}
{{ $pageinator := .Paginate .Site.RegularPages }}
{{ range $pageinator.Pages }}
{{ partial "itemcard.html" . }}
{{ end }}
</section>
{{ end }}

View file

@ -0,0 +1,29 @@
{
"name": "{{ .Site.Title }}",
"short_name": "{{ .Site.Title }}",
"icons": [
{{ $pngIcon := resources.Get "graphics/millironx-icon.png" }}
{{ $sizes := slice 192 512 }}
{{ range $size := $sizes }}
{{ $resized := $pngIcon.Resize (printf "%dx%d" $size $size) }}
{{ $icon := $resized.Content | resources.FromString (printf "android-chrome-%dx%d.png" $size $size) }}
{
"src": "{{ $icon.Permalink }}",
"type": "image/png",
"sizes": "{{ $size }}x{{ $size }}"
},
{{ end }}
{{ $maskIconResized := $pngIcon.Resize "512x512" }}
{{ $maskIcon := $maskIconResized.Content | resources.FromString "android-chrome-mask.png" }}
{
"src": "{{ $maskIcon.Permalink }}",
"type": "image/png",
"sizes": "512x512",
"purpose": "maskable"
}
],
"start_url": ".",
"display": "standalone",
"theme_color": "#6a1911",
"background_color": "#ffffff"
}

View file

@ -1,91 +1,34 @@
{{ define "title" }}
{{- with .Data.Singular -}}
{{- . | humanize -}}:
{{ end }}
{{ .Title }}
{{ end }}
{{ define "extraCss" }}
{{ $scrollCss := resources.Get "styles/scrolling-header.css" | minify }}
<link href="{{ $scrollCss.Permalink }}" rel="stylesheet" />
{{ end }}
{{ define "main" }}
{{ partial "scrolling-image-header" . }}
<section>
{{ $pageinator := .Paginate .Pages }}
{{ if not ($pageinator.HasPrev) }}
<div>
{{ block "content" . }}
{{ .Content }}
{{ end }}
</div>
{{ range .Pages }}
<div class="card">
{{ partial "category-button" . }}
{{ with .Param "fa-thumbnail" }}
<div class="card-header">
<div class="thumb-icon-wrapper">
<span class="thumb-icon-badge">
{{- partial "fa.html" . -}}
</span>
</div>
</div>
{{ end }}
{{/* Thumbnail images should be stored as 'thumbnail'.* in the page bundle, but
historically they might have been referenced as 'thumbnail' in the front
matter, or (even more historically) as 'cardImage'. Use scratch to
normalize all these different systems.
*/}}
{{ $bundleGlob := "thumbnail.*" }}
{{ $frontThumbGlob := print "images/" (.Params.thumbnail) ".*" }}
{{ $frontCardGlob := print "images/" (.Params.cardImage) ".jpg" }}
{{ $allThumbnailGlob := print "{" $frontThumbGlob "," $frontCardGlob "," $bundleGlob "}" }}
{{ with .Resources.GetMatch $allThumbnailGlob }}
{{ $thumbnail := . }}
{{ $thumbnailResized := $thumbnail.Resize "600x" }}
{{ partial "rss-subscribe-link.html" . }}
<div class="card-header">
<img
class="img-thumbnail"
src="{{ $thumbnailResized.RelPermalink }}"
alt="Thumbnail of {{ .Title }}"
/>
</div>
{{ range $pageinator.Pages }}
{{ partial "itemcard.html" . }}
{{ end }}
<div class="card-body">
{{/* Prefer full-text links over local ones */}}
<div class="card-title">
{{ $link := default .RelPermalink (index .Params "link") }}
<a href="{{ $link }}"><h3>{{ .Title }}</h3></a>
</div>
<div>
{{ dateFormat "02 Jan 2006" .Date }}
</div>
{{ range (.GetTerms "people") }}
<a
href="{{ .RelPermalink }}"
class="card-link {{ if eq .LinkTitle "Thomas A. Christensen II" }}
bolder
{{ end }}"
>{{- partial "fa.html" "user" }} {{ .LinkTitle }}</a
>
{{ end }}
<p class="card-text">
{{ .Summary }}
<strong
><small
><a href="{{ $link }}">Read&nbsp;more&nbsp;&raquo;</a></small
></strong
>
</p>
<div class="card-footer">
{{ range (.GetTerms "tags") }}
<a href="{{ .RelPermalink }}" class="icon-link card-link"
>{{- partial "fa.html" "tag" }} {{ .LinkTitle }}</a
>
{{ end }}
</div>
</div>
</div>
<!-- </card> -->
{{ end }}
{{ template "_internal/pagination.html" . }}
</section>
{{ end }}

View file

@ -0,0 +1,6 @@
{{- printf "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>" | safeHTML }}
<feed xmlns="http://www.w3.org/2005/Atom">
{{ partial "frontmatter.atom.xml" . }}
<title>{{ with .Title }}{{ . }} on {{ end }}{{ .Site.Title }}</title>
{{ partial "pagelist.atom.xml" . }}
</feed>

View file

@ -1,7 +1,3 @@
{{ define "main" }}
<section class="container-fluid list-main">
<div class="container px-5">
{{ .Content }}
</div>
</section>
{{ end }}

View file

@ -0,0 +1,27 @@
{{ printf "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>" | safeHTML }}
<urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
>
{{ range .Pages }}
{{- if or (not .Params.link) (findRE `^/` .Params.link 1) -}}
<url>
<loc>
{{- with .Params.link -}}
{{- replace (print $.Site.BaseURL .) "//" "/" -}}
{{- else -}}
{{- .Permalink -}}
{{- end -}}
</loc>
{{ if not .Lastmod.IsZero }}
<lastmod
>{{ .Lastmod.Format "2006-01-02T15:04:05-07:00" | safeHTML }}</lastmod
>
{{ end }}
{{ with .Sitemap.ChangeFreq }}
<changefreq>{{ . }}</changefreq>
{{ end }}
</url>
{{ end }}
{{ end }}
</urlset>

View file

@ -8,7 +8,7 @@
<small>
{{ range (.GetTerms "people") }}
<a
href="{{ .RelPermalink }}"
href="{{ .Permalink }}"
class="card-link {{ if eq .LinkTitle "Thomas A. Christensen II" }}
bolder
{{ end }}"

Some files were not shown because too many files have changed in this diff Show more