initial commit

This commit is contained in:
Mira Kristipati 2025-01-23 10:56:59 -05:00
commit 480092956c
50 changed files with 2645 additions and 0 deletions

21
.gitignore vendored Normal file
View file

@ -0,0 +1,21 @@
# Created by https://www.toptal.com/developers/gitignore/api/hugo
# Edit at https://www.toptal.com/developers/gitignore?templates=hugo
### Hugo ###
# Generated files by hugo
/public/
/resources/_gen/
/assets/jsconfig.json
hugo_stats.json
# Executable may be added to repository
hugo.exe
hugo.darwin
hugo.linux
# Temporary lock file while building
/.hugo_build.lock
# End of https://www.toptal.com/developers/gitignore/api/hugo
content/.obsidian
static/the-monospace-web/*.jpg

6
.gitmodules vendored Normal file
View file

@ -0,0 +1,6 @@
[submodule "themes/ananke"]
path = themes/ananke
url = https://github.com/theNewDynamic/gohugo-theme-ananke.git
[submodule "themes/the-monospace-web"]
path = static/the-monospace-web
url = https://github.com/owickstrom/the-monospace-web.git

5
archetypes/default.md Normal file
View file

@ -0,0 +1,5 @@
+++
date = '{{ .Date }}'
draft = true
title = '{{ replace .File.ContentBaseName "-" " " | title }}'
+++

59
content/lab-notes/9p.md Executable file
View file

@ -0,0 +1,59 @@
---
title: plan9 FS
---
Digested from:
- https://www.usenix.org/legacy/events/usenix05/tech/freenix/full_papers/hensbergen/hensbergen.pdf
- https://www.kernel.org/doc/Documentation/filesystems/9p.txt
- http://ericvh.github.io/9p-rfc/rfc9p2000.html
- http://ericvh.github.io/9p-rfc/rfc9p2000.u.html
- https://9fans.github.io/plan9port/man/man4/9pfuse.html
- https://github.com/pfpacket/rust-9p/tree/master/example/unpfs
# 9p2000 Opcodes
All messages take a `tag` parameter used to multiplex connections
## Session
- version
- parameter negotiations
- auth
- T
- afid: auth handle??
- uname
- username
- aname: mount name (root if blank)
- attach
- establish connection to server
- T
- fid is file handle, chosen by client?
- afid is an 'auth handle'
- -1 for no auth
- uname
- aname
- R:
- flush
- abort request
- error
## File
- walk
- lookup pathname
- open
- create
- read
- write
- clunk
- release a file?
## Metadata
- stat
- read metadata attrs
- wstat
- write metadata attrs
- Requests are T-messages
- responses are R-messages

View file

@ -0,0 +1,68 @@
# Hardware
- Display Resolution: 192x160
- potentially just upscaled from 96x80
- at 3x scaling that's 576x480, 32px pillarboxes if 640x480
- 384x320
- how small can the screen physically be?
- android guidelines say 48dp @ 160dpi or 0.3"
- android guidelines also say 48dp is about 9mm so who the fuck knows anymore
- apple says 44pt ~~or 44/72" or 0.61"~~
- 44pt is 44px, 88px, 132px depending on device
- 132px on iPhone X @ 448(?)dpi so ~ 0.294"
- 192x160 is 1.2"x1"
- 640x480 is 4"x5" for a 6.4" diagonal
- 28.8" x 24" needed to meet android accessibility guidelines jfc
- tl;dr: Apple and Google seem to want about 0.3"per target
- NDS screen size is 106.666 dpi
- poketch would be 1.8x1.5"
- **640x480 would be 2x1.5" or 2.5" diagonal**
- https://www.adafruit.com/product/2478 should do the trick
- 320x240 2.4"
- we use 288x240 (1.5x)
- 2 Bit grayscale
- Touch screen
- 5:4 aspect ratio
- 1/2 physical buttons
# etc
- will need a font
- sprite based?
- ttf based?
- https://lvgl.io/tools/fontconverter
# stretch goals
- use wifi/ble
- config applet
- also would handle right vs left handed
- mqtt/ntfy.sh
- display notifications using margins?
- android notifications sync
- requires adding to gadgetbridge long term
- pedometer
- needs extra hardware
# Sprites
- [x] Digital Watch
- [x] Calculator
- [ ] Memo Pad
- [x] Pedometer
- [x] Pokemon List
- [x] Friendship Checker
- [ ] Dowsing Machine
- [x] Berry Searcher
- [ ] Day-Care Checker
- [ ] Pokemon History
- [ ] Counter
- [x] Analog Watch
- [x] Marking Map
- [x] Link Searcher
- [ ] Coin Toss
- [ ] Move Tester
- [ ] Calendar
- [ ] Dot Artist
- [x] Roulette
- [ ] Chain Counter
- [x] Kitchen Timer
- [ ] Color Changer
- [ ] Matchup Checker
- [ ] Stopwatch
- [ ] Alarm Clock

49
content/lab-notes/etc.md Executable file
View file

@ -0,0 +1,49 @@
---
title: Disorganized Notes
author: ArgentumCation
date: 1970-01-01
slug: disorganized-notes
---
# NixOS/Nix
- Show channels: `sudo nix-channel --list`
- add unstable channel: `sudo nix-channel --add https://nixos.org/channels/nixpkgs-unstable unstable`
- update repos: `sudo nix-channel --update; sudo nix search -u`
---
# SSH
- Set up port forwarding in existing connection:
```sh
$ ~C
ssh> -D [port number]
[Enter]
[Enter]
$
```
---
# Shell
- `!!:s/foo/bar/`, replace first instance of `foo` with `bar` in the previous command
- `^foo^bar` same thing but shorter and less flexible
- `!foo` rerun last command containing `foo`
---
# Keepalived
- don't ever use use_vmac, it's fucky
---
# Toki Pona Prop 65 Warning
- ⚠️ toki pi (ike ken)! ni li ken pana e ijo Esutolosen tawa sina. ma Kaliponja li sona e ni: ijo Esutolosen li ken pakala e jan. o sona mute: http://www.P65Warnings.ca.gov.
- ⚠️"O' L n K! \\|/ > K "n'>> O Esutolosen A_b. (+) Kaliponja > "[]' > \\|/: O Esutolosen > K \[Z\] >> ,O,. \`o "[]' |||: http://www.P65Warnings.ca.gov.
- ⚠️󱥬󱥍󱦗󱤍󱤘󱦘! 󱥁󱤧󱥌󱤉󱤌󱦐󱤉󱥦󱥬󱤫󱥚󱦆󱦑󱥩󱦗󱥞󱦘. 󱤰󱦐󱤗󱤪󱥔󱦆󱤑󱦑󱤧󱥡󱤉󿬂: 󱤌󱦐󱤉󱥦󱥬󱤫󱥚󱦆󱦑󱤧󱤘󱥈󱤉󱤑.󱥄󱥡󱤼: http://www.P65Warnings.ca.gov.
- ⚠️ tk P iG g! N l g bn e **iJ ezt~\[** Tw sn. M **Kl=Y** l Sn e N: iJ **ezt~\[** l g bKL e j. o Sn uE: http://www.P65Warnings.ca.gov.

View file

@ -0,0 +1,65 @@
---
title: Miraidon (Airplay Server)
date: 1970-01-01
draft: true
---
## Reference Impls
- https://github.com/mikebrady/shairport-sync/tree/master?tab=readme-ov-file
- https://github.com/ckdo/airplay2-receiver
- registers mdns service
- starts http server on port `7000`
- forwards requests to `AP2Handler`
- SETUP
- should receive a bplist
- if it contains `streams`
- TODO
- else
- seems to be sending event?
-
- GET
- POST
- service Discovery uses mdns/bonjour
- feature flags are in a SRV record
- TODO: how do I set up an mdns responder
- [mdns_sd](https://docs.rs/mdns-sd/latest/mdns_sd/)
- seems like the actual transfers themselves use http over a different port
```
= wlp0s20f3 IPv6 4431B2384B11@Akristip-l-PF4BWXDJ AirTunes Remote Audio local
hostname = [akristip-l-PF4BWXDJ.local]
address = [fd71:e5f3:3440:f95e:dbf9:f904:c567:1ab9]
port = [5000]
txt = ["pw=false" "txtvers=1" "ch=2" "cn=0,1" "ek=1" "et=0,1" "sv=false" "da=true" "sr=44100" "ss=16" "md=0,1,2" "vn=65537" "tp=TCP,UDP" "vs=105.1" "am=ShairportSync" "fv=4.3.4" "sf=0x4"]
= lo IPv4 4431B2384B11@Akristip-l-PF4BWXDJ AirTunes Remote Audio local
hostname = [akristip-l-PF4BWXDJ.local]
address = [127.0.0.1]
port = [5000]
txt = ["pw=false" "txtvers=1" "ch=2" "cn=0,1" "ek=1" "et=0,1" "sv=false" "da=true" "sr=44100" "ss=16" "md=0,1,2" "vn=65537" "tp=TCP,UDP" "vs=105.1" "am=ShairportSync" "fv=4.3.4" "sf=0x4"]
= wlp0s20f3 IPv4 4431B2384B11@Akristip-l-PF4BWXDJ AirTunes Remote Audio local
hostname = [akristip-l-PF4BWXDJ.local]
address = [192.168.1.212]
port = [5000]
txt = ["pw=false" "txtvers=1" "ch=2" "cn=0,1" "ek=1" "et=0,1" "sv=false" "da=true" "sr=44100" "ss=16" "md=0,1,2" "vn=65537" "tp=TCP,UDP" "vs=105.1" "am=ShairportSync" "fv=4.3.4" "sf=0x4"]
= virbr0 IPv4 4431B2384B11@Akristip-l-PF4BWXDJ AirTunes Remote Audio local
hostname = [akristip-l-PF4BWXDJ.local]
address = [192.168.122.1]
port = [5000]
txt = ["pw=false" "txtvers=1" "ch=2" "cn=0,1" "ek=1" "et=0,1" "sv=false" "da=true" "sr=44100" "ss=16" "md=0,1,2" "vn=65537" "tp=TCP,UDP" "vs=105.1" "am=ShairportSync" "fv=4.3.4" "sf=0x4"]
= docker0 IPv4 4431B2384B11@Akristip-l-PF4BWXDJ AirTunes Remote Audio local
hostname = [akristip-l-PF4BWXDJ.local]
address = [172.17.0.1]
port = [5000]
txt = ["pw=false" "txtvers=1" "ch=2" "cn=0,1" "ek=1" "et=0,1" "sv=false" "da=true" "sr=44100" "ss=16" "md=0,1,2" "vn=65537" "tp=TCP,UDP" "vs=105.1" "am=ShairportSync" "fv=4.3.4" "sf=0x4"]
^CGot SIGINT, quitting.
```
```json
["pw=false",
"txtvers=1",
"ch=2",
"cn=0,1", "ek=1" "et=0,1" "sv=false" "da=true" "sr=44100" "ss=16" "md=0,1,2" "vn=65537" "tp=TCP,UDP" "vs=105.1" "am=ShairportSync" "fv=4.3.4" "sf=0x4"]
```

2
content/lab-notes/pkpass.md Executable file
View file

@ -0,0 +1,2 @@
https://file-extensions.com/docs/pkpasss
https://developer.apple.com/documentation/walletpasses

View file

@ -0,0 +1,74 @@
---
draft: true
---
# An amalgamation of shit from tiktok before the banhammer hits
## Art
- Do anime lineart with a hard edge and soften in post
## Music
- Look into prog drums
- [VS Cynthia Breakdown](https://www.tiktok.com/@iamthebloodtyrant/video/7453556790337277226)
- [Fight Against an Armed Boss](https://www.tiktok.com/@iamthebloodtyrant/video/7440573997340937518)
- [Chinese brainrot movie clips](https://www.tiktok.com/@pianosoin/video/7440491022359989536)
- [BW Gym Leader](https://www.tiktok.com/@parakeetdsi/video/7402611828343229703)
- [VS Red](https://www.tiktok.com/@parakeetdsi/video/7417834269889940737)
- [BW Low Health](https://www.tiktok.com/t/ZTYEq29QF/)
- [BW Route 10](https://www.vxtiktok.com/t/ZTYoRUdGx/)
- [BW surf](https://www.vxtiktok.com/t/ZTYoRCfvF/)
- [Jubilife City](https://www.vxtiktok.com/t/ZTYoR4DQo/)
- [Cyrus Battle](https://www.tiktok.com/t/ZTYoRhsrP/)
- [Accumula Town](https://www.tiktok.com/t/ZTYoRDjCS/)
- https://www.tiktok.com/t/ZT21spx4B/
- [dppt drums](https://www.tiktok.com/t/ZT2eKGTMn/)
- [giant chasm](https://www.tiktok.com/t/ZT2eKqSnG/)
- [vs Iris ](https://www.tiktok.com/t/ZT2eERv22/)
- [route 209](https://www.tiktok.com/t/ZT2eEFSbw/)
- [giratina][https://www.tiktok.com/t/ZT2eKEAdt/]
- [lake trio](https://www.tiktok.com/t/ZT2eE6Pk8/)
- [dialga palkia](https://www.tiktok.com/t/ZT2eENDto/)
## Food
- [The Hat Man](https://www.tiktok.com/@maarkvark/video/7455468427742825759)
- Little bit of lemon juice
- midori
- bit of tequila
- grapefruit juice
- ultra fantasy ruby red monster
- [Indian food of some sort](https://www.tiktok.com/@mydelhi/video/7431614619237551392)
## ETC
### Hikes?
- Whitewater Falls NC
- Eno River
### Stuff to buy
- Luigi Mangione Bag (Peak Design something or other)
## Fashion
- Layering for winter
- Leggings under Jeans
- Long sleeve shirt
- cardigan/sweater/jacket
- Dental Trays + 16% carbamide peroxide
## Trans
- Nasally <=> High Voice
- Need to look into **fixing vocal fold mass**
- less volume, more airflow
- fleece lined tights
- Need to fix size/resonance before reducing weight
## Tech
- `media.mediasource.enabled = false` in firefox settings to make it buffer the whole video
- may break livestreams

26
content/lab-notes/vim.md Normal file
View file

@ -0,0 +1,26 @@
---
title: vim
---
- Sort selected lines: `:sort`
- Open man page: `:man [command]` or `\K`
- Open URL: `gx`
- Move between splits: `ctrl+w [direction]`
- [vim-commentary](https://github.com/tpope/vim-commentary): `gc [motion]` to comment out
- Case switching:
- `gU` to uppercase
- `gu` to lowercase -`g~` to toggle
- Substitute:
- `/g` **global** - sub all in line
- `:%s/` - substitute in all lines
- `:5,12s/` substitute from lines 5 to 12
- `:.,+2s/` substitute this line (`.`) and the next 2
- `:g/^foo/s/bar/baz/g` substitute all instances of bar with baz on lines beginning with foo
- `/c` - ask for confirmation
- Windows
- `:sp [filename]` horizontal split, optionally open file
- `vsp` vertical split
- `ctrl+w w` move between windows
- `ctrl+w =` resize windows to be equal
- `ctrl+w q` close window
- `ctrl+w <direction>` move window

217
content/links.html Normal file
View file

@ -0,0 +1,217 @@
---
title: Links and Socials!
---
<table class="about-me">
<tr>
<td><img src="https://argentumcation.com/links/images/mira.jpg" /></td>
</tr>
<tr>
<td class="width-min">
<h1>ArgentumCation</h1>
</td>
</tr>
<tr>
<td>She/They</td>
</tr>
</table>
<br />
<span class="socials-text">I don't know who you are or how you found this, but while you're here, feel
free to add me everywhere</span>
<div class="social-container">
<table class="socials">
<tr>
<th colspan="3">Social Media</th>
</tr>
<tr>
<td class="social-icon"><i class="fa-brands fa-twitter"></i></td>
<td class="social-name">Xitter</td>
<td class="social-link">
<a href="https://x.com/ArgentumCation">@ArgentumCation</a>
</td>
</tr>
<tr>
<td class="social-icon"><i class="fa-brands fa-mastodon"></i></td>
<td class="social-name">Mastodon</td>
<td class="social-link">
<a href="https://social.treehouse.systems/@argentumcation">@ArgentumCation@treehouse.systems</a>
</td>
</tr>
<tr>
<td class="social-icon"><i class="fa-brands fa-bluesky"></i></td>
<td class="social-name">Bluesky</td>
<td class="social-link">
<a href="https://bsky.app/profile/bsky.argentumcation.zip">@bsky.argentumcation.zip</a>
</td>
</tr>
<tr>
<td class="social-icon"><i class="fa-brands fa-bluesky"></i></td>
<td class="social-name">Bluesky (Mastodon Bridge)</td>
<td class="social-link">
<a href="https://bsky.app/profile/fedi.argentumcation.zip">@fedi.argentumcation.zip</a>
</td>
</tr>
<tr>
<td class="social-icon"><i class="fa-brands fa-tumblr"></i></td>
<td class="social-name">Tumblr</td>
<td class="social-link">
<a href="https://argentumcation.tumblr.com/">argentumcation</a>
</td>
</tr>
</table>
<table class="socials">
<tr>
<th colspan="3">Content</th>
</tr>
<!--Blog-->
<tr>
<td class="social-icon"><i class="fa-solid fa-blog"></i></td>
<td class="social-name">Blog</td>
<td class="social-link">
<a href="https://argentumcation.com/">ArgentumCation</a>
</td>
</tr>
<!--Youtube-->
<tr>
<td class="social-icon"><i class="fa-brands fa-youtube"></i></td>
<td class="social-name">YouTube</td>
<td class="social-link">
<a href="https://www.youtube.com/channel/@argentumcation">ArgentumCation</a>
</td>
</tr>
<!--Twitch-->
<tr>
<td class="social-icon"><i class="fa-brands fa-twitch"></i></td>
<td class="social-name">Twitch</td>
<td class="social-link">
<a href="https://www.twitch.tv/argentumcation">ArgentumCation</a>
</td>
</tr>
<!--Soundcloud-->
<tr>
<td class="social-icon"><i class="fa-brands fa-soundcloud"></i></td>
<td class="social-name">Soundcloud</td>
<td class="social-link">
<a href="https://soundcloud.com/argentumcation">ArgentumCation</a>
</td>
</tr>
<!--Bandcamp-->
<tr>
<td class="social-icon"><i class="fa-brands fa-bandcamp"></i></td>
<td class="social-name">Bandcamp</td>
<td class="social-link">
<a href="https://argentumcation.bandcamp.com/">ArgentumCation</a>
</td>
</tr>
</table>
<table class="socials">
<tr>
<th colspan="3">Messaging</th>
</tr>
<tr>
<td class="social-icon"><i class="fa-brands fa-discord"></i></td>
<td class="social-name">Discord</td>
<td class="social-link">
<a href="https://discord.com/users/215902078747410433">argentumcation</a>
</td>
</tr>
<tr>
<td class="social-icon"><i class="fa-solid fa-envelope"></i></td>
<td class="social-name">Email</td>
<td class="social-link">
<a href="mailto:argentumcation(at)argentumcation.com">argentumcation(at)argentumcation.com</a>
</td>
</tr>
</table>
<table class="socials">
<tr>
<th colspan="3">Code</th>
</tr>
<!--Github-->
<tr>
<td class="social-icon"><i class="fa-brands fa-github"></i></td>
<td class="social-name">GitHub</td>
<td class="social-link">
<a href="https://github.com/ArgentumCation">ArgentumCation</a>
</td>
</tr>
<!--Forgejo-->
<tr>
<td class="social-icon"><i class="fa-brands fa-git-alt"></i></td>
<td class="social-name">Forgejo</td>
<td class="social-link">
<a href="https://git.argentumcation.com/mira">mira</a>
</td>
</tr>
</table>
<table class="socials">
<tr>
<th colspan="3">Misc</th>
</tr>
<!--Steam-->
<tr>
<td class="social-icon"><i class="fa-brands fa-steam"></i></td>
<td class="social-name">Steam</td>
<td class="social-link">
<a href="https://steamcommunity.com/id/argentumcation">ArgentumCation</a>
</td>
</tr>
<!--MyAnimeList-->
<tr>
<td class="social-icon"><i class="fa-solid fa-question"></i></td>
<td class="social-name">MyAnimeList</td>
<td class="social-link">
<a href="https://myanimelist.net/profile/ArgentumCation">ArgentumCation</a>
</td>
</tr>
<!--Itch.io-->
<tr>
<td class="social-icon"><i class="fa-brands fa-itch-io"></i></td>
<td class="social-name">Itch.io</td>
<td class="social-link">
<a href="https://argentumcation.itch.io/">ArgentumCation</a>
</td>
</tr>
<!--PGP Key-->
<tr>
<td class="social-icon"><i class="fa-solid fa-key"></i></td>
<td class="social-name">PGP Key</td>
<td class="social-link">
<a
href="http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xdd8583a510deb949714ed847430c50ca90f98bbe">0xdd8583a510deb949714ed847430c50ca90f98bbe</a>
</td>
</tr>
</table>
<table class="socials">
<tr>
<th colspan="3">Support the Mira!</th>
</tr>
<!--Ko-fi-->
<tr>
<td class="social-icon"><i class="fa-solid fa-mug-hot"></i></td>
<td class="social-name">Ko-fi</td>
<td class="social-link">
<a href="https://ko-fi.com/argentumcation">ArgentumCation</a>
</td>
</tr>
<!--BTC-->
<tr>
<td class="social-icon"><i class="fa-brands fa-btc"></i></td>
<td class="social-name">Bitcoin</td>
<td class="social-link">
<a href="bitcoin:1NzncEg3C2Q72vbArCMU4wN2yPTnx5GU2h">1NzncEg3C2Q72vbArCMU4wN2yPTnx5GU2h</a>
</td>
</tr>
<!--Ethereum-->
<tr>
<td class="social-icon"><i class="fa-brands fa-ethereum"></i></td>
<td class="social-name">Ethereum</td>
<td class="social-link">
<a href="ethereum:0xAdb87d93BAFda19ef168891d76c944879E06a7bd">0xAdb87d93BAFda19ef168891d76c944879E06a7bd</a>
</td>
</tr>
</table>
</div>

36
content/posts/Cluster(fuck).md Executable file
View file

@ -0,0 +1,36 @@
---
author: ArgentumCation
title: Cluster(fuck)
pubDate: 1970-01-01
draft: true
slug: cluster
---
| Hostname | IPv4 | Hardware | Function | OS | Arch | Cores | Ram | USB power? | Power |
| -------------- | ---- | -------------- | --------------- | -------------- | ------------------------ | ----- | ---- | ---------- | ------- |
| | -- | Meraki MR44 | | | | | | | 15/30W? |
| | 248 | Meraki MX68W | | | | | | | 19-87W |
| | | TODO | Switch | | | | | | |
| | | TODO | Switch | | | | | | |
| Amylin | 65 | Nest Pro | WAP | | | | | | |
| Auxin | 153 | | NAS | Nix | x86_64 | 8 | 48 | | |
| Cortisol | 119 | Framework 13 | Personal laptop | Arch | x86_64 | 16 | 32 | X | |
| Epinephrine | | | Desktop | Arch + Windows | x86_64 | TODO | TODO | | |
| Ethylene | 213 | Pi Zero W | | Raspi | arm | 1 | 0.5 | X | 1W |
| Florigen | 108 | Pixel 9 Pro XL | Phone | Android | aarch64 | | | X | |
| Galanin | 129 | Thinkpad x270 | | Nix | x86_64 | 4 | 16 | X | 45/65W |
| Gastrin | 187 | HP x360 G3 EE | Kitchen tablet | Nix | x86_64 | 2 | 4 | X | 45W |
| Histamine | 27 | iPad Air 2 | Tablet | iOS | aarch64 | | | \* | |
| Kinetin | | Milk V Duo | | Buildroot? | RV64<br>(or aarch64)<br> | TODO | 0.25 | X | 5W |
| Leptin | 117 | iMac | Darwin builds | mac | aarch64 | 8 | 8 | | |
| Melatonin | | Erista | Switch | Horizon | aarch64 | | | X | |
| Mellinoë | 226 | | Work laptop | | x86_64 | | | X | |
| Norepinephrine | 179 | | Phone | Android | aarch64 | | | X | |
| Orexin | 224 | Inspiron 7577 | | Nix | x86_64 | 8 | 16 | \* | 130W |
| Pectin | 79 | Ender 3 V3 | 3D printer | Klipper | | | | | |
| Relaxin | 182 | Pi B+ | | Raspi | arm | 1 | 0.5 | X | 2W |
| Rhodopsin | | | TV | | | | | | |
| Ribosome/mRNA | 64 | -- | | -- | -- | -- | -- | -- | -- |
| Strigolactone | 214 | Pi Pico W | power button | ESP32Home | | | | | |
| Vasopressin | 1 | Pi 4 | Router | OpenWRT | aarch64 | 4 | 8 | X | 6W |
| Zeatin | | Milk V Duo S | | Buildroot? | aarch64<br>(or RV64) | TODO | 0.5 | X | 5W |

View file

@ -0,0 +1,16 @@
---
draft: true
---
| Hostname | Hardware | Width | Height | Front Ports | Side Ports | Back Ports |
| ----------- | -------- | ------- | ------- | ---------------------------- | ------------------- | -------------- |
| -- | -- | 254mm | 44.45mm | | | |
| | Switches | -- | 1U | 16x 󰈀 | | 2x Barrel Jack |
| Auxin | 󰇅 | -- | 4U | -- | -- | ?? |
| Ethylene | 0W | 65mm | 5mm | - xμ󰕓<br>- m󰡁 | 󰟜 | |
| Relaxin | B+ | 56mm | 17mm | - 󰈀<br>- 4󰕓 | - 󰡁<br>- μ󰕓 | 󰟜 |
| Vasopressin | 4 | 56mm | 17mm | - 󰈀<br>- 4󰕓 | - 2μ󰡁<br>- 󰕓C | 󰟜 |
| Galanin | x270 | 208.5mm | 21mm | - 󰈀<br>- 1󰕓 | - 󰕓C<br>- 󰡁<br>- 1󰕓 | |
| Zeatin |  Duo S | 43mm | 17mm? | - 󰈀<br>- 1󰕓 | | - 󰕓C<br>- 󰟜 |
| Kinetin |  Duo S | 21mm | 2mm? | | | - 󰕓C |
| Leptin | 󰀶 | 197mm | 36mm | - 2󰕓C<br>- 2󰕓A<br>- 󰡁<br>- 󰈀 | | |

View file

@ -0,0 +1,12 @@
---
draft: true
---
- Needs to get
- Pronouns
- Program
- College
- Department
- Stretch goal
- receive DMs with verification pic
- probably would just OCR for NC State University

View file

@ -0,0 +1,88 @@
---
draft: true
---
# you're telling me a Ham Fisted this Metaphor?
- hamstudy.org
- FRN: 0036253789
- callsign format
- standard 2x3
- KA4\*\*\*
- vanity 1x3
K4\*\*\*
- potential callsigns?
- KM1RA\*
- K4RIM
- KM4IRA
- KA4RIM
- W4RIM
- N4RIM
- N4YAN
- N4YAA
- W4HYY
- N4NII
- K4PPA
- W4STE
- K4FKA
- N4BLA
- W4RPS
- W4RNS
- W4RDS
- W4RES
# Section 1
# T0
- Bonding ground rods is a good idea so that you can parallelize grounding
- allowable RF density scales inversely to duty cycle
# T1
- ARS can only transmit music if it's from a space station
- you can never intentionally transmit music
- if a non-licensed person is talking to a foreign station, the US needs to have an agreement with that country
- For stuff above HF, max power is 1500W
# T2
- CQ is a call to any station (`@anyone`)
- `CQ CQ CQ <callsign>` on Lower HF bands
- `CQ <callsign>` on VHF/UHF/Repeater
- QSY is change frequency
- +/- 5MHz is a common freq offset for repeaters in 70cm band
# T4
- Electronic Keyer helps with morse code
- Tuning an FM receiver off frequency causes distortion
# T3
- UHF Signals are not propagated by ionosphere
- Only way to identify amateur bands is wavelength
- Sporadic E is weird refraction of signals through layer E of ionosphere
# T6
- Single pole means one set of contacts
- Single Throw means one choice per set of contacts
# T7
- Make sure circuit is off when using ohmmeter
# T8
- DMR (Digital Mobile Radio) uses TDM to put two signals on same repeater
- CW is morse code, needs very little bandwidth
# T9
- A 5/8 wavelength antenna has more gain than a 1/4 wavelength
- bigger fraction means lower angle and higher gain
- lower angle always better

43
content/posts/btrfs.md Normal file
View file

@ -0,0 +1,43 @@
---
title: "Lightning Talks: BTRFS"
author: "ArgentumCation"
date: "2023-04-14"
summary: A talk I gave on using BTRFS to my University Linux Usergroup
---
## Crash Course to Filesystems
- your OS needs a way to yeet files somewhere
- NTFS - the windows one
- HFS - the apple one
## BTRFS vs ZFS and LVM
- %%TODO: talk about PV, LV, VG%%
- Please don't use LVM in this day and age
- ZFS is a lot more mature than BTRFS and is probably the safer option, but the main caveats are that it can use hella ram space and doesn't have support for using disks of different sizes together
- On the other hand BTRFS is kinda dogshit if you want to do Raid 5/6, and doesn't let you do tiered storage (e.g. no SSD cache or ramdisk cache)
## Migrating your existing system
- Lucky you, EXT4 and NTFS can be converted to BTRFS in-place
- (Whether or not you should trust converting NTFS to BTRFS is another story)
- ### EXT4
- Grab a live USB and boot into it if this is a partition you can't unmount while booted (eg `/`, `/home`) - make a goddamn backup cause fucking with partitions is just asking for accidental data loss
- okay now time to clean your filesystem
- `# e2fsck -fvy /dev/sdx`
- you'll also want to clear up some space before attempting this
- `# btrfs-convert -p -L --uuid copy -O compress /dev/sdx` to do the actual conversion - if you're low on space add `-n` - if you don't have an FS label on this partition, you can add a label after `-L` - if something went wrong do `# btrfs-convert -r /dev/sdx` - Now let's mount it with `# mount /dev/sdx /mnt/<mount point>` - for example if this is your root partition, mount it to `/mnt` - if it worked, run `# btrfs subvolume delete /mnt/<mount point>/ext2_saved` to yeet reversal data and save some space - Now let's move everything into subvolumes to make backups and stuff easier - cd over to where you mounted and run - `# btrfs subvol create @<subvol name>` - if you have `/home` on the same partition as root make a `@home` subvolume too. - so for a root partition do `@`, - `# mv * @<subvol name>` - you want to do this in a bottom up way, ie move `/home/*` to `/@home` before you move `/` to `@` -
---
> [!todo] TODO
>
> - btrbk
> - in place conversion
> - subvol layout
> - dual Linux boot
> - dual boot with windows
> - automated package manager snapshots
> - Swapfiles
> - zfs comparison

View file

@ -0,0 +1,5 @@
---
draft: true
---
- Okay so like the existence of Unicode is fucking based, and we have the Private Use Area (PUA) for things that the

426
content/posts/gpg.md Executable file
View file

@ -0,0 +1,426 @@
---
title: Intro to GPG
author: ArgentumCation
date: 2023-09-25
slug: gpg
tags:
- encryption
- gpg
---
## What is GPG
Paraphrasing from the Arch Wiki, GPG is basically an implementation of PGP (Pretty Good Privacy)/ RFC 4880. You can use it to sign stuff, encrypt stuff, and authenticate yourself (eg over SSH or S/MIME).
## Using GPG for SSH
1. Generate Master Key
- This is the key you'll use to create subkeys. As such you'll want to keep this safe somewhere
- ```sh
$ gpg --full-generate-key --expert
gpg (GnuPG) 2.4.3; Copyright (C) 2023 g10 Code GmbH
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Please select what kind of key you want:
(1) RSA and RSA
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
(7) DSA (set your own capabilities)
(8) RSA (set your own capabilities)
(9) ECC (sign and encrypt) *default*
(10) ECC (sign only)
(11) ECC (set your own capabilities)
(13) Existing key
(14) Existing key from card
Your selection? 11
```
- We want to pick ECC, since that's the more secure algorithm of these
- Next, we want to disable signing, since we'll only use this key to make more keys (i.e. we'll be certifying other keys)
- ```sh
Possible actions for this ECC key: Sign Certify Authenticate
Current allowed actions: Sign Certify
(S) Toggle the sign capability
(A) Toggle the authenticate capability
(Q) Finished
Your selection? S
Possible actions for this ECC key: Sign Certify Authenticate
Current allowed actions: Certify
(S) Toggle the sign capability
(A) Toggle the authenticate capability
(Q) Finished
Your selection? Q
```
- ```
Please select which elliptic curve you want:
(1) Curve 25519 *default*
(2) Curve 448
(3) NIST P-256
(4) NIST P-384
(5) NIST P-521
(6) Brainpool P-256
(7) Brainpool P-384
(8) Brainpool P-512
(9) secp256k1
Your selection?
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0) 1y
Key expires at Tue Sep 24 21:26:26 2024 UTC
Is this correct? (y/N) y
```
- Here we pick an elliptic curve, I just went with the default since I have no opinions about these
- As for expiry date, I just put it at 1 year. You can change this later if you want
- ```
GnuPG needs to construct a user ID to identify your key.
Real name: Mira Velturu
Email address: mira@xn--2dkua.xn--tckwe
Comment: GPG Demo
You selected this USER-ID:
"Mira Velturu (GPG Demo) <mira@xn--2dkua.xn--tckwe>"
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
```
- The last step is linking your data to the key, and entering a password
- After this, you'll see something like:
- ```
gpg: revocation certificate stored as '/home/mira/.local/share/gnupg/openpgp-revocs.d/6AEDC0D9AD76A6DD613C884958C90C69DF7F1AF9.rev'
public and secret key created and signed.
pub ed25519 2023-09-25 [C] [expires: 2024-09-24]
6AEDC0D9AD76A6DD613C884958C90C69DF7F1AF9
uid Mira Velturu (GPG Demo) <mira@xn--2dkua.xn--tckwe>
```
- The revocation cert lets you mark this key as invalid in case it gets leaked or something similar, keep this safe
- Double check to make sure the output contains `[C]` and no other letters between the braces
2. Alright now time to add subkeys so we can Sign/Authenticate/Encrypt stuff
- First we'll add a subkey for signing and authentication
- ```sh
$ gpg --expert --edit-key 6AEDC0D9AD76A6DD613C884958C90C69DF7F1AF9
gpg (GnuPG) 2.4.3; Copyright (C) 2023 g10 Code GmbH
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Secret key is available.
sec ed25519/58C90C69DF7F1AF9
created: 2023-09-25 expires: 2024-09-24 usage: C
trust: ultimate validity: ultimate
[ultimate] (1). Mira Velturu (GPG Demo) <mira@xn--2dkua.xn--tckwe>
```
- that long string you see is from the command where we made the key
- if you lost it, you can find it with `gpg --list-keys`
- Now we add a subkey, the process is pretty similar to how we made the master key
- ```
gpg> addkey
Please select what kind of key you want:
(3) DSA (sign only)
(4) RSA (sign only)
(5) Elgamal (encrypt only)
(6) RSA (encrypt only)
(7) DSA (set your own capabilities)
(8) RSA (set your own capabilities)
(10) ECC (sign only)
(11) ECC (set your own capabilities)
(12) ECC (encrypt only)
(13) Existing key
(14) Existing key from card
Your selection? 11
Possible actions for this ECC key: Sign Authenticate
Current allowed actions: Sign
(S) Toggle the sign capability
(A) Toggle the authenticate capability
(Q) Finished
Your selection? A
Possible actions for this ECC key: Sign Authenticate
Current allowed actions: Sign Authenticate
(S) Toggle the sign capability
(A) Toggle the authenticate capability
(Q) Finished
Your selection? Q
Please select which elliptic curve you want:
(1) Curve 25519 *default*
(2) Curve 448
(3) NIST P-256
(4) NIST P-384
(5) NIST P-521
(6) Brainpool P-256
(7) Brainpool P-384
(8) Brainpool P-512
(9) secp256k1
Your selection?
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0) 1y
Key expires at Tue Sep 24 21:55:51 2024 UTC
Is this correct? (y/N) y
Really create? (y/N) y
gpg> save
```
- The main difference here is that we have both the Sign and Authenticate capabilities
- Your output will look something like:
- ```
sec ed25519/58C90C69DF7F1AF9
created: 2023-09-25 expires: 2024-09-24 usage: C
trust: ultimate validity: ultimate
ssb ed25519/2A7D7227C6F75FF1
created: 2023-09-25 expires: 2024-09-24 usage: SA
[ultimate] (1). Mira Velturu (GPG Demo) <mira@xn--2dkua.xn--tckwe>
```
- We'll need to do this process one more time to create an encryption subkey
- ```sh
$ gpg --expert --edit-key 6AEDC0D9AD76A6DD613C884958C90C69DF7F1AF9  36s686ms
gpg (GnuPG) 2.4.3; Copyright (C) 2023 g10 Code GmbH
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Secret key is available.
sec ed25519/58C90C69DF7F1AF9
created: 2023-09-25 expires: 2024-09-24 usage: C
trust: ultimate validity: ultimate
ssb ed25519/2A7D7227C6F75FF1
created: 2023-09-25 expires: 2024-09-24 usage: SA
[ultimate] (1). Mira Velturu (GPG Demo) <mira@xn--2dkua.xn--tckwe>
```
- ```
gpg> addkey
Please select what kind of key you want:
(3) DSA (sign only)
(4) RSA (sign only)
(5) Elgamal (encrypt only)
(6) RSA (encrypt only)
(7) DSA (set your own capabilities)
(8) RSA (set your own capabilities)
(10) ECC (sign only)
(11) ECC (set your own capabilities)
(12) ECC (encrypt only)
(13) Existing key
(14) Existing key from card
Your selection? 12
Please select which elliptic curve you want:
(1) Curve 25519 *default*
(2) Curve 448
(3) NIST P-256
(4) NIST P-384
(5) NIST P-521
(6) Brainpool P-256
(7) Brainpool P-384
(8) Brainpool P-512
(9) secp256k1
Your selection?
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0) 1y
Key expires at Tue Sep 24 22:03:43 2024 UTC
Is this correct? (y/N) y
Really create? (y/N) y
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
sec ed25519/58C90C69DF7F1AF9
created: 2023-09-25 expires: 2024-09-24 usage: C
trust: ultimate validity: ultimate
ssb ed25519/2A7D7227C6F75FF1
created: 2023-09-25 expires: 2024-09-24 usage: SA
ssb cv25519/2AD22394690453C2
created: 2023-09-25 expires: 2024-09-24 usage: E
[ultimate] (1). Mira Velturu (GPG Demo) <mira@xn--2dkua.xn--tckwe>
gpg> save
```
3. Okay now you have a key, lets make it work with SSH now
- ```sh
$ echo enable-ssh-support >> ~/.local/share/gnupg/gpg-agent.conf
```
- Now you're gonna need to set `SSH_AUTH SOCK` so that we use `gpg-agent` instead of `ssh-agent` for handling SSH credentials (don't worry this won't mess with your existing SSH credentials)
- Add the following to your `.bashprofile` or `.zshrc`
- ```sh
unset SSH_AGENT_PID
if [ "${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]; then
export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)"
fi
export GPG_TTY=$(tty)
gpg-connect-agent updatestartuptty /bye >/dev/null
```
- To use your keys for SSH Auth we'll need to add it to the sshcontrol file
- ```sh
$ gpg --list-keys --with-keygrip
/home/mira/.local/share/gnupg/pubring.kbx
-----------------------------------------
pub ed25519 2023-09-25 [C] [expires: 2024-09-24]
6AEDC0D9AD76A6DD613C884958C90C69DF7F1AF9
Keygrip = 929E520FB577F34E064E670A6500B21D4835B226
uid [ultimate] Mira Velturu (GPG Demo) <mira@xn--2dkua.xn--tckwe>
sub ed25519 2023-09-25 [SA] [expires: 2024-09-24]
Keygrip = 25F5E8427F0F9338A00F98225D125C09EAEBFF24
sub cv25519 2023-09-25 [E] [expires: 2024-09-24]
Keygrip = ED48EF4A2FDD7F03F779EC58B06B1AB0F4B75652
```
- `echo 25F5E8427F0F9338A00F98225D125C09EAEBFF24 >> ~/.local/share/gnupg/sshcontrol`
- run `ssh-add -l` to verify
- I couldn't actually get this part working but trust me bro :tm:
- ```sh
$ gpg --export-ssh-key 6AEDC0D9AD76A6DD613C884958C90C69DF7F1AF9
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGWaV6YjtxALsgpvSoBtyW1nFaTTifOQKQmmj9bQsrtJ openpgp:0xC6F75FF1
```
- this'll spit out your public SSH Key for the given Key ID
4. Back up your keys and yeet the master key
- ```sh
$ gpg -a --export-secret-keys > master-secret-key.asc
$ gpg -a --export-secret-subkeys > sub-secret-keys.asc
$ gpg --delete-secret-key 6AEDC0D9AD76A6DD613C884958C90C69DF7F1AF9
$ gpg --import sub-secret-keys.gpg
```
- put these two files somewhere safe, like physical media
## Encryption
### Asymmetric
- Okay this one's pretty simple:
- ```sh
$ gpg --recipient user-ids --encrypt doc
```
- this will encrypt `doc` using your private key and the public keys of your recipients
- ```sh
$ gpg --output doc --decrypt doc.gpg
```
- this will decrypt `doc.gpg` if you have a matching private key
### Symmetric
- Even easier, no keys required
- ```sh
$ gpg -c doc
```
- this will encrypt and decrypt `doc` using a pre-shared key
### Signing
- Don't @ me I know this isn't actually encryption, but being able to provide signatures is important since it'll show a) the file comes from you, and b) the file hasn't been tampered with or corrupted
- ```sh
$ gpg --output doc.sig --sign doc
```
- this'll attach the signature to your file and output a compressed version
- I don't really recommend this since `doc.sig` will be a binary blob
- if you want to not compress this and leave the contents of `doc` readable in `doc.sig` use `--clearsign` instead of `--sign`
- ```sh
$ gpg --output doc.sig --detach-sig doc
```
- This will put just the signature into `doc.sig` which you can send to someone alongside `doc`
- As for verifying signatures, just do
- ```sh
$ gpg --verify doc.sig
```
- If this is a detached signature, make sure `doc` is in the same folder
---
## ETC
- By convention, encrypted files end in `.gpg` if they are binary data, or `.asc` if stored with ASCII Armor (which is basically just base64)
- `$ gpg --list-keys`: list pubkeys in your keyring
- `$ gpg --list-secret-keys`: list private keys in your keyring
- `$ gpg --export --armor --output public-key.asc [email or key ID]`: output your pubkey
- `$ gpg --import public-key.asc`: import a pubkey
- `$ gpg --gen-revoke --armor --output revcert.asc [email or key ID]`: output your revocation key
- `$ gpg --keyserver keyserver.ubuntu.com --send-keys [key ID]`: to send your public key to the ubuntu keyserver
- this seems to be the most popular one, keybase.io also exists among others
-
---
## Troubleshooting
- if you run into issues with it not prompting for a password or see `no pinentry`
- try adding `--pinentry=loopback` as a flag for gpg
- for a permanent fix, look into adding a config option in `gpg-agent.conf`
- honestly this should really be a `TODO` cause pinentry is its own mess
---
## References
- Adapted from https://gist.github.com/mcattarinussi/834fc4b641ff4572018d0c665e5a94d3
- https://wiki.archlinux.org/index.php/GnuPG

View file

@ -0,0 +1,140 @@
---
draft: true
title: Hypercomplex Interest
summary: You know what, fuck you _rotates your interest rates 90°_
---
# Compound Interest
Y'all remember this from like 4th grade right, I barely do so here's a refresh
$$ z = Pe^{rt} $$
- \(P\) is your principal, or how much money you initially put in or took out
- \(r\) is the interest rate, you want this to be low if you're borrowing and high if you're lending
- \(t\) is time, unless you have a TARDIS, this one is pretty out of your control
- \(z\) is how much money you owe/are owed, I know this isn't the standard variable name but bear with me
Now let's make it spicy
# Complex Interest
Who says you need to have a real number for your interest rate? The Fed moves interest rates up and down all the time, when will those cowards start moving it left and right.
But first, what does it mean to move money to the left? \[Vsauce Sting]
Let's keep things simple for now and just rotate it around 0 like it's a circle
![The quantity $2 rotated 45 degrees about the origin, yielding a complex amount of money](Pasted%20image%2020240926154326.png)
We can represent this as a complex number in the form \(z=Pe^{i\theta}\), where \(\theta\) is some angle.
Hold on a second this looks kinda like the the interest rate formula from earlier. Let's add in time as a factor to get: \(z=Pe^{i\theta t}\).
Okay so we can see that this is basically just compound interest with an interest rate of \(\theta\).
What does this even mean, can I use this to get out of student loans? Do I owe MOHELA imaginary money?
Well I left out an important detail, \(Pe^{i\theta}=P\cos(t\theta)+iP\sin(t\theta)\)
The proof is trivial and would be left as an exercise to the reader but unfortunately I need to use it later on so here's why this works:
> [!TODO] Explain Euler's Identity here
So let's say I owe 1,000 USD at a 5% interest rate (I wish lmao), that would look like:
> [!TODO] Todo
That makes sense, but now let's look at what happens if we do \(5i\%\)
![A graph of compound interest at 5% vs 5i% interest rates](Pasted%20image%2020240926123001.png)
Well the real part ends up being
$$\Re(z)=P\cos(\frac\pi 2rt)$$
And the imaginary part ends up being
$$\Im(z)=P\sin(\frac\pi 2rt)$$
So if I wait about 30 years after my initial loan, I can owe none money with left bread, if I wait 60 years, MOHELA needs to double my money for free.
Honestly I think the stock market is a better investment strategy. But that seems a bit too based either way, so no wonder I can't get my loans refinanced like this
Hm.
_Morpheus voice_ what if I told you there's more than one way to rotate a cow?
> [!TIP] Okay listen closely because this next part is how I got my partner to fall for me
# Split-Complex Interest
Normally when you rotate something you move it in a circle, which is cool and all, but what if you can rotate it in the opposite of a circle?
![The quantity $2 hyperbolically rotated about the origin by 45 degrees, yielding a split-complex value](Pasted%20image%2020240926154245.png)
Introducing: the Hyperbola
![The unit circle (red), alongside the unit hyperbola(green)](Pasted%20image%2020240926154035.png)
So with the unit circle we had an equation like \(x^2+y^2=1\), well there's a unit Hyperbola too and the equation for that is \(x^2-y^2=1\).
There's actually a lot more stuff that circles have that have a hyperbolic equivalent.
Remember \(\sin\) and \(\cos\)? There's also a \(\sinh\) and \(\cosh\), don't ask me to explain these because we didn't cover them at all in high school.
Here's the big one that we care about though, we know multiplying something by \(i\) rotates it around a circle, there's actually a \(j\) that rotates something around a hyperbola.
But what exactly is this mysterious \(j\)?. It's shrimple as really, \(j=\sqrt{1}\).
> [!QUOTE] Isn't that just 1?
No. don't think about it too hard
> [!QUOTE] So what does \(e^{\theta j}\) break down into, if anything?
I wouldn't be asking this rhetorical if there wasn't a semi-interesting answer
It's actually \(Pe^{j\theta t} = P\cosh(t\theta)+jP\sinh(t\theta)\)
# Dual Interest rates
Okay this one isn't as interesting but I want to include it for completeness,
We have \(i=\sqrt{-1},\ j=\sqrt{1}\), now get ready for \(\varepsilon=\sqrt{0}\). I guess was taken when they invented this one?
> [!Todo] todo
while we're on the topic of dual numbers, lets try shoving \(x+\varepsilon\) into some functions for shits and giggles:
$$(x+\varepsilon)^2=x^2+2x\varepsilon+\varepsilon^2=2x\varepsilon$$
> [!quote] Okay that was a waste of time, was that supposed to be interesting?
Yes. I'm getting there
$$\sin(x+\varepsilon)=(x+\varepsilon)-\frac{(x+\varepsilon)^3}{3!}+\frac{(x+\varepsilon)^5}{5!}\ldots$$
Okay now lets expand that out
$$=(x+\varepsilon)-\frac{x^3+3x^2\varepsilon+3x\varepsilon^2+\varepsilon^3}{3!}+\frac{x^5+5x^4\varepsilon+10x^3\epsilon^2+10x^2\varepsilon^3+5x\varepsilon^4+\varepsilon^5}{5!}\ldots$$
of course \(\varepsilon\) to powers higher than 1 just ends up being zero so we can simplify this monstrosity down to
$$=x+\varepsilon-\frac{x^3+3x^2\varepsilon}{3!}+\frac{x^5+5x^4\varepsilon}{5!}$$
...except this still doesn't mean too much, lets try factoring \(\varepsilon\) out
$$(x-\frac{x^3}{3!}+\frac{x^5}{5!}+\ldots)+\varepsilon(1-\frac{x^2}{2!}+\frac{x^4}{4!})$$
$$=\sin(x)+-\cos(x)\varepsilon$$
> [!QUOTE] Hold on, what the shit? we the 'imaginary' part is the derivative?
Yeah actually. If you remember back to 8th grade,
$$f'(x)=\frac{d}{dx}f(x)=\lim_{h\to0}\frac{f(x+h)-f(x)}{h}$$
We can kinda replace \(h\to 0\) here with \(\varepsilon\) since it's basically an infinitely tiny number that's not zero or negative, which gives us
$$f'(x)=\frac{f(x+\varepsilon)-f(x)}{\varepsilon}$$
> [!note] Dividing by is sus as fuck, but just bear with me here
$$\varepsilon f'(x)=f(x+\varepsilon)-f(x)$$
$$f(x+\varepsilon)=f(x)=\varepsilon f'(x)$$
There you go, typesetting this was a bitch.
# Errata
## Matrix Representations
Fun fact, you can also represent \(i,j,\varepsilon\) as matrices too
Its already kinda standard to use \(\begin{bmatrix}1&0\\0&1\end{bmatrix}\) to cast real numbers into 2D matrices, but there's two zeros in there doing nothing, maybe we can yoink those for real estate.
Introducing:
$$i=\begin{bmatrix}0&1\\-1&0\end{bmatrix},\ j=\begin{bmatrix}0&1\\1&0\end{bmatrix},\ \varepsilon=\begin{bmatrix}0&1\\0&0\end{bmatrix}$$
These versions actually obey the same multiplication rules as our original derivations of the hypercomplex numbers. Now we can turn something like \(6+3j\) into \(\begin{bmatrix}6&3\\3&6\end{bmatrix}\)
## Colors
As somewhat of a convention, I use red, green, and blue in this post to differentiate between graphs relating to complex numbers, split-complex numbers, and dual numbers respectively
## Honey, I broke the concept of division!
Yeah... division doesn't really work right when you bring \(j\) and \(\varepsilon\) into the mix since you can multiply non-zero stuff and get zero out
$$\frac{1}{1+j}\cdot\frac{1}{1-j}=\frac{1}{1-j^2}=\frac{1}{1-1}=\frac10$$
$$\frac 1\varepsilon \cdot \frac 1\varepsilon=\frac 1{\varepsilon^2}=\frac 10$$

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

142
content/posts/monogatari.md Normal file
View file

@ -0,0 +1,142 @@
---
title: Monogatari Series Watch Order
pubDate: 2024-07-01
summary: "The definitive watch order for the Monogatari Series (unfortunately)"
---
```mermaid
---
title: Monogatari Watch Order
---
flowchart TB
katana["Katanagatari"] --> S1_1
subgraph S1_1["Season 1: Part 1"]
Bakemonogatari -->
Kizumonogatari
end
S1_1 --> ore["Ore Monogatari!!"] --> S1_2
subgraph S1_2["Season 1: Part 2"]
Nisemonogatari -->
kuro["Nekomonogatari (Black)"]
end
S1_2 --> S2_1
subgraph S2_1["Season 2: Part 1"]
shiro["Nekomonogatari (White)"] -->
Kabukimonogatari
end
S2_1 -->
Hanamonogatari --> S2_2
subgraph S2_2["Season 2: Part 2"]
Otorimonogatari -->
Onimonogatari -->
Koimonogatari
end
S2_2 --> S3 --> off --> monster
subgraph S3["Final Season"]
Tsukimonogatari -->
Koyomimonogatari -->
Owarimonogatari -->
zoku["Zoku Owarimonogatari"]
end
subgraph off["Off Season"]
Orokamonogatari -->
Wazamonogatari -->
Nademonogatari -->
Musubimonogatari
end
subgraph monster["Monster Season"]
Shinobumonogatari -->
Yoimonogatari -->
Amarimonogatari -->
Ougimonogatari -->
Shinomonogatari
end
silmarillion["The Silmarillion"]
silmarillion --> lotr
subgraph lotr["The Lord of the Rings"]
fellowship["The Fellowship of the Ring"] -->
towers["The Two Towers"] -->
return["The Return of the King"]
end
notebook["The Notebook"] --> lw
subgraph tkam["To Kill a Mockingbird"]
tkam_1["To Kill a Mockingbird"] -->
gsam["Go Set a Watchman"]
tkam_1 --> x["To Pimp A Butterfly"]
end
beedle["The Tales of Beedle the Bard"]
subgraph HP["Harry Potter"]
hp1(["Philosopher's Stone"]) -->
hp2(["Chamber of Secrets"]) -->
hp3(["Prisoner of Azkaban"]) -->
hp4(["Goblet of Fire"]) -->
hp5(["Order of the Phoenix"]) -->
hp6(["Half-Blood Prince"]) -->
hp7(["Deathly Hallows"]) -->
hp8(["Cursed Child"])
end
beedle --> HP --> hm --> silmarillion
attc["A Tale of Two Cities"]
garf(["Garfield"]) -->
attk(["A Tale of Two Kitties"])
attc --> attk -->
Otoyomegatari -->
handmaid["The Handmaid's Tale"]
canturbury["The Canturbury Tales"] -->
nights_0["1001 Arabian Nights"] -->
nights_1(["NiGHTS Journey of Dreams"]) -->
nights_2["NiGHTS Journey of Dreams"] --> kirby -->
Maus
subgraph kirby["Kirby Series"]
dl(["Kirby's Dream Land"]) -->
adv["Kirby's Adventure"]
end
kirby --> decameron
decameron["The Decameron"] -->
cs["Cave Story"] -->
Genjimonogatari -->
wss["West Side Story"] -->
yearling["The Yearling"]
subgraph musket["The d'Artagnan Romances"]
ttm["The Three Musketeers"] -->
tya["Twenty Years After"] -->
tvb["The Vicomte of Bragelonne"]
end
subgraph lw["Little Women"]
lw_1["Little Women"] -->
lw_2["Little Men"] -->
lw_3(["Jo's Boys"])
end
musket --> Heikemonogatari --> beedle
bb["Black Beauty"]
joseph["Joseph: King of Dreams"] -->
pkmn["Pokémon the Movie: The Power of Us"] -->
Metamorphoses
tramp["Lady and the Tramp"]
subgraph narnia["The Chronicles of Narnia"]
n1["The Magician's Nephew"] -->
n2["The Lion, the Witch and the Wardrobe"] -->
n3["The Horse and His Boy"] -->
n4["Prince Caspian"] -->
n5["The Voyage of the Dawn Treader"] -->
n6["The Silver Chair"] -->
n7["The Last Battle"]
end
subgraph hm["Harvest Moon"]
hm1["Harvest Moon"] -->
hm2["Harvest Moon 2"] -->
hmb["Harvest Moon: Back to Nature"] -->
hm3["Harvest Moon 3"]
end
Hyakumonogatari
ember["The City of Ember"] --> joseph
neverending["The Neverending Story"] --> narnia -->
rcr["River City Ransom"] --> bb --> ember
lotr --> Hanamonogatari
attk --> canturbury
lw --> neverending
Maus --> Hyakumonogatari --> tkam --> silmarillion
Metamorphoses --> beedle
tramp --> garf
handmaid --> musket
```

45
content/posts/nonfree.md Normal file
View file

@ -0,0 +1,45 @@
---
draft: true
---
# Non-FSF-Approved Software Licenses
- [Aladdin Free Public License](https://spdx.org/licenses/Aladdin.html)
- Can't charge for distribution
- Makes it harder to ship Aladdin software with commercial software
- [Anti-996 License](https://raw.githubusercontent.com/kattgu7/Anti-996-License/master/LICENSE)
- Modified from MIT License
- Requires users to comply with International Labour Organization standards and local labor laws
- [Anti-Capitalist Software License](https://anticapitalist.software/)
- Does not require releasing source
- Allows for commercial use
- [Artistic License 1]()
- [Code Project Open License, v1.02]()
- [Commons Clause]()
- [CNRI Digital Object Repository License Agreement]()
- [The Hippocratic License 1.1]()
- [GPL for Computer Programs of the Public Administration]()
- [Hacktivismo Enhanced-Source Software License Agreement]()
- [Jahia Community Source License]()
- [The JSON License]()
- [License of Lha]()
- [Microsoft's Shared Source CLI, C#, and Jscript License]()
- [NASA Open Source Agreement]()
- [Open Public License]()
- [Peer-Production License]()
- [Personal Public License v3a]()
- [Reciprocal Public License]()
- [Simple Machines License]()
- [Sun Community Source License]()
- [Sun Solaris Source Code]()
- [Server Side Public License]("https://www.mongodb.com/licensing/server-side-public-license")
- Clarified version of AGPL used by MongoDB
- If software is offered as a service, the service stack source must be available
- [Sybase Open Watcom Public License v1]()
- [SystemC “Open Source” License, v3]()
- [Truecrypt license 3]()
- [University of Utah Research Foundation Public License]()
- [YaST License]()
- [Open Content License, v1](https://web.archive.org/web/19981206111937/http://www.opencontent.org/opl.shtml)
- [CC-BY-NC](https://creativecommons.org/licenses/by-nc-nd/4.0/)
- [CC-BY-ND](https://creativecommons.org/licenses/by-nc-nd/4.0/)

65
content/posts/numbers.md Normal file
View file

@ -0,0 +1,65 @@
---
draft: true
---
# What the fuck is a number?
Okay so like this _should_ be an easy enough question to answer, but of course it isn't cause when is anything ever simple on this godforsaken plane of existence.
## Naturals
Let's start with the caveman shit, **Natural Numbers ($\mathbb{N}$)** (god I really hope latex renders here). This is the stuff every 3 year old knows, $1,2,3,\ldots$. Seems basic enough because it is.
Just fucking kidding is $0$ a natural number? who knows, I sure as shit don't.
Also, like what exactly _is_ $0$ or $1$?
> I mean if we want to use the Zermelo-Fraenkel definition, $0 = \{\}, 1 = \{0\}, 2 = \{0,1\}, \dots$ ad absurdum
## Ordinals
Okay so baby steps, now that we have some semblance of a place to start, we can move onto the **ordinals**. The ordinals are basically numbers used for putting things in order. How are they different from the naturals?
Short answer: they aren't
Long answer: ...for finite numbers
## Cardinals
### Aleph and Beth
## Zero
## Integers
## Rationals
## Algebraics?
## Reals
## Complex Numbers
### Vectors
### Matrices
## 2D Hypercomplex
## Quaternions
## Octonions and Sedenions
## RGB
### Color Charge
## Surreal Numbers
## Algebraic Structures
## p-adics
# Conclusion
> Q: What the fuck is a number?
> A: A miserable pile of math

View file

@ -0,0 +1,39 @@
---
draft: true
---
- 87G8P632+H8X2Q262
- 87000000+
- P632+
> [!NOTE] foo
> bar
> [!TLDR] foo
> bar
> [!tip] foo
> bar
> [!done] foo
> bar
> [!faq] foo
> bar
> [!WARNING] foo
> bar
> [!fail] foo
> bar
> [!bug] foo
> bar
> [!example] foo
> bar
> [!quote] foo
> bar
> blockquote

20
content/posts/post-1.md Executable file
View file

@ -0,0 +1,20 @@
---
title: "Generating an SSH Resident Key"
author: "ArgentumCation"
pubDate: "2023-03-19"
slug: "post-1"
---
import { Accordion, AccordionItem } from "accessible-astro-components";
## Here's how to create a resident SSH Key using a security key
```bash
ssh-keygen -t ed25519-sk -Oresident
```
## If that one doesn't work,
```bash
ssh-keygen -t ed25519-sk -Oresident -Oapplication=ssh:key
```

149
content/posts/traefik-setup.md Executable file
View file

@ -0,0 +1,149 @@
---
title: "Getting up and running with Traefik"
author: "ArgentumCation"
layout: ../../layouts/Layout.astro
pubDate: "2023-04-03"
slug: "traefik-setup"
---
- Okay so you've got a server now and need a reverse proxy
- Traefik is pretty decent at that, it'll set up your HTTPS certs and auto generate routes from your docker images
- only problem is its an absolute bitch to set up
- Here's a stripped down `docker-compose.yml` to give you an idea of how I have it set up
- The end result should be a lighttpd server running on `blog.argentumcation.com`
<!--more-->
```yaml
# Just setting some default values for my containers
x-service_defaults: &service_defaults
env_file: .env
restart: unless-stopped
extra_hosts:
- host.docker.internal:host-gateway
services:
traefik:
<<: *service_defaults
container_name: traefik
env_file:
- .env
# Cloudflare API token to add new paths
- $ENV_DIR/traefik.secrets.env
hostname: traefik
image: traefik:latest
labels:
- traefik.http.services.traefik-docker.loadbalancer.server.port=8080
# For the management interface
- "8080:8080"
# To let traefik receive incoming HTTP traffic
- "80:80"
# To let traefik receive incoming HTTPS traffic
- "443:443"
volumes:
# This lets traefik see your docker services
- $DOCKER_SOCK:/var/run/docker.sock:ro
# Traefik Configs
- $CONF_DIR/traefik/traefik.yml:/traefik.yml
- $CONF_DIR/traefik/traefik_dynamic.yml:/etc/traefik/traefik_dynamic.yml
# Let's Encrypt folder (for storing HTTPS cert related stuff)
- $CONF_DIR/letsencrypt:/letsencrypt
# Example container we're proxying with traefik
lighttpd:
<<: *service_defaults
container_name: public_lighttpd
image: sebp/lighttpd
labels:
# This is the hostname that traefik will proxy to this container
- traefik.http.routers.lighttpd-docker.rule=Host(`blog.$PUBLIC`)
# This is the port the container is listening on, often traefik can detect this
# automatically, but we'll just be explicit here
- traefik.http.services.lighttpd-docker.loadbalancer.server.port=80
```
- `traefik.secrets.env` contains my cloudflare API key so that Traefik can automatically add DNS routes
- For reference, here's my `.env` file
```sh
# GENERAL
PUBLIC=argentumcation.com
TZ=America/New_York
#for container specific env vars
ENV_DIR=./env
CONF_DIR=./config
DOCKER_DIR=/home/mira/docker
DOCKER_SOCK=/var/run/docker.sock
# So my containers run as a non-root user
UID=1000
GID=1000
PUID=1000
PGID=1000
USER_UID=1000
USER_GID=1000
```
- And of course, the actual traefik configuration files:
- `traefik.yml`:
```yaml
accessLog:
filePath: ./traefik-access.log
api:
dashboard: true
debug: true
insecure: true
certificatesResolvers:
letsencrypt:
acme:
dnschallenge:
provider: cloudflare #look, I know, don't judge me
email: [redacted]
storage: /letsencrypt/acme.json
entryPoints:
web:
address: ":80"
forwardedHeaders:
insecure: true
http:
middlewares:
- https_redirect@file
websecure:
address: ":443"
forwardedHeaders:
insecure: true
http:
tls:
certresolver: letsencrypt
domains:
- main: argentumcation.com
sans:
- "*.argentumcation.com"
log:
level: INFO
providers:
docker:
# Routes will be set to [container-name].argentumcation.com by default
defaultRule: Host(`{{ index .Labels "com.docker.compose.service" }}.argentumcation.com`)
endpoint: unix:///var/run/docker.sock
exposedByDefault: true # exposes auto-discovered containers by default, not secure but I'm lazy
network: docker_default
watch: true
file:
directory: /etc/traefik/
watch: true
```
- `traefik-dynamic.yml`
```yaml
http:
middlewares: #This should redirect incoming http connections to https
https_redirect:
redirectscheme:
scheme: https
permanent: true
```

21
hugo.toml Normal file
View file

@ -0,0 +1,21 @@
baseURL = 'https://argentumcation.com/'
languageCode = 'en-us'
title = 'ArgentumCation'
# theme = 'ananke'
[markup.highlight]
linenos = true
anchorlinenos = true
noClasses = false
[markup.goldmark]
renderer.unsafe = true
summaryLength = 1
[markup.goldmark.extensions.passthrough]
enable = true
[markup.goldmark.extensions.passthrough.delimiters]
block = [['\[', '\]'], ['$$', '$$']]
inline = [['\(', '\)']]
[params]
math = true

View file

@ -0,0 +1,14 @@
{{ $emojis := dict "caution" ":exclamation:" "important" ":information_source:"
"note" ":information_source:" "tip" ":bulb:" "warning" ":information_source:"
"todo" ":memo:" "quote" ":speech_balloon:" "default" ":information_source:" }}
<blockquote class="alert alert-{{ .AlertType }}">
<table>
<tr>
<td class="width-min">
{{ transform.Emojify (index $emojis .AlertType) }}
</td>
<td class="width-min">{{.AlertType}}</td>
<td class="width-auto">{{ .AlertTitle}}</td>
</tr>
</table>
</blockquote>

View file

@ -0,0 +1,4 @@
<pre class="mermaid">
{{- .Inner | htmlEscape | safeHTML }}
</pre>
{{ .Page.Store.Set "hasMermaid" true }}

View file

@ -0,0 +1,23 @@
<html>
<meta charset="UTF-8" />
<head>
{{ partialCached "head.html" . .Title }}
</head>
<body>
{{ partialCached "header.html" . }} {{ range .Pages }} {{ if .Draft }} {{
else }}
<table>
<tr>
<td class="width-auto"><a href="{{.Permalink}}">{{ .Title }}</a></td>
<td class="width-min">{{ .Date.Format "2006-01-02" }}</td>
</tr>
<tr>
<td colspan="2">{{.Summary}}</td>
</tr>
</table>
{{end}} {{end}} {{ partialCached "footer.html" . }}
</body>
</html>

View file

@ -0,0 +1,20 @@
<!doctype html>
<html>
<head>
{{ partialCached "head.html" . .Title }} {{ if .Store.Get "hasMermaid" }}
<script type="module">
import mermaid from "https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.esm.min.mjs";
mermaid.initialize({startOnLoad: true});
</script>
{{ end }}
</head>
<body>
<!-- Code that all your templates share, like a header -->
{{ partialCached "header.html" . .Page}} {{.Content}}
<!-- More shared code, perhaps a footer but that can be overridden if need be in -->
{{ partialCached "footer.html" . .Page}}
</body>
</html>

14
layouts/index.html Normal file
View file

@ -0,0 +1,14 @@
<html>
<head>
<link rel="stylesheet" href="http://127.0.0.1:1313/the-monospace-web/index.css" />
</head>
<body>
{{ partialCached "header.html" . }}
<main>Look I know it's a kinda shit homepage, I'm working on it.</main>
{{ partialCached "footer.html" . }}
</body>
</html>

View file

@ -0,0 +1,82 @@
<footer style="display: flex; flex-direction: column">
<hr />
<div class="h-card" style="display: inline; margin: auto">
This work &copy; {{ time.Now.Format "2006" }} by
<!-- Author Info -->
<a href="https://argentumcation.com/links" rel="author">
<span class="p-nickname">ArgentumCation</span>
(<span class="p-name">Mira</span>)
</a>
<!-- Author Metadata -->
<div style="display: none">
<span class="p-honorific-suffix">Kendo 3-Kyu Emeritus</span>
<img style="float: left; margin-right: 4px" src="https://argentumcation.com/links/images/mira.jpg"
alt="photo of Mira" class="u-photo" />
<a class="u-email" href="mailto:mira@ミラ.コム">mira@ミラ.コム</a>
<span class="dt-bday">20XX-04-02</span>
<div>
<link rel="pgpkey" type="application/pgp-keys" title="ArgentumCation's PGP Key"
href="https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xdd8583a510deb949714ed847430c50ca90f98bbe" />
<pre class="u-key">
-----BEGIN PGP PUBLIC KEY BLOCK-----
xjMEZIjWHxYJKwYBBAHaRw8BAQdAtI4ucxI1PHAJNSIj2TITGcW4BWK2muk3sFfh
<footer>Footer</footer>
cyTHvrXNMkFyZ2VudHVtQ2F0aW9uIDxhcmdlbnR1bWNhdGlvbkBhcmdlbnR1bWNh
dGlvbi5jb20+wo4EExYKADYFCwkIBwIGFQoJCAsCBRYCAwEAAh4EFiEE3YWDpRDe
uUlxTthHQwxQypD5i74FAmSOOF8CGwEACgkQQwxQypD5i74vTwD/Y3T/Jet8zvAK
8MhZvEG1H+M/eQFZaAzvSA2FOWmTRo8A+wbyQCbun9Bb5fCZ4/kxHcaGzVgUJSst
4j/RMrWUXdIMwo4EExYKADYCGyMWIQTdhYOlEN65SXFO2EdDDFDKkPmLvgUCZI35
+gULCQgHAgYVCgkICwIFFgIDAQACHgQACgkQQwxQypD5i747swEA/ugdrs+omBA1
2qNqysT9QPqcPnVjSSvYVpVYjNBVvNcBAIDoQJ4T3IEv353iY6oaZfRwoHeFNYWr
xJwaGReiIDQFwpMEExYKADsWIQTdhYOlEN65SXFO2EdDDFDKkPmLvgUCZIjWHwIb
IwULCQgHAgIiAgYVCgkICwIEFgIDAQIeBwIXgAAKCRBDDFDKkPmLvl3wAQCPR0mt
8omFlGLTYi8XJqGu/ha+wGeGrNCh7LixYHfHkwD+Im2LqQkcNXLAJPDK1vGGOh0A
D+bSiGT+5Ly40/gkPw7OOARkiNYfEgorBgEEAZdVAQUBAQdAFfcK11UfBm4IPs9w
i7YrZ78OxMRm4wf0qdSCQ7vQTDoDAQgHwn4EGBYKACYCGwwWIQTdhYOlEN65SXFO
2EdDDFDKkPmLvgUCZI442gUJAeaWOwAKCRBDDFDKkPmLvixuAP9xx1LE2u2qK85v
w8tX0Xq0CYMcoJHlCkr5QClBd5v9MwD/anBykPYGnZaMXpqwAEFeY/YkhGWgThkK
zzjj1FvXywDCeAQYFgoAIBYhBN2Fg6UQ3rlJcU7YR0MMUMqQ+Yu+BQJkiNYfAhsM
AAoJEEMMUMqQ+Yu+mwsBAJV56nL80qeusyuAGrwX+Olgto8tXpmyCVFp825lJRPr
AP93N28QeqAnPssteJrWMUN/vrPC8WMebSkvu9jj252dAc4zBGSOOGYWCSsGAQQB
2kcPAQEHQOY3LSWsg9XK1rI7r2E+1tmX3Vi7W5opwkvqO6AsduZRwsA1BBgWCgAm
FiEE3YWDpRDeuUlxTthHQwxQypD5i74FAmSOOGYCGyIFCQHhM4AAgQkQQwxQypD5
i752IAQZFgoAHRYhBJg7grqI4mDBitvwbRVrumZ8pbPPBQJkjjhmAAoJEBVrumZ8
pbPPVE8A/0PuUBsaR5QJP7CjiRB0oGmFs4Q/xTLV+PFoUNQNPNlGAQDxJNx844Bs
spKDee99cgh6KMzRApNjNAmDBkKezFilBw2HAQDATl1ZehPrkQA1H6ytL0mELqQY
lJj4vTGSsBtTxmZ2NgD9HBjGd6OEAjJR7pAmF+720JzDHgtELnFI1E+/5JkNyAw= =staE
-----END PGP PUBLIC KEY BLOCK-----
</pre>
</div>
<span class="p-gender-identity">Who even knows anymore? (She/They)</span>
<span class="u-sound"><!-- Yes I know the spec says sound file but fuck you -->miɹʌ</span>
</div>
<wbr />
is licensed under
<!-- License -->
<a href="http://creativecommons.org/licenses/by-nc-sa/4.0/" rel="license">CC BY-NC-SA 4.0</a>
</div>
<p style="margin: auto">
<a href="https://fediring.net/previous?host=argentumcation.com">&lt;-</a>
<a href="https://fediring.net/">Fediring</a>
<a href="https://fediring.net/next?host=argentumcation.com">-&gt;</a>
</p>
<!-- <marquee>
{
buttons.map((button) => {
const image = (
<Image class="marquee-button" src={`/buttons/${button.image}`} alt={button.name} width={88} height={31} />
);
return !button.link?.startsWith("javascript:") ? (
<a href={button.link ?? undefined} title={button.name} target="_blank">
{image}
</a>
) : (
<button title={button.name} onclick={button.link}>
{image}
</button>
);
})
}
</marquee>-->
</footer>

View file

@ -0,0 +1,11 @@
{{ if .Param "math" }} {{ partialCached "math.html" .}} {{ end }}
<meta charset="utf-8" />
<link rel="stylesheet" href="/the-monospace-web/reset.css" />
<link rel="stylesheet" href="/the-monospace-web/index.css" />
<link rel="stylesheet" href="/css/syntax.css" />
<link rel="stylesheet" href="/css/overrides.css" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/all.min.css"
integrity="sha512-Evv84Mr4kqVGRNSgIGL/F/aIDqQb7xQ2vcrdIwxfjThSH8CSR7PBEakCr51Ck+w+/U6swU2Im1vVX0SVk9ABhg=="
crossorigin="anonymous" referrerpolicy="no-referrer" />
<title>{{ block "title" . }} {{ .Title }} {{ end }}</title>

View file

@ -0,0 +1,23 @@
<table class="header">
<tr>
<td colspan="2" rowspan="1" class="width-auto">
<h1 class="title">{{.Page.Title}}</h1>
</td>
<td class="width-min"><a href="/links">Links</a></td>
<td class="width-min">RSS</td>
</tr>
<tr>
<th class="width-min">Author</th>
<td class="width-auto">
<a href="https://argentumcation.com"><cite>ArgentumCation</cite></a>
</td>
<td class="width-auto"><a href="/posts">Posts</a></td>
<td class="width-auto"><a href="/lab-notes">Notes</a></td>
<tr>
<th class="width-min">License</th>
<td>CC-BY-NC-SA 4.0+</td>
<th>Updated</th>
<td class="width-min"><time style="white-space: pre">{{.Page.Date.Format "2006-01-02"}}</time></td>
</tr>
</tr>
</table>

View file

@ -0,0 +1,12 @@
<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js"></script>
<script>
MathJax = {
tex: {
displayMath: [
["\\[", "\\]"],
["$$", "$$"],
], // block
inlineMath: [["\\(", "\\)"]], // inline
},
};
</script>

View file

@ -0,0 +1,24 @@
<table class="palette">
<tr>
<td style="background-color: var(--background)">&nbsp;</td>
<td style="background-color: var(--black)">&nbsp;</td>
<td style="background-color: var(--red)">&nbsp;</td>
<td style="background-color: var(--green)">&nbsp;</td>
<td style="background-color: var(--yellow)">&nbsp;</td>
<td style="background-color: var(--blue)">&nbsp;</td>
<td style="background-color: var(--magenta)">&nbsp;</td>
<td style="background-color: var(--cyan)">&nbsp;</td>
<td style="background-color: var(--white)">&nbsp;</td>
</tr>
<tr>
<td style="background-color: var(--foreground)">&nbsp;</td>
<td style="background-color: var(--bright-black)">&nbsp;</td>
<td style="background-color: var(--bright-red)">&nbsp;</td>
<td style="background-color: var(--bright-green)">&nbsp;</td>
<td style="background-color: var(--bright-yellow)">&nbsp;</td>
<td style="background-color: var(--bright-blue)">&nbsp;</td>
<td style="background-color: var(--bright-magenta)">&nbsp;</td>
<td style="background-color: var(--bright-cyan)">&nbsp;</td>
<td style="background-color: var(--bright-white)">&nbsp;</td>
</tr>
</table>

118
static/css/overrides.css Normal file
View file

@ -0,0 +1,118 @@
:root {
font-family: "nasin-nanpa", "TX-02";
--text-color: #ebf6ff;
--text-color-alt: #c1c7db;
--background-color: #010206;
--background-color-alt: #1e1b30;
--link-color: #2a97b1;
--line-height: 1.5rem;
--page-width: 100ch;
}
@media (prefers-color-scheme: light) {
:root {
--text-color: #1e1b30;
--text-color-alt: #010206;
--background-color: #ebf6ff;
--background-color-alt: #c1c7db;
}
}
a:link,
a:visited {
color: var(--link-color);
}
body {
max-width: calc(min(var(--page-width), round(down, 100%, 1ch)));
}
*+* {
margin-top: 0;
}
.alert {
font-weight: bold;
}
.alert-todo td {
background-color: var(--base0b);
color: var(--background-color);
border-color: var(--base0b);
}
.alert-tip td {
background-color: var(--base0c);
border-color: var(--base0c);
color: var(--background-color);
}
.alert-note td {
background-color: var(--base0c);
border-color: var(--base0c);
color: var(--background-color);
}
.alert-quote td {
background-color: var(--base01);
border-color: var(--base01);
}
p mjx-container {
background-color: rgba(from var(--background-color-alt) r g b / 0.75);
}
.about-me {
width: min-content;
margin: auto;
td {
text-align: center;
line-height: 1rem;
h1 {
line-height: 1rem;
font-size: 1rem;
margin: 0;
}
}
}
.socials {
--social-icon-size: 4ch;
--social-name-size: 12ch;
th {
text-align: center;
height: 1em;
}
.social-icon {
width: var(--social-icon-size);
min-width: var(--social-icon-size);
}
.social-name {
width: var(--social-name-size);
min-width: var(--social-name-size);
max-width: var(--social-name-size);
}
.social-link {
overflow: hidden;
text-overflow: ellipsis;
width: calc(var(--page-width) / 2 - var(--social-icon-size) - var(--social-name-size) - 2ch);
max-width: calc(var(--page-width) / 2 - var(--social-icon-size) - var(--social-name-size) - 2ch);
}
}
.social-container {
display: grid;
grid-template-columns: repeat(2, 1fr);
grid-template-rows: repeat(3, 1fr);
}
.socials-text {
text-align: center;
display: flex;
}

458
static/css/syntax.css Normal file
View file

@ -0,0 +1,458 @@
/* Generated using: hugo gen chromastyles --style=base16-snazzy */
:root {
--base01: #1e1b30;
--base02: #74689f;
--base03: #8781ab;
--base04: #9a9ab8;
--base05: #c1c7db;
--base06: #ebf6ff;
--base07: #fbfbff;
--base08: #ed8096;
--base09: #eaa950;
--base0a: #c1b254;
--base0b: #a0dc9b;
--base0c: #2a97b1;
--base0d: #5bcefa;
--base0e: #ee5e95;
--base0f: #a34a78;
}
@media (prefers-color-scheme: light) {
:root {
--base01: #fbfbff;
--base02: #ebf6ff;
--base03: #9a9ab8;
--base04: #c1c7db;
--base05: #8781ab;
--base06: #74689f;
--base07: #1e1b30;
--base08: #a04558;
--base09: #eaa950;
--base0a: #ad9d3d;
--base0b: #76aa73;
--base0c: #5bcefa;
--base0d: #2a97b1;
--base0e: #ae3a78;
--base0f: #ee5e95;
}
}
/* Background */
.bg {
color: var(--base05);
background-color: var(--base01);
}
/* PreWrapper */
.chroma {
color: var(--base05);
background-color: var(--base01);
overflow: scroll;
}
.chroma span {
margin-top: 0;
}
/* Other */
.chroma .x {}
/* Error */
.chroma .err {
color: var(--base08);
}
/* CodeLine */
.chroma .cl {}
/* LineLink */
.chroma .lnlinks {
outline: none;
text-decoration: none;
color: inherit;
}
/* LineTableTD */
.chroma .lntd {
vertical-align: top;
padding: 0;
margin: 0;
border: 0;
}
/* LineTable */
.chroma .lntable {
border-spacing: 0;
padding: 0;
margin: 0;
border: 0;
}
/* LineHighlight */
.chroma .hl {
background-color: #3d3f4a;
}
/* LineNumbersTable */
.chroma .lnt {
white-space: pre;
-webkit-user-select: none;
user-select: none;
margin-right: 0.4em;
padding: 0 0.4em 0 0.4em;
color: #7f7f7f;
}
/* LineNumbers */
.chroma .ln {
white-space: pre;
-webkit-user-select: none;
user-select: none;
margin-right: 0.4em;
padding: 0 0.4em 0 0.4em;
color: #7f7f7f;
}
/* Line */
.chroma .line {
display: flex;
}
/* Keyword */
.chroma .k {
color: var(--base0e);
}
/* KeywordConstant */
.chroma .kc {
color: var(--base0e);
}
/* KeywordDeclaration */
.chroma .kd {
color: var(--base08);
}
/* KeywordNamespace */
.chroma .kn {
color: var(--base0e);
}
/* KeywordPseudo */
.chroma .kp {
color: var(--base0e);
}
/* KeywordReserved */
.chroma .kr {
color: var(--base0e);
}
/* KeywordType */
.chroma .kt {
color: var(--base0c);
}
/* Name */
.chroma .n {}
/* NameAttribute */
.chroma .na {
color: var(--base0d);
}
/* NameBuiltin */
.chroma .nb {
color: var(--base08);
}
/* NameBuiltinPseudo */
.chroma .bp {}
/* NameClass */
.chroma .nc {
color: var(--base0a);
}
/* NameConstant */
.chroma .no {
color: var(--base09);
}
/* NameDecorator */
.chroma .nd {
color: var(--base09);
}
/* NameEntity */
.chroma .ni {}
/* NameException */
.chroma .ne {}
/* NameFunction */
.chroma .nf {
color: var(--base0d);
}
/* NameFunctionMagic */
.chroma .fm {}
/* NameLabel */
.chroma .nl {
color: var(--base08);
}
/* NameNamespace */
.chroma .nn {}
/* NameOther */
.chroma .nx {}
/* NameProperty */
.chroma .py {}
/* NameTag */
.chroma .nt {
color: var(--base0e);
}
/* NameVariable */
.chroma .nv {
color: var(--base08);
}
/* NameVariableClass */
.chroma .vc {
color: var(--base08);
}
/* NameVariableGlobal */
.chroma .vg {
color: var(--base08);
}
/* NameVariableInstance */
.chroma .vi {
color: var(--base08);
}
/* NameVariableMagic */
.chroma .vm {}
/* Literal */
.chroma .l {}
/* LiteralDate */
.chroma .ld {}
/* LiteralString */
.chroma .s {
color: var(--base0b);
}
/* LiteralStringAffix */
.chroma .sa {
color: var(--base0b);
}
/* LiteralStringBacktick */
.chroma .sb {
color: var(--base0b);
}
/* LiteralStringChar */
.chroma .sc {
color: var(--base0b);
}
/* LiteralStringDelimiter */
.chroma .dl {
color: var(--base0b);
}
/* LiteralStringDoc */
.chroma .sd {
color: var(--base0b);
}
/* LiteralStringDouble */
.chroma .s2 {
color: var(--base0b);
}
/* LiteralStringEscape */
.chroma .se {
color: var(--base0b);
}
/* LiteralStringHeredoc */
.chroma .sh {
color: var(--base0b);
}
/* LiteralStringInterpol */
.chroma .si {
color: var(--base0b);
}
/* LiteralStringOther */
.chroma .sx {
color: var(--base0b);
}
/* LiteralStringRegex */
.chroma .sr {
color: var(--base0b);
}
/* LiteralStringSingle */
.chroma .s1 {
color: var(--base0b);
}
/* LiteralStringSymbol */
.chroma .ss {
color: var(--base0b);
}
/* LiteralNumber */
.chroma .m {
color: var(--base09);
}
/* LiteralNumberBin */
.chroma .mb {
color: var(--base09);
}
/* LiteralNumberFloat */
.chroma .mf {
color: var(--base09);
}
/* LiteralNumberHex */
.chroma .mh {
color: var(--base09);
}
/* LiteralNumberInteger */
.chroma .mi {
color: var(--base09);
}
/* LiteralNumberIntegerLong */
.chroma .il {
color: var(--base09);
}
/* LiteralNumberOct */
.chroma .mo {
color: var(--base09);
}
/* Operator */
.chroma .o {
color: var(--base0e);
}
/* OperatorWord */
.chroma .ow {
color: var(--base0e);
}
/* Punctuation */
.chroma .p {}
/* Comment */
.chroma .c {
color: var(--base03);
}
/* CommentHashbang */
.chroma .ch {
color: var(--base03);
}
/* CommentMultiline */
.chroma .cm {
color: var(--base03);
}
/* CommentSingle */
.chroma .c1 {
color: var(--base03);
}
/* CommentSpecial */
.chroma .cs {
color: var(--base03);
}
/* CommentPreproc */
.chroma .cp {
color: var(--base03);
}
/* CommentPreprocFile */
.chroma .cpf {
color: var(--base03);
}
/* Generic */
.chroma .g {}
/* GenericDeleted */
.chroma .gd {
color: var(--base08);
}
/* GenericEmph */
.chroma .ge {
text-decoration: underline;
}
/* GenericError */
.chroma .gr {
color: var(--base08);
}
/* GenericHeading */
.chroma .gh {
font-weight: bold;
}
/* GenericInserted */
.chroma .gi {
font-weight: bold;
}
/* GenericOutput */
.chroma .go {
color: var(--base02);
}
/* GenericPrompt */
.chroma .gp {}
/* GenericStrong */
.chroma .gs {
font-style: italic;
}
/* GenericSubheading */
.chroma .gu {
font-weight: bold;
}
/* GenericTraceback */
.chroma .gt {}
/* GenericUnderline */
.chroma .gl {
text-decoration: underline;
}
/* TextWhitespace */
.chroma .w {}

2
static/favicon.svg Normal file
View file

@ -0,0 +1,2 @@
<!-- Blobhaj_Knife - Copyright Heatherhorns CC-BY-SA 4.0 -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 800 800"><defs><style>.cls-1{fill:none;}.cls-2{clip-path:url(#clip-path);}.cls-3{fill:#ef8f21;}.cls-4{fill:#cad2d8;}.cls-5{fill:#676733;}.cls-6{fill:#54899b;}.cls-7{clip-path:url(#clip-path-2);}.cls-8{fill:#e5e6e6;}.cls-9{fill:#2f152f;}</style><clipPath id="clip-path"><path class="cls-1" d="M769.76-86.15c-3.77,19.84-26.91,28.46-46.61,33A1091.79,1091.79,0,0,1,337.61-35.5c-52.68-7-111.43-22.47-136.92-69.1-14.61-26.71-15.1-58.56-15.82-89-2.19-92.69-6.75-163.22-19.53-255-1.33-9.51,47.58-81.78,54.86-88.94,64.35-63.38,122.53-63.32,212.4-54.3,85.43,8.58,171.92,35.77,234.93,94.1,69.23,64.08,102.71,158.64,116.23,252,9.31,64.23,16.54,102.36-14,159.62"/></clipPath><clipPath id="clip-path-2"><path class="cls-1" d="M586,739.12C610.16,385.6,107.72,205.45,58.38,467.56c-5.92,63.67-30.55,189.69-35,233.09C22.3,711,29.61,718.26,37.3,725.25c99.38,86.83,466.18,43.62,548.73,13.87"/></clipPath></defs><g id="Prior_to_November" data-name="Prior to November"><g id="hold_asparagus" data-name="hold asparagus"><g id="Layer_171" data-name="Layer 171"><g class="cls-2"><path class="cls-3" d="M272.41-20.07c149.46-37.47,127.48-218.16,129.74-335,53.44-215.73,301-221.58,403.07-37,369.68,571.33-509.42,600.39-532.81,372"/></g></g></g></g><g id="November_Orders" data-name="November Orders"><g id="Knife"><path class="cls-4" d="M528.89,472.5c36.84-152.07,79.14-301,125-450.59l5.66-3.54c3.9-.89,5.1-.1,8.85,1.31C721.19,39.62,737.51,87,756.62,140.57c43,120.61,16.84,258.67-43.55,371.58Z"/><path class="cls-5" d="M596.2,454.62c10.56,7,25.39,25.71,31.19,33.31a9.34,9.34,0,0,1,1.78,7.24c-8.34,48.22-17.9,100.48-26.18,148.47-1,6-2.19,12.27-5.54,16.81-5.61,7.62-15.13,7.68-23.44,7.16-13.5-.84-27.2-1.73-40-7.1s-24.68-15.9-29.93-31.16c-4.93-14.31-3.46-30.66-1.45-46.07a774.23,774.23,0,0,1,33.26-145.2,9.32,9.32,0,0,1,11.66-5.94C558.74,435.67,578.66,443,596.2,454.62Z"/><g id="Layer_159" data-name="Layer 159"><path class="cls-6" d="M582,736.84C606.14,383.31,103.7,203.17,54.36,465.28,48.44,529,23.81,655,19.35,698.37,18.28,708.7,25.6,716,33.28,723,132.66,809.8,499.46,766.59,582,736.84"/><g class="cls-7"><path class="cls-8" d="M138.06,791.15c-133.41,97,262.33-16.87,427.26-16.87s-58-475.82-320.53-402c-16.42,4.61-51.66,26.59-56.88,74.18-4.63,42.25,12.64,94.33,18.23,142.24,5,43.05-1.63,83.26-4.11,101C196.47,729.27,164.45,772,138.06,791.15Z"/></g><path class="cls-9" d="M117,556.16c5-3,17.66,3.18,23,5.58,25.94,11.6,44.94,40.4,39.71,68.32a38.84,38.84,0,0,1-4.46,12.54A40.42,40.42,0,0,1,165,653.83c-18.32,14.17-45.12,16.32-65.47,5.25S66.4,624.33,68.36,601.25c1.22-14.28,8-28.33,19.42-37s27.65-11.14,40.59-5"/><path class="cls-9" d="M451.8,483.54a382.27,382.27,0,0,0,3.89,51.14l-.42-3.14a13.84,13.84,0,0,1,0,3.28l.42-3.14a12.79,12.79,0,0,1-.83,3l1.19-2.82a11.46,11.46,0,0,1-1.32,2.24l1.85-2.39a10.92,10.92,0,0,1-1.78,1.75l2.39-1.85a9.38,9.38,0,0,1-1.85,1l2.82-1.19a8.69,8.69,0,0,1-1.75.47l3.14-.42a8.75,8.75,0,0,1-2.17,0l3.14.42c-2-.33-3.95-.88-5.9-1.33l-11.82-2.73-11.35-2.62c-2.79-.65-5.59-1.38-8.41-1.8a45.58,45.58,0,0,0-5.7-.63,30.88,30.88,0,0,0-5.91.62,12.71,12.71,0,0,0-2.54.74,31,31,0,0,0-5,2.34,62.92,62.92,0,0,0-7.15,5.47q-2.26,1.89-4.52,3.79L373.5,551.39c-4.4,3.68-8.77,7.38-13.19,11l-.45.37,2.39-1.85a9.27,9.27,0,0,1-2,1.15l2.82-1.19a8.79,8.79,0,0,1-1.81.48l3.14-.42a8.51,8.51,0,0,1-2.14,0l3.14.42a9.38,9.38,0,0,1-1.78-.48l2.83,1.19a9.44,9.44,0,0,1-1.93-1.1l2.39,1.85a10.49,10.49,0,0,1-1.67-1.66l1.85,2.39a63,63,0,0,1-3.89-6.52l-7.9-13.66-18.1-31.31L333,504.85a11.82,11.82,0,0,0-16.17-4.24,11.94,11.94,0,0,0-5.43,7.06,12.38,12.38,0,0,0,1.19,9.11l10.11,17.47L339.88,564l5.27,9.11c.33.58.65,1.16,1,1.72a20.46,20.46,0,0,0,8.36,7.72,21.8,21.8,0,0,0,7.89,2.12,18.82,18.82,0,0,0,5.74-.54c5-1.12,8.86-4.92,12.69-8.13l12-10,20.62-17.26c.82-.68,1.64-1.37,2.48-2l-2.39,1.84a22.26,22.26,0,0,1,4.26-2.64L415,547a13.34,13.34,0,0,1,3.41-.92l-3.14.42a20,20,0,0,1,4.64.12l-3.15-.42c2.91.43,5.79,1.19,8.66,1.85l11.84,2.73,11.89,2.75c3.11.71,6.63,1.83,9.8,1.63a21,21,0,0,0,16.75-10,21.44,21.44,0,0,0,3-8.81,19.47,19.47,0,0,0,.29-4.1c-.17-2.12-.56-4.22-.84-6.32l.42,3.14a359.9,359.9,0,0,1-3.13-45.57,12.25,12.25,0,0,0-3.46-8.36,12,12,0,0,0-8.36-3.46c-6.38.28-11.85,5.19-11.82,11.82Z"/></g></g></g></svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

@ -0,0 +1 @@
Subproject commit 90df20cd6a06a5bb59d5120a94de73515fc4a55a