initial commit
21
.gitignore
vendored
Normal 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
|
@ -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
|
@ -0,0 +1,5 @@
|
||||||
|
+++
|
||||||
|
date = '{{ .Date }}'
|
||||||
|
draft = true
|
||||||
|
title = '{{ replace .File.ContentBaseName "-" " " | title }}'
|
||||||
|
+++
|
59
content/lab-notes/9p.md
Executable 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
|
68
content/lab-notes/Poketch.md
Normal 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
|
@ -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.
|
65
content/lab-notes/miraidon (airplay server).md
Normal 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
|
@ -0,0 +1,2 @@
|
||||||
|
https://file-extensions.com/docs/pkpasss
|
||||||
|
https://developer.apple.com/documentation/walletpasses
|
74
content/lab-notes/tiktok.md
Normal 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
|
@ -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
|
@ -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
|
@ -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 |
|
16
content/posts/Rack Shitty.md
Normal 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 | - 2C<br>- 2A<br>- <br>- | | |
|
12
content/posts/Wolfgrads bot.md
Normal 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
|
|
@ -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
|
@ -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
|
5
content/posts/eigencode.md
Normal 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
|
@ -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
|
140
content/posts/hypercomplex-interest.md
Normal 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
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
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\%\)
|
||||||
|

|
||||||
|
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?
|
||||||
|
|
||||||
|

|
||||||
|
Introducing: the Hyperbola
|
||||||
|

|
||||||
|
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$$
|
BIN
content/posts/images/Pasted image 20240926123001.png
Normal file
After Width: | Height: | Size: 71 KiB |
BIN
content/posts/images/Pasted image 20240926141426.png
Normal file
After Width: | Height: | Size: 46 KiB |
BIN
content/posts/images/Pasted image 20240926153053.png
Normal file
After Width: | Height: | Size: 46 KiB |
BIN
content/posts/images/Pasted image 20240926153121.png
Normal file
After Width: | Height: | Size: 58 KiB |
BIN
content/posts/images/Pasted image 20240926154035.png
Normal file
After Width: | Height: | Size: 82 KiB |
BIN
content/posts/images/Pasted image 20240926154141.png
Normal file
After Width: | Height: | Size: 82 KiB |
BIN
content/posts/images/Pasted image 20240926154245.png
Normal file
After Width: | Height: | Size: 59 KiB |
BIN
content/posts/images/Pasted image 20240926154326.png
Normal file
After Width: | Height: | Size: 47 KiB |
BIN
content/posts/images/image-7.png
Normal file
After Width: | Height: | Size: 120 KiB |
BIN
content/posts/images/minecraft-srv-01.png
Normal file
After Width: | Height: | Size: 16 KiB |
142
content/posts/monogatari.md
Normal 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
|
@ -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
|
@ -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
|
39
content/posts/olc-codes.md
Normal 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
|
@ -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
|
@ -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
|
@ -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
|
||||||
|
|
||||||
|
|
14
layouts/_default/_markup/render-blockquote.html
Normal 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>
|
4
layouts/_default/_markup/render-codeblock-mermaid.html
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
<pre class="mermaid">
|
||||||
|
{{- .Inner | htmlEscape | safeHTML }}
|
||||||
|
</pre>
|
||||||
|
{{ .Page.Store.Set "hasMermaid" true }}
|
23
layouts/_default/list.html
Normal 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>
|
20
layouts/_default/single.html
Normal 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
|
@ -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>
|
82
layouts/partials/footer.html
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
<footer style="display: flex; flex-direction: column">
|
||||||
|
<hr />
|
||||||
|
<div class="h-card" style="display: inline; margin: auto">
|
||||||
|
This work © {{ 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"><-</a>
|
||||||
|
<a href="https://fediring.net/">Fediring</a>
|
||||||
|
<a href="https://fediring.net/next?host=argentumcation.com">-></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>
|
11
layouts/partials/head.html
Normal 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>
|
23
layouts/partials/header.html
Normal 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>
|
12
layouts/partials/math.html
Normal 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>
|
24
layouts/partials/palette.html
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
<table class="palette">
|
||||||
|
<tr>
|
||||||
|
<td style="background-color: var(--background)"> </td>
|
||||||
|
<td style="background-color: var(--black)"> </td>
|
||||||
|
<td style="background-color: var(--red)"> </td>
|
||||||
|
<td style="background-color: var(--green)"> </td>
|
||||||
|
<td style="background-color: var(--yellow)"> </td>
|
||||||
|
<td style="background-color: var(--blue)"> </td>
|
||||||
|
<td style="background-color: var(--magenta)"> </td>
|
||||||
|
<td style="background-color: var(--cyan)"> </td>
|
||||||
|
<td style="background-color: var(--white)"> </td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style="background-color: var(--foreground)"> </td>
|
||||||
|
<td style="background-color: var(--bright-black)"> </td>
|
||||||
|
<td style="background-color: var(--bright-red)"> </td>
|
||||||
|
<td style="background-color: var(--bright-green)"> </td>
|
||||||
|
<td style="background-color: var(--bright-yellow)"> </td>
|
||||||
|
<td style="background-color: var(--bright-blue)"> </td>
|
||||||
|
<td style="background-color: var(--bright-magenta)"> </td>
|
||||||
|
<td style="background-color: var(--bright-cyan)"> </td>
|
||||||
|
<td style="background-color: var(--bright-white)"> </td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
118
static/css/overrides.css
Normal 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
|
@ -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
|
@ -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 |
1
static/the-monospace-web
Submodule
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 90df20cd6a06a5bb59d5120a94de73515fc4a55a
|