Compare commits

...

45 Commits

Author SHA1 Message Date
nat
d57e14101c add thought; fix figure css 2025-03-25 19:31:31 -07:00
9f3a6984e4 add homepage statement 2025-02-18 12:11:19 -08:00
2dff6ab8d4 Merge branch 'main' of https://git.natalieee.net/nat/webbed-site 2025-02-01 14:57:42 -08:00
1ff5f94bd6 add misty's 88x31; update syntax highlighting styles 2025-02-01 14:56:04 -08:00
1deaac37cf update syntax highlighting to include classes for html 2025-01-11 20:26:52 -08:00
3b901e297d add servfail.network 88x31 2024-12-04 03:40:49 -08:00
28e837cf6a fix unclosed metadata comment in thought 2024-11-29 01:25:05 -08:00
46c24d03c8 add script to add 88x31s of all fedi accounts it follows that implement .well-known/button.json 2024-11-25 01:20:14 -08:00
37fe11059a add 88x31s of sites from things it follows on mastodon 2024-11-24 23:59:55 -08:00
613c53dee6 add .well-known/button.json 2024-11-20 14:40:11 -08:00
7c22b4aba8 update changelog 2024-11-13 16:27:50 -08:00
304789af94 add regular png 88x31 2024-11-12 02:34:59 -08:00
83aca8b85b add thought 2024-11-05 15:24:31 -08:00
165cf69bcb amend category tag on last thought 2024-11-03 02:20:26 -08:00
8e69079b74 (finally) add thought 2024-11-03 02:18:52 -08:00
42834bdfd1 block ai scrapers in robots.txt 2024-11-03 01:58:51 -08:00
ed878fe922 improve accessibility, vaguely 2024-11-01 14:03:01 -07:00
f6a8c62104 get around to adding its vcard 2024-10-30 04:51:47 -07:00
61bc2a0ad1 minor css changes 2024-10-30 03:51:42 -07:00
3a05b09a3b 'replace \' with " in category names 2024-10-26 04:09:27 -07:00
30db8e3920 update thought metadata 2024-10-26 03:53:03 -07:00
d31af30ec3 fix formatting error in last thought 2024-10-25 00:50:30 -07:00
0ce6cf4d6c add thought 2024-10-25 00:37:26 -07:00
69870de6ec add style for blockquotes; add thought 2024-10-23 10:44:35 -07:00
d8b6d38414 add thought 2024-10-21 05:50:24 -07:00
cc0cab843a missed one 2024-10-21 04:59:50 -07:00
803c95892b update changelog 2024-10-20 22:05:59 -07:00
2514ede93c update site-info 2024-10-20 00:31:24 -07:00
553436b27c remove name 2024-10-19 22:18:45 -07:00
4db86fd144 add thought 2024-10-19 01:06:45 -07:00
nat
507f7d6d2f Merge pull request 'update gramatical personhood of its pronouns to match its internal monologue' (#4) from 3pp into main 2024-10-08 21:42:11 -07:00
6290968666 missed a few 2024-10-08 20:48:20 -07:00
38437203d7 initial 2024-10-08 17:35:24 -07:00
3ac80c39c8 update changelog; add thought 2024-10-06 23:48:45 -07:00
d66d449d60 add optional name argument to make-link script 2024-10-06 06:13:48 -07:00
a6e4056d57 add natalie sighting; update natalie-info.html 2024-10-04 23:26:14 -07:00
1895e0aca3 fix thing cinnabar was complaining about 2024-10-01 19:56:21 -07:00
e64df089f6 add natalie sighting 2024-09-27 21:49:31 -07:00
7b7273c0fe fix footnote formatting 2024-09-20 05:23:06 -07:00
a3c35fc2af add thought 2024-09-20 05:20:28 -07:00
dcc2d8f67f update changelog 2024-09-14 04:38:08 -07:00
48fd08dad7 add support for footnotes 2024-09-14 03:49:33 -07:00
6cf11513d6 restore blanchard.html 2024-09-14 02:23:42 -07:00
00fcf81381 Merge branch 'main' of https://git.natalieee.net/nat/webbed-site 2024-09-12 10:00:47 -07:00
a2323f29e4 add thought; update css to support syntax highlighting 2024-09-12 09:58:20 -07:00
67 changed files with 1039 additions and 157 deletions

1
.gitignore vendored
View File

@ -12,3 +12,4 @@ dir_index.html
html/*
!html/thoughts/
!html/blog
!html/blanchard.html

13
.well-known/button.json Normal file
View File

@ -0,0 +1,13 @@
{
"$schema": "https://codeberg.org/LunarEclipse/well-known-button/raw/branch/main/drafts/button-2024-06.schema.json",
"default": "natalieee.net",
"buttons": [
{
"id": "natalieee.net",
"uri": "https://natalieee.net/files/natalieee.net.png",
"alt": "natalieee.net 88x31",
"link": "https://natalieee.net",
"sha256": "1ff45434606ed76769bcc0b4f5a6bb8f86e9e1ab07550a48eb6977b3cf285963"
}
]
}

View File

@ -1,25 +1,25 @@
2024-02-18: Cleaned up header css, added changelog.
2024-02-24: Made dir_index.html slightly less cursed server side
2024-04-10: Fix albert hacking my website by rewriting the entire backend (lol)
2024-04-12: Add "natalie-sightings.html"
2024-04-14: Add "cool-sites.html", update home.html to actually be html compliant, updated comment system, add 88x31 collection, minor modification to "natalie-info.html".
2024-04-25: Move hosting to server taken from school basement, (somewhat notable)
2024-04-26: Updated server-migration.html, site-info.html.
2024-05-03: Added link to blog page in home.html, added random statement to home page upon each load
2024-05-11: Rewrote the webserver code, again. Fixed a few things in home.html.
2024-02-18: cleaned up header css, added changelog.
2024-02-24: made dir_index.html slightly less cursed server side
2024-04-10: fix unnamed friend entity hacking its website by rewriting the entire backend (lol)
2024-04-12: add "natalie-sightings.html"
2024-04-14: add "cool-sites.html", update home.html to actually be html compliant, updated comment system, add 88x31 collection, minor modification to "natalie-info.html".
2024-04-25: move hosting to server taken from school basement, (somewhat notable)
2024-04-26: updated server-migration.html, site-info.html.
2024-05-03: added link to blog page in home.html, added random statement to home page upon each load
2024-05-11: rewrote the webserver code, again. Fixed a few things in home.html.
2024-05-19: update theme to be in compliance with new laptop. depricate laptop page
2024-07-06: Now supports http and https. This creates a race condition in theory. Don't care
2024-07-06: now supports http and https. this creates a race condition in theory. don't care
2024-07-09: updated natalie-info.html at the request of cinnabar, who was annoyed at the small number of incorrect things
2024-07-18: create & add header to all pages, changes to css so as to scale with vw
2024-07-24: Append to list of interesting sights, add page complaining about discord
2024-07-24: append to list of interesting sights, add page complaining about discord
2024-07-24: add thoughts page in /html/, update natalie info page
2024-07-24: updated wording in site-info.html, add /stats/ routes, update home.html to make filetree hidden by default because it is big
2024-07-25: rewrite css because winter told me to. Now has dark mode based on a media query.
2024-07-25: rewrite css because winter told it to. now has dark mode based on a media query.
2024-07-25: add subdomain proxying with nginx.
2024-07-26: add <a href='https://git.natalieee.net'>git.natalieee.net</a>
2024-07-26: update site-info.html
2024-07-26: I have a dns server now. oops. there go my sleeping plans. email me if you want to use it for some insane reason.
2024-07-27: Update style on non blog posts
2024-07-26: it has a dns server now. oops. there go its sleeping plans. email it if you want to use it for some insane reason.
2024-07-27: update style on non blog posts
2024-07-27: modernize /html/site-info.html, finally
2024-07-27: improve image accessibility, update blog posts to be compliant with new style
2024-07-28: add support for planned footer in all relevant html documents, simplify inclusion of other documents in a document using include script
@ -29,10 +29,22 @@
2024-08-09: fix css issue on homepage
2024-08-09: fix thoughts not displaying in correct order
2024-08-19: rewrite .*-info pages, add footer, update home.html, make all* images links
2024-08-20: update my-laptop.html, create my-old-laptop.html
2024-08-20: update its-laptop.html, create its-old-laptop.html
2024-08-27: test new home.html compiled from lisp code.
2024-09-01: switch to <a href='https://git.natalieee.net/nat/htmlgen>htmlgen'>htmlgen</a> for content
2024-09-03: fix issue with changelog; update site-info.html; update style; add thought
2024-09-05: hopefully? fix issue with natalie-info.html, update home.html
2024-09-07: add additional random homepage statements
2024-09-07: add license, finally; edit site-info
2024-09-12: update style.css to support syntax highlighting
2024-09-14: add autolinking wikipedia style footnotes, update some pages
2024-09-27: add new natalie sighting
2024-10-03: add new natalie sighting
2024-10-04: update natalie-info.html
2024-10-04: update natalie-info.html again
2024-10-19: remove references to friends name until she picks a different one
2024-10-20: add <a href='https://status.natalieee.net'>status.natalieee.net</a>, running <a href='https://git.osmarks.net/osmarks/onstat'>osmarks status thingy</a>
2024-10-20: add <a href='/html/view-thought.html'>alternative thought viewing frontend</a>
2024-11-01: minor accessibility improvements to style.css; general minor changes
2024-11-13: add cryptography, technical specifications sections to natalie-info
2024-11-20: add /.well-known/button.json

View File

@ -0,0 +1 @@
<a href="https://999eagle.moe" id="⛧-440729"><img src="https://999eagle.moe/images/88x31/440729.png" alt="⛧-440729's button"></a>

View File

@ -1,2 +1,2 @@
<a href='https://bunbun.dev'><img src='data:image/gif;base64,R0lGODlhWAAfAPAAAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh/wtJbWFnZU1hZ2ljaw1nYW1tYT0wLjQ1NDU1ACH5BAAjAP8ALAAAAABYAB8AAAKphI+py+0Po5y02ouz3rz7D4biSJbmiabqOgWB5opxOGP1d3t5tXP99pMEM0Pbi3gEFS+u5rEWc86kz2RUqqAasABo8kF9ebvaMPlw5W7LbPTXMY5bxfPz2o7HX936d0POB3gnmCeHNRZBuDdYp/hl6NQn1EgZWMnIl3m200Tmx2AWSnnYhinKhaqVoOrZCekVKajK2rmmxoKbq7vL2+v7CxwsPExcbExSAAAh/wtJbWFnZU1hZ2ljaw1nYW1tYT0wLjQ1NDU1ACH5BAAjAP8ALAAAAABYAB8AAAKmhI+py+0Po5y02ouz3rz7D4biSJbmiabqOgWB5opxOGP1d3t5tXP99pMEM0Pbi3gEFS+u5rEWc86kz2RUqqAasABo8kF9ebvaMPlw5W7LbPTXMY5bxfPz2o7HX936d0POB3gnmCeHNRZBuDdYp/hl6NQn1EgZWMnIl3m200Tmx2AWSnnYhinKpQahtRYJ6dV6ubrqyVJre4ubq7vL2+v7CxwsPJxbAAA7' alt='bunbun.dev'></a>
<a href='https://bunbun.dev'><img src='data:image/gif;base64,R0lGODlhWAAfAPAAAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh/wtJbWFnZU1hZ2ljaw1nYW1tYT0wLjQ1NDU1ACH5BAAjAP8ALAAAAABYAB8AAAKphI+py+0Po5y02ouz3rz7D4biSJbmiabqOgWB5opxOGP1d3t5tXP99pMEM0Pbi3gEFS+u5rEWc86kz2RUqqAasABo8kF9ebvaMPlw5W7LbPTXMY5bxfPz2o7HX936d0POB3gnmCeHNRZBuDdYp/hl6NQn1EgZWMnIl3m200Tmx2AWSnnYhinKhaqVoOrZCekVKajK2rmmxoKbq7vL2+v7CxwsPExcbExSAAAh/wtJbWFnZU1hZ2ljaw1nYW1tYT0wLjQ1NDU1ACH5BAAjAP8ALAAAAABYAB8AAAKmhI+py+0Po5y02ouz3rz7D4biSJbmiabqOgWB5opxOGP1d3t5tXP99pMEM0Pbi3gEFS+u5rEWc86kz2RUqqAasABo8kF9ebvaMPlw5W7LbPTXMY5bxfPz2o7HX936d0POB3gnmCeHNRZBuDdYp/hl6NQn1EgZWMnIl3m200Tmx2AWSnnYhinKpQahtRYJ6dV6ubrqyVJre4ubq7vL2+v7CxwsPJxbAAA7' alt='88x31 bunbun.dev'></a>

View File

@ -0,0 +1 @@
<a href="https://dimension.sh/~minekpo1/buttons.html#404" id="minekpo1//404"><img src="https://dimension.sh/~minekpo1/res/88x31-404.png" alt="404 Button not found button"></a>

View File

@ -0,0 +1 @@
<a href="https://girlthi.ng/~thermia" id="thermia"><img src="https://girlthi.ng/~thermia/img/88x31/thermia.gif" alt="thermias button"></a>

View File

@ -1 +1 @@
<a href='/status'><img src="data:image/png;base64, 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"></a>
<a href='/status'><img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAFgAAAAfCAYAAABjyArgAAAACXBIWXMAAA9hAAAPYQGoP6dpAAANjUlEQVRoQ+1aCVRVVRf+GJ4CCuaEIKAgCM6ILBJFBQVMcMC5yDHnOdREmtRUMjURCyr/zF8c0koyMwVNxRRwSMERRJJRZhUZ9Ak8Of/dh96N9959gPRba7Xaa7117zl7n33O+e4539lngw4TBP/KC0NAvxrPXpjzfx0Dun8HCIlXEzF06FDxN3bsWJw8efLvGIpGn9HR0Xxc6lIYFIL7W3epV9dZjoyMhH6dFhLKitgrkKemAU1l0DEyhmEPBzSxs5Sw1F4lfyLH6ZjTWLhgIVq1aoWoqCiM9BuJzPRMmJqaam/4F2iKior42NTlye0UyB40YmzPmII15Fdy+Gd2p58fu96im8YvpecrrCh0JyObhvg6F3eW6eiDpd69w+1v3LrOy1RfUvaITZ8xjXV2sGODPAay+Atx7Fj0UeY7wofbnoo5yTy9h7DLib9yW3o/fzGeZedmsXETxjIbW2vennRkT/q58+ewrt27sOQ7SWzp8gDue+gwb5aUcovb0LOfWz/Wo1cPNvG1CXws6vO46zeTpXr7s7Rhb3AcSn88yUpiYlna6FmMVTzl9tmzlrP7X/8otv324DcM6o7Uy0/v5XIn6sAmt3dlyV3dWZJZXxUdgV12NVljgLX9KgFetGQhW7XmfT4xw+YGLK8gl4Pk5Nybg74ueC2vJ5Bp0hcunWez5szi7x9+FMy+i/yW68vlZRww+hHw1H7mnJl8DGRLoFNfqz9YxSysLLgN+SHQyYbAHezpwfukpzaAUzq4s8fXU1jBmq3sRuverDItm8+dgJanZvB30ivnSgDXycHyO5nIcH0N5THx4o4xf3sBHO6eg31OLOyTTsEhLw6dzn6Plyb4cZuKrGxkePqDqKQ+uXIlAXFxcXBwsEfM6RhOD0eOHsHs2bPRrVs3LF22FE+fPkVWVhacHJ1w4sQJnD59Cs59nEFcefToUfj6+MLQwBBnzp5BaWkZQreGoqpKgXjBr1IWL16Mbdu24cKFC2jSRMZtsrIycTvlNnLzcnHx0gX4v+7P+6SnNmnu0QcGPW1hMmkMmKIS1Xn5MBnuhccHolEe+ROadrDi+tqilYPZ00rkjF+AyrL73L7tvOkwW7sE1U00mxj2soPFl+tgNKQfcucH8c6z/FfA5uoh6LduoW282L07Ap06dVLRGxkY4fHjx7yuTACMxMDQAKPHjMb+/fuRnpGOiIgIeHp7IiMjA8HBwdxGT1cP/fq5gg7MgoICtGvXjteTEM+T6OnpwcrKCnPnzkVZWRkCAgLQsmVLNG3aFE/lT7mN8skLaqIorxlXtbyCa5hBMxiP98X9gA3Q72iGVpNGqjeBJEWUp9xlBWG7+JJP7j6UPblcw1Xq9CFVzl8dIlJG7oq1klShzsG1/QQGrWBm5u3YZ1+EM5/hPnwbEwUoefplVxfuk7a6rkyHFT0s5GWiBKKC8M/DWKs2Ldk7770tUsSu3f/l7/RsYiRjIaFbGPlx7e/K64mzlW07WFtppQiihaKN/+GUSVRI3KuQP+F0QVgRTdSeC1GE3uo1q9aow155MwUFS4KhZ9oCdqcOQGZvpW6itWzc3xkl3xyDrgLQt7KEyaghGrZ0tzExMYG7hzsMDQ1V9F5eXmjfvj1iY2Ph6+uL0NBQbtO2bVu+0saNHwd7e3uYmZnB09MTAwcM5O19fHxQXV2Ny5cvY9KkSVi+fDl0dXVBfQ0cNBDmZuZwdHSEg70D4uPj+XtISAiaNWvG/dCuyc/Px7Jly2BjYwMPDw+VcTGmhxbjhgGPn0CXVcN862rotGkBHX09PDmfAF0jA7RdMVulTXJysuYKrsorZPcWv19D2CfPSa5AWuH0FTPHL2J5b65mD7fvZay0VLTNW7+Nt88LXCfZXmrl/6V1VRWsWlH5p8dGcy766mu+ggkD9TnQCtYkVCG+LYv8mRO20UAXVKutv+r8hyh8cz2sPl8HXWszrtWtVKAiuwAyYyNebtLNgT/1rTtC8aCkTh7mhnUIrUAdHZ06LBqhElYdzw9QluBP+K4W5itPuAXTdxeh5fTxGlhRFxoAV+UUoepxKcwD50geaAUffgqz9W+J4JITOvhkthbiTJu0NuHviofFzw0ubXMS2t4kDQGX2tCHoEPsueRPgKvsxyLsA/6qvhCVeo0wTda8ZhXqde4oOdaKq3fQ1LlmhaobVP52j1c9e1aT32jatrW6Sb1lAlYJbr3GvxuQ/fOCK09MAv1etGgArOzQoF3N9lcfgCIzX72KlytupolXZkV+Ma9raiv9kUh3/foN6AkRfUJCIrf9f8nKwCD06NazTncE7PevTETc1EUvHGStAMu0xa8tDPAsPU9jAs8yssW64rCd/OLBhJNfmyQmJEAmk6F7927cREkN2uwbWp8g+O3j3KdOc4VCASMjI7Ru3aZOu+dRahu/VoCr7uVo+Ncte4Lmg/si973Noq406iyqM/JhNMKd190P34vqMjlM501EM5v2Gj6UFbRye/TozkMvkuelBSnHxMOJgt8+fZyk1GKdsUsvDDu0C122roGhU80HrrNBA5Q0fvpw6qIBsI5Zza2n/PJNdVs8k+lDr6MV5Nduo2DeGrCScpj4DOIHXlVOITJ9ZuPR9v0w37EZMueeoFNWm9AKduqjutII9NF+Y2DdwQYdrayxYP5C4fpbKrogACN2RaC/a3+0bW2K9mYWGOw+GBcvXuI2mZmZKC4uhp2dHebNnQ+7Tp1hYW6JT7Z9wg9BpRzYfwDj3w1UATd4fTAG9B8AM1Nz/hvuOwI3b95SGf5rr/pjx5c7sPOrnXAf6I5WL7WGl6c38vJqdrS+vkbMoBkHUyz3m5MfS/dfrBHXkY5uL5Qxum3Zjyd6KMNE9rctB7Hc9z5mikc1WSz1mLB2uVJRwYQAn4WFfyr28cPhQ0ygDBa4MpD9cu4X9s23B5ilpSWbNHmSaBOydQsT8hVsx1dfChm08+xY1FFun3gtkdscjPyOUGRdunRhGzd9xM7GnmUBSwN43U9Hj4h+pk6bytzdB4nlB8X32cRXJ7LdeyJ434d++J717u3IhGs8U1RXcbvS8hImRDTMwcGBUfuo6GNs0+aNfB7zF8yXxEprNk153c0N3CjZkDqkCwkB/WDfQVZ6Jk6rnRTQt5Jv8knHna9pl1+Yx4EjAGvb7923h4NeUVWTDuzVqyf7YO0arX298+473O+Rn/5IGRJABPiMmTPEdj179uDAS41NWUcfnHw9Ki3mdrHxsbz81oq3VNr5jfZjI0eNlPQlfdEQvDR/3Q+FoTtwf3sE2gbNgW5LY5WtQgVdgUpa+vtq1DekgniSOEsAjJtv3vQxysvL+fU38mCk6CI1NVXIjFXh0aNHaNOmDQwMDLAt9BMeG0+ZOgUdOnRQ6Y4OOEr4+Pj6iPVk21G48Ci3sVwuR1JSMlYErhBt6IA6Hn0cMTFneOauoqICOffu8YOQrtIkRGlEASuDAlX6zBfooY+zs0pd7YIGB5PS0L4jT8ORlESf09q4sQri2q5du/AJkJw4fpwDuP2L7QgPCxd/Z4QJD/EcImbDDh85jDlz5yDs03B0srbF2DHjRJ4kjk0Q0p9e3t4al5PUO6k8v0BC4SHF6cpIg9Kh3l5DsXjREv7R3dz6Y8SI4fzd0bGXePjSmJ2F6ESZmSNfdKiRPyen3ty3pGjbJpRoV3KsNpvG1nsM9mCTp0wWt5WQWmQfbgiW3GZSfRCH/3jkMBOSQszTy5O3y87J4luY+Ll2m6vXr/L64yeieX34Z2FM+LCMfFB5S8jHjPpXUgHVkU7YTSrcSpyszrXXblzjvn+98qvk2OtMuMssTGG+cwPkl66hYOUWyY/TmEqpUMrWthPOn7+g4Y5WiDK+rKysFPV0axsurLKu3bryzBsJ0Q4JbX+lUJuglUHcVvgQvJpWogCWePOjsqWlBYyN/6DBdWvX88yaMtwjyrh1K4mv4NqScOWKSiyvovy9IBFX/GFGIZjFukDkvL8Juu1aod2iKZL5CSnH2urS09NRUlKiEqLRXy4mjJ+I8eMmCClKH546TEtLF6jjBIQ8MHdFtzO3AW58kpTqPHYsChcvXIRwUHI98S8l2Y8Lf+kwNm7OtzKFY5mZWYiNPyfSBoHS381NHB7527d3H96YPoPTQ1RUNIoKC7m+t1NNPE3g0lkgFVbWjuVpQaiHapL5YLF34cWgby80ceiMgsANUOQXwsTTDUxPkrprN9P6npOTy1fllCmTxUsGrUQhbMLVq9f4n47upqXxFRWw9E107tyZ29PA04R6+lPQraQk2NraImLPLiE33Jn3dfe3u3B52QWrVq8SQD6B2HOx6Ovqij17d4urnHYPrfBx48bC2tqat3NxceG+yW+xcJiOGjUSk4UDlA7HqcKTdNnZ9/iKnzZtqkrOgw5hN+FjOf1+sVG/LFE+WIc4RysatRR0W8t5d5Nwd78Gy/1fwMixZmINaftPt6EPJ5X1o/+LaDDASpDoxlZ+5BT0hQy+fhcbGL5cxwn6T0e2nvk1CuB6fDZKTSuAQifaYsptpkx5kk6d1xrVST2NiGNpFRIV0JP6VR6wylQojamutKi6vlH/2VPPOBulpgmpg1jXRBrVST2NKLNXW5Rg166rb0xSeh5FENL/yotB4H9QZULONf7ZuQAAAA5lWElmTU0AKgAAAAgAAAAAAAAA0lOTAAAAAElFTkSuQmCC" alt='88x31 powered by lesbian'></a>

View File

@ -1 +1 @@
<a href='https://hellzone.org'><img src='https://hellzone.org/src/images/88x31.gif'></a>
<a href='https://hellzone.org'><img src='https://hellzone.org/src/images/88x31.gif' alt='88x31 hellzone.org' width=88 height=31></a>

View File

@ -1 +1 @@
<a href='https://luxen.neocities.org/'><img src='https://luxen.neocities.org/88x31.gif'></a>
<a href='https://luxen.neocities.org/'><img src='https://luxen.neocities.org/88x31.gif' alt='88x31 luxen.neocities.org' width=88 height=31></a>

View File

@ -0,0 +1,3 @@
<a href="https://lynx-library.neocities.org/">
<img src="data:image/gif;base64,R0lGODlhWAAfAAcAACH/C05FVFNDQVBFMi4wAwEBAAAh+QQAGQAAACwAAAAAWAAfAIcAAAAAADMA AGYAAJkAAMwAAP8AKwAAKzMAK2YAK5kAK8wAK/8AVQAAVTMAVWYAVZkAVcwAVf8AgAAAgDMAgGYA gJkAgMwAgP8AqgAAqjMAqmYAqpkAqswAqv8A1QAA1TMA1WYA1ZkA1cwA1f8A/wAA/zMA/2YA/5kA /8wA//8zAAAzADMzAGYzAJkzAMwzAP8zKwAzKzMzK2YzK5kzK8wzK/8zVQAzVTMzVWYzVZkzVcwz Vf8zgAAzgDMzgGYzgJkzgMwzgP8zqgAzqjMzqmYzqpkzqswzqv8z1QAz1TMz1WYz1Zkz1cwz1f8z /wAz/zMz/2Yz/5kz/8wz//9mAABmADNmAGZmAJlmAMxmAP9mKwBmKzNmK2ZmK5lmK8xmK/9mVQBm VTNmVWZmVZlmVcxmVf9mgABmgDNmgGZmgJlmgMxmgP9mqgBmqjNmqmZmqplmqsxmqv9m1QBm1TNm 1WZm1Zlm1cxm1f9m/wBm/zNm/2Zm/5lm/8xm//+ZAACZADOZAGaZAJmZAMyZAP+ZKwCZKzOZK2aZ K5mZK8yZK/+ZVQCZVTOZVWaZVZmZVcyZVf+ZgACZgDOZgGaZgJmZgMyZgP+ZqgCZqjOZqmaZqpmZ qsyZqv+Z1QCZ1TOZ1WaZ1ZmZ1cyZ1f+Z/wCZ/zOZ/2aZ/5mZ/8yZ///MAADMADPMAGbMAJnMAMzM AP/MKwDMKzPMK2bMK5nMK8zMK//MVQDMVTPMVWbMVZnMVczMVf/MgADMgDPMgGbMgJnMgMzMgP/M qgDMqjPMqmbMqpnMqszMqv/M1QDM1TPM1WbM1ZnM1czM1f/M/wDM/zPM/2bM/5nM/8zM////AAD/ ADP/AGb/AJn/AMz/AP//KwD/KzP/K2b/K5n/K8z/K///VQD/VTP/VWb/VZn/Vcz/Vf//gAD/gDP/ gGb/gJn/gMz/gP//qgD/qjP/qmb/qpn/qsz/qv//1QD/1TP/1Wb/1Zn/1cz/1f///wD//zP//2b/ /5n//8z///8AAAAAAAAAAAAAAAAI/wABCBxIsKDBgwgTKlzIsGHBGAshOpxIseJCAxIRYrTIsWPF GBkPgjTgsaTJgys2IoyxAuTJlyZjTJokZuXMAzBzcpSZqeZBMTN9Tty3T2BRowCOIiU6UKlOAEBp IowqdehRpkmTKr1a1OlToJmGCSWIRlJQili1cr3a1OtXmpPQ/JwZF61TrEy7tn1KMCrYsVDNmq06 MGTBtFqNclWcNWdGNDT3iRlGU4wYNIzQWNZMGIDhw0TzLl66VadEoGL0SZ4UlrXrTK7FCvzM9ymj SURdz9xHd/drwLUdn4Y9UxJsTK8nmSXeszDt4CbFHNedqdck5IJZW2e0EHFo0WsJpv8NjbT8RKqw ezFXTlfLpAMw5MJIiDgx4656Ey/Gb76hGOPULTeJe5NAsw8MkwhE0xb0eTUeXvnldZ9ibk2lmXTF aQFbDAhmgqAWMMBABTT1ZGLWfAjV92BW5FEY3l7+TUKZbggmCMBMWsSwzzL7REMFDDHk2Jl4Dm6l l4T28WfkeTOZCJuGyakQDT0ABAAkSEQZB5xa4IHHGIts4fWlf5bdRhcM6g0Iwz5UzgZfAEnRMyR0 J4HF2okg1jNlNCqGtiWdHQmo246qffcdl5IBClNUsBnaJXl5/amoRVGFRo8YhiJqpKSTUgQUidDQ E40+lh0KGlGcdnoem9FYVg+olmEc6qhklqn60oU+xSoGd1DpGqutOTGSKrDEFgtdQAA7" alt="lynx-library.neocities.org 88x31" width="88" height="31" />
</a>

View File

@ -1 +1 @@
<a href='https://natalieee.net'><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFgAAAAfCAYAAABjyArgAAABb2lDQ1BpY2MAACiRdZG7S8NQFMa/PqRFKx10EHHIUB9DC0VBHKWCXapDW8GqS3KbtEKShpsUKa6Ci0PBQXTxNfgf6Cq4KgiCIog4OvtapMRzm0KLtCecnB/fPd/h5gTwZ3Rm2MEkYJgOz6ZT0mphTQq9IwwfgpSTMrOtpdxiHj3j55H6KB4SYlbvvq4xUFRtBvjCxLPM4g7xPHFmy7EE7xEPs7JcJD4hjnO6IPGt0BWP3wSXPP4SzPPZBcAvZkqlDlY6mJW5QTxFHDP0KmvdR3xJRDVXclRHKcdgI4s0UpCgoIpN6HCQoGrSzrr7kk3fMirkYfS2UAMnRwll8sZJrdJUlapGukqPjprY+/992trMtDc9kgL6Xl33cxwI7QONuuv+nrpu4wwIvADXZttfoT3NfZNeb2uxYyC6A1zetDXlALjaBUaeLZnLTSlA6dc04OMCGCwAQ/dA/7q3q9Y5zp+A/Db9ojvg8AiYoP7oxh+f12feK5ElyAAAAAlwSFlzAAALEgAACxIB0t1+/AAAApdJREFUaEPtWktOAzEMnSJOwYYFp0GITS9RCXXDgpsgJC7RDUKchgUbrlHwjFycjJMXx5OpWmakolL7+fPG4yRuV13X7X9fyzU9AysyeUl/Pr++pzf/jy3eXF8dsu8JXq4mDPSd4aKFaXkHrfYJi/BIbvU5tf56ve7o1YxgMvzx/lYVN7crhEfyKucNQE0quEGcgclTWjOCHqw9enEysU5Kvn3Y/JKyGS2gCJ+7ORKbIhnZ98qtxTNa5J5fXgMbFJBMht7Lx1OT02dsh3Rv7+4PNhE+lwBj6ebFdgnHsaTi88qt5JK+uouQhFAVymS0KteSJeOhnSE8C15LaLBJT4d+jWMJ4/fKrSSbtmlaBQytoOzy4ku8cGtK6XrlJTFIHRPBBNQqwOLUi0e+4hYX63vlyH8sNxMsDXj3o158KlmtNUldr9xCsolgWmQGUoa28Pd/6FLqxQukFc9+4qS0XUocH2M4Bq/cQizr0kBiL0nQFqz4M7lKUzWkFjnWiyvGiqdgkQ2ZvHYIkXivHBH99LjtVXa7XTciGIEXOWZAEgxPcjV9sgaDwy7XOLZ/GSkkmJRrzv01mHIKseax/XOERQTjdBaNFAOjXQR6vErP8qlZRO5WzDELmbsURsOeeFYgT2roLC+3bqlZBEowNwuZwz+KzyofVTA6aaGzvAwAbehTweZmIXP4t5KY0zcdNKZ0XGsLzRJq7bbCnRzBaJbQiqhau1mC0YJX69SLq209Xr81+IBgNGvQzvLxoigXOu0bjZogGYNmCZresb9eUo/KaFYQb+JTFZWaReRIts5C2JYWQ41/TwEwdplFTMFixoZpFtE4lrM33/dgXsz4xxJnn/WMCdIsgvpw/0O15ZqeAUns8ivL6fntfgARjrcUTOE2HQAAAA5lWElmTU0AKgAAAAgAAAAAAAAA0lOTAAAAAElFTkSuQmCC"/></a>
<a href='https://natalieee.net'><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFgAAAAfCAYAAABjyArgAAABb2lDQ1BpY2MAACiRdZG7S8NQFMa/PqRFKx10EHHIUB9DC0VBHKWCXapDW8GqS3KbtEKShpsUKa6Ci0PBQXTxNfgf6Cq4KgiCIog4OvtapMRzm0KLtCecnB/fPd/h5gTwZ3Rm2MEkYJgOz6ZT0mphTQq9IwwfgpSTMrOtpdxiHj3j55H6KB4SYlbvvq4xUFRtBvjCxLPM4g7xPHFmy7EE7xEPs7JcJD4hjnO6IPGt0BWP3wSXPP4SzPPZBcAvZkqlDlY6mJW5QTxFHDP0KmvdR3xJRDVXclRHKcdgI4s0UpCgoIpN6HCQoGrSzrr7kk3fMirkYfS2UAMnRwll8sZJrdJUlapGukqPjprY+/992trMtDc9kgL6Xl33cxwI7QONuuv+nrpu4wwIvADXZttfoT3NfZNeb2uxYyC6A1zetDXlALjaBUaeLZnLTSlA6dc04OMCGCwAQ/dA/7q3q9Y5zp+A/Db9ojvg8AiYoP7oxh+f12feK5ElyAAAAAlwSFlzAAALEgAACxIB0t1+/AAAApdJREFUaEPtWktOAzEMnSJOwYYFp0GITS9RCXXDgpsgJC7RDUKchgUbrlHwjFycjJMXx5OpWmakolL7+fPG4yRuV13X7X9fyzU9AysyeUl/Pr++pzf/jy3eXF8dsu8JXq4mDPSd4aKFaXkHrfYJi/BIbvU5tf56ve7o1YxgMvzx/lYVN7crhEfyKucNQE0quEGcgclTWjOCHqw9enEysU5Kvn3Y/JKyGS2gCJ+7ORKbIhnZ98qtxTNa5J5fXgMbFJBMht7Lx1OT02dsh3Rv7+4PNhE+lwBj6ebFdgnHsaTi88qt5JK+uouQhFAVymS0KteSJeOhnSE8C15LaLBJT4d+jWMJ4/fKrSSbtmlaBQytoOzy4ku8cGtK6XrlJTFIHRPBBNQqwOLUi0e+4hYX63vlyH8sNxMsDXj3o158KlmtNUldr9xCsolgWmQGUoa28Pd/6FLqxQukFc9+4qS0XUocH2M4Bq/cQizr0kBiL0nQFqz4M7lKUzWkFjnWiyvGiqdgkQ2ZvHYIkXivHBH99LjtVXa7XTciGIEXOWZAEgxPcjV9sgaDwy7XOLZ/GSkkmJRrzv01mHIKseax/XOERQTjdBaNFAOjXQR6vErP8qlZRO5WzDELmbsURsOeeFYgT2roLC+3bqlZBEowNwuZwz+KzyofVTA6aaGzvAwAbehTweZmIXP4t5KY0zcdNKZ0XGsLzRJq7bbCnRzBaJbQiqhau1mC0YJX69SLq209Xr81+IBgNGvQzvLxoigXOu0bjZogGYNmCZresb9eUo/KaFYQb+JTFZWaReRIts5C2JYWQ41/TwEwdplFTMFixoZpFtE4lrM33/dgXsz4xxJnn/WMCdIsgvpw/0O15ZqeAUns8ivL6fntfgARjrcUTOE2HQAAAA5lWElmTU0AKgAAAAgAAAAAAAAA0lOTAAAAAElFTkSuQmCC" alt="88x31 natalieee.net"/></a>

View File

@ -0,0 +1 @@
<a href="https://beta.servfail.network"><img src="https://beta.servfail.network/servfail-88_31.png" alt="SERVFAIL DNS written on a 14 segment display. Next to it is a pentagram made out of burning servers."></a>

View File

@ -1 +1 @@
I hate computers
it hates computers

View File

@ -9,5 +9,5 @@
\ || || /
\_oo__oo_/#######o
(portrait of Natalie[ee])
-- albert
-- unnamed friend entity
</pre>

View File

@ -1 +1 @@
by viewing this website you agree to give me no less than two hundred dollars
by viewing this website you agree to give natalie no less than two hundred dollars

View File

@ -1 +1 @@
by viewing this website, you agree to the <a href='https://en.wikipedia.org/wiki/Special:Random/Category'>terms & conditionss</a>
by viewing this website, you agree to the <a href='https://en.wikipedia.org/wiki/Special:Random/Category'>terms & conditions</a>

View File

@ -1 +1 @@
I should learn toki pona
it should learn toki pona

View File

@ -0,0 +1 @@
queering the beep/boop binary

View File

@ -0,0 +1 @@
the embodyment of xkcd 1172

View File

@ -1 +1 @@
apparently I am like a ferret?
apparently it is like a ferret?

View File

@ -1 +1 @@
so called "functional human"
so called "functional entity"

View File

Before

Width:  |  Height:  |  Size: 208 KiB

After

Width:  |  Height:  |  Size: 208 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 632 KiB

View File

Before

Width:  |  Height:  |  Size: 377 KiB

After

Width:  |  Height:  |  Size: 377 KiB

BIN
files/natalieee.net.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

20
files/nrc.vcf Normal file
View File

@ -0,0 +1,20 @@
BEGIN:VCARD
VERSION:4.0
SOURCE:https://natalieee.net/files/natalie-roentgen-connolly.vcf
KIND:individual
FN:natalie roentgen connolly
N:connolly;natalie;roentgen
NICKNAME:nat,0x6e6174,▖▖▖▖▘▖▖▖▖▘▌▖▖▖▘,6e6174b8-4dcb-4323-b5ca-c217425e13a7
PHOTO:https://natalieee.net/files/vcard-photo-field.jpg
GENDER:N;preferrably not
X-PRONOUNS:it/its
TZ:Los Angeles/North America
LANG:en
BDAY:20070401
EMAIL;type=home:natalie@natalieee.net
URL:https://natalieeee.net
UID:urn:uuid:6e6174b8-4dcb-4323-b5ca-c217425e13a7
KEY:data:application/pgp-keys;base64,mDMEZyF+dhYJKwYBBAHaRw8BAQdAuh3EVhqODqs4DQasm/jUILG+4cNj0Q3Gb8SITEhqNNu0PW5hdGFsaWUgcm9lbnRnZW4gY29ubm9sbHkgKGJlZXAgYm9vcCkgPG5hdGFsaWVAbmF0YWxpZWVlLm5ldD6ImQQTFgoAQRYhBJo0/NsX3ToM9ZBiC6HD1we8+QjlBQJnIX52AhsDBQkDwmcABQsJCAcCAiICBhUKCQgLAgQWAgMBAh4HAheAAAoJEKHD1we8+Qjl0VYBAKrJtKM2bJj6hsU+kTt8HXxDNdCY37eSL6GxzQ4fGBqJAP9NuysVDyyFVL7HOkUa3XbNFkxgSNNfDSXnyXG1/JnZDrg4BGchfnYSCisGAQQBl1UBBQEBB0CebBBPcowxbCbOIAM9aJAe2kHbNZ4bIxZT7klRjf0+WgMBCAeIfgQYFgoAJhYhBJo0/NsX3ToM9ZBiC6HD1we8+QjlBQJnIX52AhsMBQkDwmcAAAoJEKHD1we8+QjldDoBAIj3f2uA6AWu08lWSBkEDKrzKMduShD/Pv8jvDyznHvHAP0VskOMQSFg9MBrwZ+7azZzgnCs2FSiZvHJW7HTo4v9Bw==
NOTE:beep boop
REV:2024-10-24T06:41:28.100Z
END:VCARD

View File

@ -1 +1 @@
<i style='font-family: MapleMonoItalic'>natalie</i>@2024-04-10_17:31:12-327<br>dammit albert<br><br>
<i style='font-family: MapleMonoItalic'>natalie</i>@2024-04-10_17:31:12-327<br>dammit unnamed friend entity<br><br>

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

BIN
files/vcard-photo-field.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 MiB

167
html/blanchard.html Normal file

File diff suppressed because one or more lines are too long

View File

@ -1,16 +0,0 @@
<!-- TITLE: I hate debian -->
<!-- DATE: 2024-09-03 04:19:03 -->
much to my detriment, this server runs debian.
<br><br>
such circumstances would most likely be acceptable if my computers were not cursed with not working in hard to explain ways.<br>
issues I have had with debian:
<ul>
<li>the package manager does not work.</li>
<li>I can't install a modern python version without jumping through at least 12 very small and inconvienently located hoops.</li>
<li>I have to use nix as a package manager to reasonably do anything.</li>
<li>I have to interact with systemd without a layer of abstraction</li>
</ul>
<br>
I really need to migrate to nixos for my server.
normally, such an idea as installing nixos would seem abhorrent to me, however nixos actually seems extremely reasonable for servers.
I do not understand how it is that people can run nixos on a computer that they use outside of a server application. ridiculous.

View File

@ -1,26 +1,28 @@
<!-- TITLE: romantic relationships are made up, I think -->
<!-- vim: ft=html -->
<!-- TITLE: romantic relationships are made up, it thinks -->
<!-- DATE: 2024-09-05 05:22:24 -->
this concept simply does not make sense to me.
<!-- CATEGORIES: natalie being multiple words that start with "a";rambling -->
this concept simply does not make sense to it.
<br><br>
I understand the idea of wanting humans that you are close to. this makes perfect sense to me.<br>
what is the difference between a friend you are close with and a romantic partner? I do not understand.<br>
I do not think I have ever genuinely experienced romantic attraction. I have been informed that this is irregular.
perhaps I am aromantic (note: requires further investigation, alternative explanation: extremely autistic).
I suppose I am functionally in more or less two(?) qprs. this is ideal and I do not understand why such a state is not more common.
it understands the idea of wanting beings that one is close to. this makes perfect sense to it.<br>
what is the difference between a friend you are close with and a romantic partner? it does not understand.<br>
it does not think it has ever genuinely experienced romantic attraction. it has been informed that this is irregular.
perhaps it is aromantic (note: requires further investigation, alternative explanation: is extremely autistic).
it supposes it is functionally in more or less two(?) qprs. this is ideal and it does not understand why such a state is not more common.
<br><br>
what is the point of a romantic relationship when I can have human exposure quotas met simply by having friends?
I must be missing something.
what is the point of a romantic relationship when it can have social exposure quotas met simply by having friends?
it feels it must be missing something.
<br><br>
being abnormally close with my friends has the rather amusing consequence of people asking of an arbitrary friend of mine and myself are dating.
I am not entirely sure why this occures.
I understand if someone makes such an inquiry after observing a friend and I performing an action typically associated with romantic relationships, such as holding hands, however sometimes people ask with no clear reason. baffling.
here is the count for how many times this has happened with all of my friends:
it being abnormally close with its friends has the rather amusing consequence of people asking of an arbitrary friend of mine and this natalie are dating.
it is not entirely sure why this occures.
it understands if someone makes such an inquiry after observing a friend and natalie performing an action typically associated with romantic relationships, such as holding hands, however sometimes people ask with no clear reason. baffling.
here is the count for how many times people have asked such a question regarding all of its friends it has happened with:
<ul>
<li>cecilie: 20</li>
<li>cecilie: 21</li>
<li>odette: 13</li>
<li>albert: 1</li>
<li>unnamed friend entity: 1</li>
</ul>
recently, cecilie was happy about the 20th increment to this count because it means that the interlocking metal hearts with notches for each time someone has asked this question that it made me (with a forge and anvil! very cool) would have both a decimal and the same number of notches on each heart.
the indicator shall be pictured below, because I think it is very cool.
recently, cecilie was happy about the 20th increment to this count because it means that the interlocking metal hearts with notches for each time someone has asked this question that it made this (with a forge and anvil! very cool) would have both a multiple of 10 total notches and the same number of notches on each heart.
the indicator shall be pictured below, because natalie thinks it is very cool.
$[img-caption '/files/thoughts/the-indicator.jpg']

View File

@ -1,7 +1,8 @@
<!-- TITLE: Audio is bad. So is my computer. -->
<!-- vim: ft=html -->
<!-- TITLE: audio is bad. so is computer. -->
<!-- DATE: 2024-07-24 17:18:11 -->
While I was making $[make-link /stats/what-song-is-it-listening-to], specifically while I was writing the service that would send song updates to the server from my laptop, I decided to make mpd started by my init system (openrc).
This quickly devolved in to also making pipewire start from my init system. Prior to now, it was start by my compositor, which would run <code>unfuck audio</code>. For some reason, likely due to the fact that I use seatd instead of elogind for session management on this laptop, the default artix init scripts for all pipewire related services and mpd did not work.
I spent like two hours hacking on these, and now have arrived at a system which vaguely works. Both mpd and {pipewire,pipewire-pulse,wireplumber} are started by my init, however, for some reason which is entirely obscure to me, pipewire does not recognize anything other than my bluetooth headphones.
This doesn't actually matter, because I functionally never use the speakers in this laptop, but it is still quite stupid.<br><br>
I hate computers. I should get back to making random information about me available on the internet.
<!-- CATEGORIES: complaining;computers -->
while natalie was making $[make-link /stats/what-song-is-it-listening-to], specifically while it was writing the service that would send song updates to the server from its laptop, it decided to make mpd started by its init system (openrc).
this quickly devolved in to also making pipewire start from its init system. prior to now, it was start by an init script ran by the compositor natalie uses, which would run <code>unfuck audio</code>. for some reason, likely due to the fact that natalie uses seatd instead of elogind for session management on its primary laptop, the default artix init scripts for all pipewire related services and mpd did not work.
it spent around two hours hacking on these, and now have arrived at a system which vaguely works. both mpd and {pipewire,pipewire-pulse,wireplumber} are started by init, however, for some reason which is entirely obscure to it, pipewire does not recognize anything other than its bluetooth headphones.
this doesn't actually matter, because natalie functionally never use the speakers in its laptop, but such an issue is still quite stupid.

View File

@ -1,7 +1,9 @@
<!-- vim: ft=html -->
<!-- TITLE: dns -->
<!-- DATE: 2024-07-26 07:18:22 -->
Odette, one of my meat friends (not computer friends) (though she is a computery friend) just <a href='https://puppygirl.systems'>bought a domain</a>. Apparently the registrar she bought it from didn't have an api, which was problematic because she doesn't have a static ip.
Because I am a reasonable person, I decided to start hosting dns for her. Now I know (some) things about dns!
I like learning things.
<!-- CATEGORIES: rambling;computers -->
odette, one of natalie's meat friends (not computer friends) (though she is a computery friend) just <a href='https://puppygirl.systems'>bought a domain</a>. apparently the registrar she bought it from didn't have an api, which was problematic because she does not have a static ip.
because natalie is a reasonable being, it decided to start hosting dns for her. now it knows (some) things about dns!
it likes learning things.
<br><br>
As stated in the changelog, should any random website tourist wish to use my dns setup for their own website (I do not recomend this, nor do I know why you would want to do this.) you can email me. I might even respond.
as stated in the changelog, should any random website tourist wish to use its dns setup for one's website (natalie does not recommend this, nor does it know why you would want to do this.) you can email it. it might even respond.

101
html/thoughts/dollcode Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,27 @@
<!-- vim: ft=html -->
<!-- TITLE: nearly all educational institutions exist to mildly inconvenience natalie -->
<!-- DATE: 2024-10-18 23:48:55 -->
<!-- CATEGORIES: rambling;complaining;school -->
there is simply no other explanation.
<br><br>
the only time this one felt as though it was in an environment that valued learning was before it was in high school, when it was still going to a school that followed montessori principles (read: let it do whatever it wanted).
in high school, all of its classes (other than the dual credit or AP ones) were entirely busywork.
then, it dropped out of highschool because it did not like busywork and went to college, because it hoped there would be less busywork.
there was in fact more busywork in college, somehow.
it thought that reading 115 would not contain material from its second grade english class, yet evidently it was wrong.
<br><br>
because college contained even more busywork than high school, it has also dropped out of the college program to get its high school diploma.
this is for some reason an intelligent decision, as it can just take the GED immediately, and then go back to college as a regular college student the next term.
for some reason that is absolutely incomprehensible to natalie, with a GED, the college will not require it to take reading 115.
it is not sure why they will not just allow it to take the language arts placement test to skip that class, this seems as though it would be a lot less convoluted than dropping out of college, applying to the program that will make the college pay for the GED exam, and then immediately starting as a regular college student next term.
<br><br>
portland community college is such a baffling institution.
it scored a 97 on their math placement exam. it scored a 680 on the SAT math section. it has AP credit for math 251 from taking AP calc. it has math credit for math 243 from taking AP statistics. it has PCC credit from taking math 111 under a dual credit program.
the only two math classes they said it was allowed to take under the high school diploma program were MATH 111 (which it did in sophomore year! come on) and ALC 60 (remedial math).
fortunately, there was a secret third option where they just let it not take any math class. this is stupid, what is the point of a placement test if they ignore the result? what is the point of taking the SAT if they ignore the result? what is the point of having AP credit if they ignore it?
why are they like this?
what is the point of taking an english class in which one learns what an adjective is? this is a thing that everyone learned already in second grade.
<br><br>
it is excited to be free of the high school diploma program.
hopefully the amount of stupid busywork is lower once it starts actual college classes next term.
it probably wont be, so hopefully it gets prescribed adderall.

View File

@ -1,6 +1,8 @@
<!-- vim: ft=html -->
<!-- TITLE: this website is bad and fonts are worse -->
<!-- DATE: 2024-07-24 03:12:19 -->
I am unsure as to what is going on?<br>
on $[make-link /html/natalie-sightings.html], the font never loads. I have failed to ascertain why it is that this occurs, as this has only become an issue today and no edits have been made to that page remotely recently. What on earth.<br><br>
<!-- CATEGORIES: complaining;computers -->
natalie is unsure as to what is going on?<br>
on $[make-link /html/natalie-sightings.html], the font never loads. natalie has failed to ascertain why it is that this occurs, as this has only become an issue today and no edits have been made to that page remotely recently. what on earth.<br><br>
I have an unfortunate habit of accruing computer ghosts that break things in horribly unclear ways.
it has an unfortunate habit of accruing computer ghosts that break things in horribly unclear ways.

View File

@ -1,9 +1,11 @@
<!-- vim: ft=html -->
<!-- TITLE: the medical system -->
<!-- DATE: 2024-09-07 05:44:47 -->
<h2>How is it this bad?</h2>
<!-- CATEGORIES: rambling;complaining;healthcare -->
<h2>how is it this bad?</h2>
<hr>
<h3>endocrinological</h3>
I take estrogen (tablets, 2mg, 3/day), spironolactone (tablets, 50mg, 2/day), and progesterone (gel capsuls, 100mg, 1/day) because I am transgender.
natalie takes estrogen (tablets, 2mg, 3/day), spironolactone (tablets, 50mg, 2/day), and progesterone (gel capsuls, 100mg, 1/day) because it is transgender.
here are the associated costs for the above medications:
<ul>
<li>estrogen: $14.05/month, $168.6/year</li>
@ -11,9 +13,9 @@ here are the associated costs for the above medications:
<li>progesterone: $15/month, $180/year</li>
<li>total: $420.6/year</li>
</ul>
you will note that estrogen and an anti androgen are responsible for 57.2% of the yearly cost.
one will note that estrogen and an anti androgen are responsible for 57.2% of the yearly cost.
this is ridiculous.<br>
I did some calculations:<br>
it did some calculations:<br>
cost of diy estrogen injectable solution (estradiol enanthate, 40mg/ml, 10ml): $70-$100<br>
necessary doseage for estrogen monotherapy: ~.13ml<br>
injection timing: every 7 days<br>
@ -26,9 +28,9 @@ why is diy cheaper than having healthcare?
this does not account for cost of needles and alcohol wipes, but that is negligible.
<hr>
<h3>neurological</h3>
the psychologist that did my autism evaluation thinks that I am depressed.
this is based on 0 evidence other than my consistently high score on the PHQ-9.
I contend that the PHQ-9 is not a useful tool of assessment for neurodivergent people.
the psychologist that did natalie's autism evaluation thinks that it is depressed.
this is based on 0 evidence other than its consistently high score on the PHQ-9.
it would like to contend that the PHQ-9 is not a useful tool of assessment for neurodivergent people.
<br><br>
apparently, it is somehow more conceiveable that I am autistic and depressed than it is that I could be autistic and have adhd.
I am very clearly not depressed, in fact, I would say that other than the negative impacts of the very obvious and DSM-V compliant signs of ADHD I exhibit, I am doing quite well.
apparently, it is somehow more conceiveable that this thing is autistic and depressed than it is that it could be autistic and have adhd.
it is very clearly not depressed, in fact, it would say that other than the negative impacts of the very obvious and DSM-V compliant signs of ADHD it exhibits, it is doing quite well.

View File

@ -0,0 +1,18 @@
<!-- vim: ft=html -->
<!-- TITLE: it hates debian -->
<!-- DATE: 2024-09-03 04:19:03 -->
<!-- CATEGORIES: complaining;computers;why is debian? -->
much to natalie's detriment, this server runs debian.
<br><br>
such circumstances would most likely be acceptable if its computers were not cursed with not working in hard to explain ways.<br>
issues it has with debian:
<ul>
<li>the package manager does not work.</li>
<li>it cannot install a modern python version without jumping through at least 12 very small and inconvienently located hoops.</li>
<li>it has to use nix as a package manager to reasonably do anything.</li>
<li>it has to interact with systemd without a layer of abstraction</li>
</ul>
<br>
it really needs to migrate to nixos for its server.
normally, such an idea as installing nixos would seem abhorrent to it, however nixos actually seems extremely reasonable for servers.
it does not understand how it is that people can run nixos on a computer that they use outside of a server application. ridiculous.

View File

@ -1,17 +1,19 @@
<!-- vim: ft=html -->
<!-- TITLE: there is less technical debt now. -->
<!-- DATE: 2024-07-27 17:24:16 -->
<p>I modified almost every html file in the site. there are less problems now. </p>
<!-- CATEGORIES: computers;change to site -->
<p>it modified almost every html file in the site. there are less problems now. </p>
<p>thoughts like these are no longer viewed as iframes, images are now handled by my img-caption script:
<p>thoughts like these are no longer viewed as iframes, images are now handled by its img-caption script:
<pre><xmp>
$[cat ./scripts/img-caption]
</xmp></pre>
Have I mentioned how much I love that a significant portion of the content on this site is generated by bash script?<br><br>
The above file is included here with <code>$\[echo $\[cat ./scripts/img-caption]]</code>. I greatly enjoy this.
has it mentioned how much it loves that a significant portion of the content on this site is generated by bash script?<br><br>
the above file is included here with <code>$\[echo $\[cat ./scripts/img-caption]]</code>. it greatly enjoys this.
</p>
<p>Given that the css that is included in every site has now been standardized, I should probably start generalizing the start of each html document such that I can change one file to update the head section of all documents.
Also, I should implement a header.</p>
<p>given that the css that is included in every page has now been standardized, natalie should probably start generalizing the start of each html document such that it can change one file to update the head section of all documents.
also, it should implement a header.</p>
<p>Over the past 3 days, I have increased the number of entries in the changelog by approximately 1.8 times. I am amused by this.</p>
<p>over the past 3 days, it has increased the number of entries in the changelog by approximately 1.8 times. it is amused by this.</p>

View File

@ -0,0 +1,25 @@
<!-- vim: ft=html -->
<!-- TITLE: do not under any circumstances expect anyone to join a stupid fucking discord server to read documentation. fuck you. -->
<!-- DATE: 2025-03-25 18:51:46 -->
<!-- CATEGORIES: rambling;angry, either rationally or irrationally -->
<h2>documentation is meant to be read</h2>
do not make it harder for this one, or anyone else to read. if you do, it will hate you forever.
$[img-caption /files/thoughts/fuck-you-make-your-docs-public.png "a warning in a github readme, advising users to read the pinned post in the project discord for help with a recent issue"]
$[make-footnote "font antialiasing is disabled on its computer. the image will look bad unless at a certain size."]
<br><br>
do not make anyone ever join a discord server to read documentation.
if you can write a message about a problem in discord and pin it, you can copy that information in to a markdown document and push it to git.
it does not want to join your discord server. it does not want to join your matrix room. it does not want to join your arcane and non-publicly-indexed forum of any kind.
it wants to fix the issue it is having.
<br><br>
it is perfectly willing to join community forums in cases where it is interested in the project. this is not the issue.
the issue is someone arbitrarily deciding that&mdash;instead of simply providing one with the relevant information&mdash;that one must first solve some poorly constructed riddle made out of group invite links and login portals first, at no benefit to literally anyone.
<br><br>
it cannot understand the thought process that leads to doing this.
unfortunately, it seems to be a common one, as this one has encountered many instances of this.
it cannot fathom how utterly muffin-brained someone must be to write documentation on how to solve an issue and then deliberately obfuscate said documentation.
this makes it more annoyed than scientific articles being paywalled, because it can't even blame the capitalist greed.
publish documentation or don't write it in the first place.$[make-footnote "the particular instance pictured made it annoyed enough to write a \"thought\" for the first time in months."]
<br>
$[put-footnotes]

40
html/thoughts/meta Normal file
View File

@ -0,0 +1,40 @@
<!-- vim: ft=html -->
<!-- TITLE: metapost -->
<!-- DATE: 2024-09-20 04:22:41 -->
<!-- CATEGORIES: rambling;complaining;computers -->
<h2>it is annoyed by this medium</h2>
<hr>
this medium presents thoughts in a 1 dimensional manor without an ergonomic way to link between different posts.
this annoys it because it generally tends to think of information such that each concept is a node and each relationship between concepts is an edge between those nodes on a two dimensional graph.
the format of this webpage does not allow for such structure due to the linearity.
<hr>
perhaps a "digital garden" or similar system would be a better means of managing this page.
<hr>
<h3>issues with implementing a digital garden style approach to a webpage like this one</h3>
natalie is allergic to organizational tools.
unfortunately, if it were to make a digital garden, it would probably write software to generate pages based on norg,$[make-footnote "natalie is only diagnosed with level 1 ASD and thus it does not have a build compliant with using emacs (requires ASD level 2+). also, neovim is already well integrated in to the way it does things."] which counts as an organizational tool.
<br>
why is it bad at organizational tools?
<br>
it assumes this is due to its marginally above average ability to remember information.
<br>
can this be mitigated by being very stuborn in its useage of such a tool?
<br>
maybe.
<hr>
making software that integrates with the way that this website already runs would be rather annoying due to the nest of complexity natalie has built up.
it supposes that it could have software similar to htmlgen that writes norg documents converted to html to natalieee.net/garden or something.
it could have even more symlinks floating around directories associated with this website, which would be kind of funny.
<hr>
another option would be to simply run a garden on a subdomain.
something like garden.natalieee.net would work, though then it must either retool its current webserver to be less horribly tied to this one specific project,$[make-footnote "thing it should do anyways"] or write an entirely different webserver.$[make-footnote "it starts college on monday, it should not do this"]
<hr>
another issue with doing such a thing is figuring out a reasonable schema for nodes in the graph.
it is sure there are things that are more intelligent than it that have thought about such issues before, but it thinks it would probably be more interesting to create its own.
it supposes it could keep everything in a flat directory. this seems silly, however it doubts its future predicting abilities when it comes to what categories it should put things in.
<hr>
implementing a digital garden seems as though it would probably demand redoing the whole website, actually.
it has already done that three to six times (depending on how one counts), and is not particularly keen on doing so again.
<br><br>
oh well, it shall consider alternatives for the structure of this webpage.
$[put-footnotes]

46
html/thoughts/meta-2 Normal file
View File

@ -0,0 +1,46 @@
<!-- vim: ft=html -->
<!-- TITLE: re: metapost; things resembling an improvement -->
<!-- DATE: 2024-10-21 05:01:21 -->
<!-- CATEGORIES: change to site;computers;rambling -->
natalie has created an alternative means of viewing thoughts. $[make-footnote "$(make-link '/html/view-thought.html' 'find it here')"]
this new method improves upon its complaint regarding linearity in the last metapost by creating a system by which each post can be viewed as its own page.
this in theory adds for ergonomic linking between posts, though doing so would somewhat deprecate the prior means of viewing them in favor of the new means.
it is not sure how to feel about this.
$[put-footnotes]
<hr>
its new means of thought viewing relies on some absolutely cursed code, it is very amused by this.
<pre>
<span class="-punctuation-bracket">(</span><span class="-function-macro">defun</span> <span class="-variable"><span class="-function">html</span></span> <span class="-punctuation-bracket">(</span><span class="-punctuation-bracket">)</span>
<span class="-punctuation-bracket">(</span><span class="-variable">page</span> <span class="String">&quot;$[echo '$'][test \&quot;$(echo '{' 'thought' '}' | sed 's/ //g')\&quot; != '{thought}' &amp;&amp; echo '{thought}' || echo thoughts index]&quot;</span>
<span class="-string-escape">`</span><span class="-punctuation-bracket">(</span><span class="-variable">section</span> <span class="-punctuation-bracket">(</span><span class="-punctuation-bracket">)</span>
<span class="String">&quot;$[echo '$'][echo &gt; /tmp/footnote_count]&quot;</span>
<span class="-punctuation-bracket">(</span><span class="-variable">h1</span> <span class="-punctuation-bracket">(</span><span class="SpecialChar"><span class="-punctuation-special">:</span>style</span> <span class="String">&quot;display: $[echo '$'][test \&quot;$(echo '{' 'thought' '}' | sed 's/ //g')\&quot; != '{thought}' &amp;&amp; echo block || echo none]&quot;</span><span class="-punctuation-bracket">)</span> <span class="String">&quot;$[echo '$'][cat ./html/thoughts/$(basename '{thought}') | grep '&lt;!-- TITLE:' | sed 's/&lt;!-- TITLE://; s/--&gt;//']&quot;</span><span class="-punctuation-bracket">)</span>
<span class="String">&quot;$[echo '$'][cat ./html/thoughts/$(basename '{thought}') | grep '&lt;!-- DATE:' | sed 's/&lt;!-- DATE://; s/--&gt;//']&quot;</span> <span class="-punctuation-bracket">(</span><span class="-variable">br</span><span class="-punctuation-bracket">)</span>
<span class="-punctuation-bracket">(</span><span class="-variable">div</span> <span class="-punctuation-bracket">(</span><span class="-punctuation-bracket">)</span> <span class="String">&quot;$[echo '$'][include \&quot;./html/thoughts/$(basename '{thought}')\&quot;]&quot;</span><span class="-punctuation-bracket">)</span>
<span class="String">&quot;$[echo '$'][test \&quot;$(echo '{' 'thought' '}' | sed 's/ //g')\&quot; != '{thought}' || (echo '&lt;h1&gt;thoughts:&lt;/h1&gt;'; ls ./html/thoughts | while read -r file; do echo \&quot;&lt;p&gt;$(cat ./html/thoughts/$file | grep '&lt;!-- DATE:' | sed 's/&lt;!-- DATE://; s/--&gt;//') &lt;a href=?thought=$file&gt;$(cat ./html/thoughts/$file | grep '&lt;!-- TITLE:' | sed 's/&lt;!-- TITLE://; s/--&gt;//')&lt;/a&gt;&lt;/p&gt;\&quot;; done | sort --numeric --reverse)]&quot;</span><span class="-punctuation-bracket">)</span><span class="-punctuation-bracket">)</span><span class="-punctuation-bracket">)</span>
</pre>
<details>
<summary>
this compiles to the following:
</summary>
<pre><xmp>
$[cat ./html/view-thought.html]
</xmp></pre>
</details>
a particularly amusing bit of this is <pre>
<span class="String">&quot;$[echo '$'][test \&quot;$(echo '{' 'thought' '}' | sed 's/ //g')\&quot; != '{thought}'</span>
</pre>
the reason the presence of the thought being set via the url parameter is checked like that is because comparing '{thought}' to '{thought}' would always be true.
when an html file contains a variable that the server does not have present when parsing the file, the variable is left as it is instead of being set to ''.
accordingly, we cannot do something like <code>test -z '{thought}'.</code>
<br><br>
one may think "natalie, is it not dangerous to run bash on user input supplied via url param? could one not send a request like the following: <pre>https://natalieee.net/html/view-thought.html?thought=python-goto%27;while%20true;%20do%20echo%20foo%20%3E%3E%20aoeu;%20done;%27</pre>"
the answer to such a thought is "yes, this is bad".
this badness should(?) be mitigated by the fact that it is impossible to get the server to process a ' in the request params. this hopefully makes RCE impossible, if not email it, please.
<hr>
another interesting feature of this new format is that it would allow for reasonable per-post comments.
this seems like it would be a good feature.
of course, no one actually reads these, but whatever.
per post comments would still be interesting, it could continue its tradition of refusing to use a database for absolutely no reason.
per post comments would also make the view-thought.html file even more cursed, which is amusing to it.

4
html/thoughts/monorepo Normal file
View File

@ -0,0 +1,4 @@
<!-- vim: ft=html -->
<!-- TITLE: this should really probably be made in to a monorepo. -->
<!-- DATE: 2024-10-06 23:47:51 -->
<!-- CATEGORIES: no body -->

31
html/thoughts/phones Normal file
View File

@ -0,0 +1,31 @@
<!-- vim: ft=html -->
<!-- TITLE: why are phones so bad? -->
<!-- DATE: 2024-10-23 10:10:10 -->
<!-- CATEGORIES: complaining;computers;natalie specific issues -->
in its experience, there are 0 phones that do not break every 2-4 months.
this is stupid because society made the baffling and frankly quite bad near unilateral decision that phones would be largely required to be a functional being.
<hr>
natalie used to have an iphone SE 1st gen (a1662).
this phone was awful by virtue of being a phone, but it worked.
unfortunately, phones are garbage, so this one probably spent $160 on screen replacements for it$[make-footnote 'how on earth can phones not survive being in a pocket? this is very easy'] because the screen would break every 2-4 months.
also, its home button, both cameras, and speakers all ceased to function and were accordingly removed.
<br><br>
eventually, its father gave it his old phone. this was a samsung galaxy s10e.
this phone managed to be worse than the iphone SE 1st gen a1662.
why on earth would anything design a phone the screen of which protrudes past the body of the phone such that if one dares to even observe it, the screen breaks?
this is like if they asked an engineer to design a phone and then did the exact opposite.
also, the corners were rounded.
not the corners of the case (though those were too), but the corners of the actual screen.
why on earth would one ever do this?
<blockquote>hello, LCD manufacturer? we would like a more expensive and worse screen please.</blockquote>
nonsense.
<br><br>
anyways, the s10e stopped charging and gives an overheat warning 80% of the time that natalie tries to turn it on (just being plugged in to usb-c).
it got this phone in july, so that is within the predicted range of 2-4 months.
<br><br>
why are phones like this?
it wants to not own a phone but they are so necessary.
it really is not sure why people need to be able to {text,call} it.
if one wants to communicate with it, they can send it an email.
this is not a difficult concept, and yet it still regularly receives text messages and phone calls.
$[put-footnotes]

172
html/thoughts/python-goto Normal file
View File

@ -0,0 +1,172 @@
<!-- vim: ft=html -->
<!-- TITLE: implementing goto statements in python (in under 50 lines)-->
<!-- DATE: 2024-09-12 08:43:04 -->
<!-- CATEGORIES: hacks;computers -->
python is extremely extensible, though natalie is not sure that is intentional.
<hr>
firstly, here is the end product of this venture:
<pre>
<span class="-keyword">from</span> <span class="-variable"><span class="DiagnosticUnderlineError">goto_label</span></span> <span class="-keyword">import</span> <span class="Operator"><span class="SpecialChar">*</span></span>
<span class="-variable">count</span> <span class="Operator">=</span> <span class="Number">0</span>
<span class="Comment"><span class="-spell">#LABEL lol</span></span>
<span class="-variable"><span class="-function"><span class="-function-builtin">print</span></span></span><span class="-punctuation-bracket">(</span><span class="String">'this prints twice'</span><span class="-punctuation-bracket">)</span>
<span class="-variable">count</span> <span class="Operator">+=</span> <span class="Number">1</span>
<span class="-variable"><span class="DiagnosticUnderlineError">goto</span></span> <span class="Operator">&amp;</span><span class="-variable"><span class="DiagnosticUnderlineError">lol</span></span> <span class="-keyword">if</span> <span class="-punctuation-bracket">(</span><span class="-variable">count</span> <span class="Operator">&lt;=</span> <span class="Number">1</span><span class="-punctuation-bracket">)</span> <span class="-keyword">else</span> <span class="-variable"><span class="DiagnosticUnderlineError">goto</span></span> <span class="Operator">&amp;</span><span class="-variable"><span class="DiagnosticUnderlineError">goto_statements_are_a_perfectly_reasonable_thing_to_have_in_python</span></span>
<span class="Comment"><span class="-spell">#LABEL last_print</span></span>
<span class="-variable"><span class="-function"><span class="-function-builtin">print</span></span></span><span class="-punctuation-bracket">(</span><span class="String">'this prints last'</span><span class="-punctuation-bracket">)</span>
<span class="-variable"><span class="DiagnosticUnderlineWarn"><span class="DiagnosticUnderlineError">goto</span></span></span><span class="DiagnosticUnderlineWarn"> <span class="Operator">&amp;</span><span class="-variable"><span class="DiagnosticUnderlineError">stop</span></span></span><span class="-variable"></span>
<span class="Comment"><span class="-spell">#LABEL ellipsis</span></span>
<span class="-variable"><span class="-function"><span class="-function-builtin">print</span></span></span><span class="-punctuation-bracket">(</span><span class="String">'at least Ellipsis() has some use now, for normal reasons that make sense'</span><span class="-punctuation-bracket">)</span>
<span class="-variable"><span class="DiagnosticUnderlineWarn"><span class="DiagnosticUnderlineError">goto</span></span></span><span class="DiagnosticUnderlineWarn"> <span class="Operator">&amp;</span><span class="-variable"><span class="DiagnosticUnderlineError">last_print</span></span></span><span class="-variable"></span>
<span class="Comment"><span class="-spell">#LABEL goto_statements_are_a_perfectly_reasonable_thing_to_have_in_python</span></span>
<span class="-variable"><span class="-function"><span class="-function-builtin">print</span></span></span><span class="-punctuation-bracket">(</span><span class="String">'it is sure this is how the variety of language features it is abusing were intended to be used'</span><span class="-punctuation-bracket">)</span>
<span class="-variable"><span class="DiagnosticUnderlineWarn"><span class="DiagnosticUnderlineError">goto</span></span></span><span class="DiagnosticUnderlineWarn"> <span class="Operator">&amp;</span><span class="-variable">ellipsis</span></span><span class="-variable"></span>
<span class="Comment"><span class="-spell">#LABEL stop</span></span>
<span class="-punctuation-delimiter">...</span>
</pre>
its beautiful.<br>
this outputs the following:
<pre>
this prints twice
this prints twice
it is sure this is how the variety of language features it is abusing were intended to be used
at least Ellipsis() has some use now, for normal reasons that make sense
this prints last
</pre>
<hr>
now then, how does this work?
<h3>design decisions</h3>
given that evidence suggests python programs can be edited, natalie decided not to use line number based gotos and instead define labels that could be jumped to.
this makes things less annoying to edit and maintain, and developer experience is obviously a very important consideration with this project.<br>
additionally, to maximize ease with which this ""library"" can be utilized, one must only import the file to experience the wonder of python with goto statements.
<h3>technical implementation</h3>
firstly, labels: <br>
goto_label.py has a function prepare_labels(fp, scope).
this function looks for any labels (defined via /^#LABEL labelname/) in the file at fp, and defines them under the scope scope.
each label is defined as a label object. natalie resents using an object for this (which you can see by its not using the class keyword), but python is python and you cannot override operators without having a class.
it could just not override the operators, but it wanted goto to be called in a unique way that is separate from how a function would be called.
label objects have only one attribute: lineno, which is determined by an extremely rudimentary parser and then offset by 2 to account for the fact that lines are 0 indexed in the "parser" but not in real life and the fact that the label definition comment takes its own line.
<br><br>
the actual goto implementation:<br>
it does not remember how this works because it wrote most of the _goto function like 3 months ago after reading the sys and inspect module docs.
its projects have this fun property wherein they are in one of three states: done; not touched or thought about for 2-36 months; and done.
oh well, the goto function is vaguely self explanatory anyways.
<br>
there is some weirdness with operator overloading and how every goto statement is actually just calling what would normally be the bitwise and operator on an instance of the class _goto (not to be confused with the function _goto) and a label object, but that is both very simple and not required to understand this.<br>
also, it does not want to explain that because it is tired.
<br><br>
automatically parsing the importing file on import:<br>
normally, globals are not shared between modules, but python has this cool feature where if there is a general statement to be made about it then this statement can be invalidated using either the sys, inspect, or ctypes library.
this is easily the simplest part as we just grab the filename and global scope of the importing file via the inspect library and pass them to prepare_labels().
<hr>
<h3>goto_label.py</h3>
<pre>
<span class="-keyword">import</span> <span class="-variable">sys</span><span class="-punctuation-delimiter">,</span> <span class="-variable">inspect</span>
<span class="-variable">debug</span> <span class="Operator">=</span> <span class="Boolean">False</span>
<span class="-keyword-function">def</span> <span class="-variable"><span class="-function">prepare_labels</span></span><span class="-punctuation-bracket">(</span><span class="-variable"><span class="-variable">fp</span></span><span class="-punctuation-delimiter">,</span> <span class="-variable"><span class="-variable">scope</span></span><span class="-punctuation-bracket">)</span><span class="-punctuation-delimiter">:</span>
<span class="-keyword">with</span> <span class="-variable"><span class="-function"><span class="-function-builtin">open</span></span></span><span class="-punctuation-bracket">(</span><span class="-variable">fp</span><span class="-punctuation-delimiter">,</span> <span class="String">'r'</span><span class="-punctuation-bracket">)</span> <span class="-keyword">as</span> <span class="-variable">f</span><span class="-punctuation-delimiter">:</span>
<span class="-variable">lines</span> <span class="Operator">=</span> <span class="-variable">f</span><span class="-punctuation-delimiter">.</span><span class="-variable"><span class="-variable"><span class="-function">readlines</span></span></span><span class="-punctuation-bracket">(</span><span class="-punctuation-bracket">)</span>
<span class="-keyword">for</span> <span class="-variable">lineno</span><span class="-punctuation-delimiter">,</span> <span class="-variable">line</span> <span class="-keyword-operator">in</span> <span class="-variable"><span class="-function"><span class="-function-builtin">enumerate</span></span></span><span class="-punctuation-bracket">(</span><span class="-variable">lines</span><span class="-punctuation-bracket">)</span><span class="-punctuation-delimiter">:</span>
<span class="-keyword">if</span> <span class="-variable">line</span><span class="-punctuation-delimiter">.</span><span class="-variable"><span class="-variable"><span class="-function">startswith</span></span></span><span class="-punctuation-bracket">(</span><span class="String">'#LABEL'</span><span class="-punctuation-bracket">)</span><span class="-punctuation-delimiter">:</span>
<span class="Comment"><span class="-spell"># 1 + 1, first to account for 0 index then to account for comment line</span></span>
<span class="-variable">scope</span><span class="-punctuation-delimiter">.</span><span class="-variable"><span class="-constant-builtin"><span class="-variable"><span class="-function">__setitem__</span></span></span></span><span class="-punctuation-bracket">(</span><span class="-variable">line</span><span class="-punctuation-delimiter">.</span><span class="-variable"><span class="-variable"><span class="-function">split</span></span></span><span class="-punctuation-bracket">(</span><span class="String">' '</span><span class="-punctuation-bracket">)</span><span class="-punctuation-bracket">[</span><span class="Number">1</span><span class="-punctuation-bracket">]</span><span class="-punctuation-delimiter">.</span><span class="-variable"><span class="-variable"><span class="-function">strip</span></span></span><span class="-punctuation-bracket">(</span><span class="-punctuation-bracket">)</span><span class="-punctuation-delimiter">,</span> <span class="-variable"><span class="-function"><span class="-function-builtin"><span class="Type">type</span></span></span></span><span class="-punctuation-bracket">(</span>
<span class="String">'label'</span><span class="-punctuation-delimiter">,</span>
<span class="-punctuation-bracket">(</span><span class="-variable"><span class="Type">object</span></span><span class="-punctuation-delimiter">,</span><span class="-punctuation-bracket">)</span><span class="-punctuation-delimiter">,</span>
<span class="-variable"><span class="-function"><span class="-function-builtin"><span class="Type">dict</span></span></span></span><span class="-punctuation-bracket">(</span><span class="-variable"><span class="-variable">line</span></span><span class="Operator">=</span><span class="-variable">lineno</span><span class="Operator">+</span><span class="Number">2</span><span class="-punctuation-bracket">)</span>
<span class="-punctuation-bracket">)</span><span class="-punctuation-bracket">(</span><span class="-punctuation-bracket">)</span><span class="-punctuation-bracket">)</span>
<span class="-variable">_goto</span> <span class="Operator">=</span> <span class="-variable"><span class="-function"><span class="-function-builtin"><span class="Type"><span class="DiagnosticUnderlineError"><span class="DiagnosticUnderlineError">type</span></span></span><span class="DiagnosticUnderlineError"><span class="DiagnosticUnderlineError"></span></span></span><span class="DiagnosticUnderlineError"><span class="DiagnosticUnderlineError"></span></span></span><span class="DiagnosticUnderlineError"><span class="DiagnosticUnderlineError"></span></span></span><span class="DiagnosticUnderlineError"><span class="DiagnosticUnderlineError"><span class="-punctuation-bracket">(</span><span class="String">'goto'</span><span class="-punctuation-delimiter">,</span> <span class="-punctuation-bracket">(</span><span class="-variable"><span class="Type">object</span></span><span class="-punctuation-delimiter">,</span><span class="-punctuation-bracket">)</span><span class="-punctuation-delimiter">,</span> <span class="-variable"><span class="-function"><span class="-function-builtin"><span class="Type">dict</span></span></span></span><span class="-punctuation-bracket">(</span><span class="-variable"><span class="-constant-builtin"><span class="-variable">__and__</span></span></span><span class="Operator">=</span><span class="-keyword-function">lambda</span> <span class="-variable"><span class="-variable">_</span></span><span class="-punctuation-delimiter">,</span> <span class="-variable"><span class="-variable">other</span></span><span class="-punctuation-delimiter">:</span> <span class="-variable"><span class="-function">_goto</span></span><span class="-punctuation-bracket">(</span><span class="-variable">other</span><span class="-punctuation-delimiter">.</span><span class="-variable"><span class="-variable">line</span></span><span class="-punctuation-bracket">)</span><span class="-punctuation-bracket">)</span><span class="-punctuation-bracket">)</span></span><span class="-punctuation-bracket"></span></span><span class="-punctuation-bracket"></span>
<span class="-variable">goto</span> <span class="Operator">=</span> <span class="-variable"><span class="-function"><span class="DiagnosticUnderlineError">_goto</span></span><span class="DiagnosticUnderlineError"></span></span><span class="DiagnosticUnderlineError"><span class="-punctuation-bracket">(</span><span class="-punctuation-bracket">)</span></span><span class="-punctuation-bracket"></span>
<span class="-keyword-function">def</span> <span class="-variable"><span class="-function">_goto</span></span><span class="-punctuation-bracket">(</span><span class="-variable"><span class="-variable">lineno</span></span><span class="-punctuation-bracket">)</span><span class="-punctuation-delimiter">:</span>
<span class="-keyword">if</span> <span class="-variable">debug</span><span class="-punctuation-delimiter">:</span> <span class="-variable"><span class="-function"><span class="-function-builtin">print</span></span></span><span class="-punctuation-bracket">(</span><span class="-variable">lineno</span><span class="-punctuation-bracket">)</span>
<span class="-variable">frame</span> <span class="Operator">=</span> <span class="-variable">sys</span><span class="-punctuation-delimiter">.</span><span class="-variable"><span class="-variable"><span class="-function">_getframe</span></span></span><span class="-punctuation-bracket">(</span><span class="-punctuation-bracket">)</span><span class="-punctuation-delimiter">.</span><span class="-variable"><span class="-variable">f_back</span></span><span class="-punctuation-delimiter">.</span><span class="-variable"><span class="-variable"><span class="DiagnosticUnderlineError">f_back</span></span></span>
<span class="-variable">called_from</span> <span class="Operator">=</span> <span class="-variable">frame</span>
<span class="-keyword-function">def</span> <span class="-variable"><span class="-function">hook</span></span><span class="-punctuation-bracket">(</span><span class="-variable"><span class="-variable">frame</span></span><span class="-punctuation-delimiter">,</span> <span class="-variable"><span class="-variable">event</span></span><span class="-punctuation-delimiter">,</span> <span class="-variable"><span class="-variable"><span class="Comment">arg</span></span></span><span class="-punctuation-bracket">)</span><span class="-punctuation-delimiter">:</span>
<span class="-keyword">if</span> <span class="-variable">event</span> <span class="Operator">==</span> <span class="String">'line'</span> <span class="-keyword-operator">and</span> <span class="-variable">frame</span> <span class="Operator">==</span> <span class="-variable">called_from</span><span class="-punctuation-delimiter">:</span>
<span class="-keyword">try</span><span class="-punctuation-delimiter">:</span>
<span class="-variable">frame</span><span class="-punctuation-delimiter">.</span><span class="-variable"><span class="-variable">f_lineno</span></span> <span class="Operator">=</span> <span class="-variable">lineno</span>
<span class="-keyword">except</span> <span class="-variable"><span class="Type"><span class="Type">ValueError</span></span></span> <span class="-keyword">as</span> <span class="-variable">e</span><span class="-punctuation-delimiter">:</span>
<span class="-variable"><span class="-function"><span class="-function-builtin">print</span></span></span><span class="-punctuation-bracket">(</span><span class="String">&quot;jump failed:&quot;</span><span class="-punctuation-delimiter">,</span> <span class="-variable">e</span><span class="-punctuation-bracket">)</span>
<span class="-keyword">while</span> <span class="-variable">frame</span><span class="-punctuation-delimiter">:</span>
<span class="-variable">frame</span><span class="-punctuation-delimiter">.</span><span class="-variable"><span class="-variable">f_trace</span></span> <span class="Operator">=</span> <span class="-constant-builtin">None</span>
<span class="-variable">frame</span> <span class="Operator">=</span> <span class="-variable">frame</span><span class="-punctuation-delimiter">.</span><span class="-variable"><span class="-variable">f_back</span></span>
<span class="-keyword">return</span> <span class="-constant-builtin">None</span>
<span class="-keyword">return</span> <span class="-variable">hook</span>
<span class="-keyword">while</span> <span class="-variable">frame</span><span class="-punctuation-delimiter">:</span>
<span class="-variable">frame</span><span class="-punctuation-delimiter">.</span><span class="-variable"><span class="-variable">f_trace</span></span> <span class="Operator">=</span> <span class="-variable">hook</span>
<span class="-variable">frame</span> <span class="Operator">=</span> <span class="-variable">frame</span><span class="-punctuation-delimiter">.</span><span class="-variable"><span class="-variable">f_back</span></span>
<span class="-variable">sys</span><span class="-punctuation-delimiter">.</span><span class="-variable"><span class="-variable"><span class="-function">settrace</span></span></span><span class="-punctuation-bracket">(</span><span class="-variable">hook</span><span class="-punctuation-bracket">)</span>
<span class="-variable"><span class="-function">prepare_labels</span></span><span class="-punctuation-bracket">(</span><span class="-variable">inspect</span><span class="-punctuation-delimiter">.</span><span class="-variable"><span class="-variable"><span class="-function">stack</span></span></span><span class="-punctuation-bracket">(</span><span class="-punctuation-bracket">)</span><span class="-punctuation-bracket">[</span><span class="Operator">-</span><span class="Number">1</span><span class="-punctuation-bracket">]</span><span class="-punctuation-delimiter">.</span><span class="-variable"><span class="-variable">frame</span></span><span class="-punctuation-delimiter">.</span><span class="-variable"><span class="-variable">f_code</span></span><span class="-punctuation-delimiter">.</span><span class="-variable"><span class="-variable">co_filename</span></span><span class="-punctuation-delimiter">,</span> <span class="-variable">inspect</span><span class="-punctuation-delimiter">.</span><span class="-variable"><span class="-variable"><span class="-function">stack</span></span></span><span class="-punctuation-bracket">(</span><span class="-punctuation-bracket">)</span><span class="-punctuation-bracket">[</span><span class="Operator">-</span><span class="Number">1</span><span class="-punctuation-bracket">]</span><span class="-punctuation-delimiter">.</span><span class="-variable"><span class="-variable">frame</span></span><span class="-punctuation-delimiter">.</span><span class="-variable"><span class="-variable">f_globals</span></span><span class="-punctuation-bracket">)</span>
</pre>
<hr>
natalie finds much enjoyment in the syntax for calling a goto statement being goto &label. it looks like something that thoroughly does not belong in python.
<br><br>
ideas for future improvement:
making label names override builtin function names (unreasonably possible) and making a __call__ method on label objects that jumps to that label.
hopefully no one creates any labels named "print".
<hr>
random other programs it (badly) implemented using if conditions only for goto statements out of boredom:
<h3>fibonacci</h3>
<pre>
<span class="-keyword">from</span> <span class="-variable"><span class="DiagnosticUnderlineError">goto_label</span></span> <span class="-keyword">import</span> <span class="Operator"><span class="SpecialChar">*</span></span>
<span class="-keyword-function">def</span> <span class="-variable"><span class="-function">fib</span></span><span class="-punctuation-bracket">(</span><span class="-variable"><span class="-variable">n</span></span><span class="-punctuation-bracket">)</span><span class="-punctuation-delimiter">:</span>
<span class="-variable">depth</span> <span class="Operator">=</span> <span class="Number">0</span>
<span class="-variable">a</span> <span class="Operator">=</span> <span class="Number">1</span>
<span class="-variable">b</span> <span class="Operator">=</span> <span class="Number">0</span>
<span class="Comment"><span class="-spell">#LABEL fib_start</span></span>
<span class="-variable"><span class="-function"><span class="-function-builtin">print</span></span></span><span class="-punctuation-bracket">(</span><span class="-variable">a</span><span class="-punctuation-bracket">)</span>
<span class="-variable">a</span><span class="-punctuation-delimiter">,</span> <span class="-variable">b</span><span class="-punctuation-delimiter">,</span> <span class="-variable">depth</span> <span class="Operator">=</span> <span class="-variable">b</span><span class="-punctuation-delimiter">,</span> <span class="-variable">b</span> <span class="Operator">+</span> <span class="-variable">a</span><span class="-punctuation-delimiter">,</span> <span class="-variable">depth</span> <span class="Operator">+</span> <span class="Number">1</span>
<span class="-keyword">if</span> <span class="-variable">depth</span> <span class="Operator">&gt;</span> <span class="-variable">n</span><span class="Operator">+</span><span class="Number">1</span><span class="-punctuation-delimiter">:</span> <span class="-variable"><span class="DiagnosticUnderlineWarn"><span class="DiagnosticUnderlineError">goto</span></span></span><span class="DiagnosticUnderlineWarn"> <span class="Operator">&amp;</span><span class="-variable"><span class="DiagnosticUnderlineError">fib_end</span></span></span><span class="-variable"></span>
<span class="-variable"><span class="DiagnosticUnderlineWarn"><span class="DiagnosticUnderlineError">goto</span></span></span><span class="DiagnosticUnderlineWarn"> <span class="Operator">&amp;</span><span class="-variable"><span class="DiagnosticUnderlineError">fib_start</span></span></span><span class="-variable"></span>
<span class="Comment"><span class="-spell">#LABEL fib_end</span></span>
<span class="-punctuation-delimiter">...</span>
<span class="-variable"><span class="-function">fib</span></span><span class="-punctuation-bracket"><span class="MatchParen">(</span></span><span class="Number">20</span><span class="-punctuation-bracket"><span class="MatchParen">)</span></span>
</pre>
<h3>fizzbuzz</h3>
<pre>
<span class="-keyword">from</span> <span class="-variable"><span class="DiagnosticUnderlineError">goto_label</span></span> <span class="-keyword">import</span> <span class="Operator"><span class="SpecialChar">*</span></span>
<span class="-keyword-function">def</span> <span class="-variable"><span class="-function">fizzbuzz</span></span><span class="-punctuation-bracket">(</span><span class="-variable"><span class="-variable">n</span></span><span class="-punctuation-bracket">)</span><span class="-punctuation-delimiter">:</span>
<span class="-variable">count</span> <span class="Operator">=</span> <span class="Number">0</span>
<span class="Comment"><span class="-spell">#LABEL fizz_start</span></span>
<span class="-variable"><span class="Type">str</span></span> <span class="Operator">=</span> <span class="String">''</span>
<span class="-keyword">if</span> <span class="-variable">n</span> <span class="Operator">==</span> <span class="-variable">count</span><span class="-punctuation-delimiter">:</span> <span class="-variable"><span class="DiagnosticUnderlineWarn"><span class="DiagnosticUnderlineError">goto</span></span></span><span class="DiagnosticUnderlineWarn"> <span class="Operator">&amp;</span><span class="-variable"><span class="DiagnosticUnderlineError">fizz_end</span></span></span><span class="-variable"></span><span class="-punctuation-delimiter">;</span>
<span class="-variable">count</span> <span class="Operator">+=</span> <span class="Number">1</span>
<span class="-keyword">if</span> <span class="-variable">count</span> <span class="Operator">%</span> <span class="Number">3</span> <span class="Operator">==</span> <span class="Number">0</span><span class="-punctuation-delimiter">:</span> <span class="-variable"><span class="DiagnosticUnderlineWarn"><span class="DiagnosticUnderlineError">goto</span></span></span><span class="DiagnosticUnderlineWarn"> <span class="Operator">&amp;</span><span class="-variable"><span class="DiagnosticUnderlineError">fizz</span></span></span><span class="-variable"></span><span class="-punctuation-delimiter">;</span>
<span class="Comment"><span class="-spell">#LABEL buzz_check</span></span>
<span class="-keyword">if</span> <span class="-variable">count</span> <span class="Operator">%</span> <span class="Number">5</span> <span class="Operator">==</span> <span class="Number">0</span><span class="-punctuation-delimiter">:</span> <span class="-variable"><span class="DiagnosticUnderlineWarn"><span class="DiagnosticUnderlineError">goto</span></span></span><span class="DiagnosticUnderlineWarn"> <span class="Operator">&amp;</span><span class="-variable"><span class="DiagnosticUnderlineError">buzz</span></span></span><span class="-variable"></span><span class="-punctuation-delimiter">;</span>
<span class="-variable"><span class="DiagnosticUnderlineWarn"><span class="DiagnosticUnderlineError">goto</span></span></span><span class="DiagnosticUnderlineWarn"> <span class="Operator">&amp;</span><span class="-variable"><span class="DiagnosticUnderlineError">output</span></span></span><span class="-variable"></span><span class="-punctuation-delimiter">;</span>
<span class="Comment"><span class="-spell">#LABEL fizz</span></span>
<span class="-variable"><span class="Type">str</span></span> <span class="Operator">+=</span> <span class="String">'fizz'</span>
<span class="-variable"><span class="DiagnosticUnderlineWarn"><span class="DiagnosticUnderlineError">goto</span></span></span><span class="DiagnosticUnderlineWarn"> <span class="Operator">&amp;</span><span class="-variable"><span class="DiagnosticUnderlineError">buzz_check</span></span></span><span class="-variable"></span><span class="-punctuation-delimiter">;</span>
<span class="Comment"><span class="-spell">#LABEL buzz </span></span>
<span class="-variable"><span class="Type">str</span></span> <span class="Operator">+=</span> <span class="String">'buzz'</span>
<span class="Comment"><span class="-spell">#LABEL output</span></span>
<span class="-variable"><span class="-function"><span class="-function-builtin">print</span></span></span><span class="-punctuation-bracket">(</span><span class="-variable"><span class="Type">str</span></span> <span class="-keyword">if</span> <span class="-variable"><span class="Type">str</span></span> <span class="-keyword">else</span> <span class="-variable">count</span><span class="-punctuation-bracket">)</span>
<span class="-variable"><span class="DiagnosticUnderlineWarn"><span class="DiagnosticUnderlineError">goto</span></span></span><span class="DiagnosticUnderlineWarn"> <span class="Operator">&amp;</span><span class="-variable"><span class="DiagnosticUnderlineError">fizz_start</span></span></span><span class="-variable"></span><span class="-punctuation-delimiter">;</span>
<span class="Comment"><span class="-spell">#LABEL fizz_end </span></span>
<span class="-punctuation-delimiter">...</span>
<span class="-variable"><span class="-function">fizzbuzz</span></span><span class="-punctuation-bracket"><span class="MatchParen">(</span></span><span class="Number">100</span><span class="-punctuation-bracket"><span class="MatchParen">)</span></span>
</pre>
<hr>
<footnote>number of times the python interpreter segfaulted today: 7</footnote><br>
<footnote>syntax highlighting here is done via :TOhtml in vim. it should work?</footnote>

View File

@ -1,3 +1,5 @@
<!-- vim: ft=html -->
<!-- TITLE: re: post from 2024-07-24 10:12:19 -->
<!-- DATE: 2024-07-28 11:25:45 -->
This issue has fixed itself. I do not know why. I did not do anything that would have fixed this. I am mildly perturbed.
<!-- CATEGORIES: followup to prior post -->
this issue has fixed itself. it does not know why. it did not do anything that would have fixed this. it is mildly perturbed.

View File

@ -1,5 +1,7 @@
<!-- vim: ft=html -->
<!-- DATE: 2024-09-01 17:38:24 -->
<!-- TITLE: re: last thought; changes have been implemented -->
<!-- CATEGORIES: computers;change to site;followup to prior post -->
this site now uses <a href='https://git.natalieee.net/nat/htmlgen'>htmlgen</a> to generate html from common lisp and bash commands at compile time.
this has massively improved loading times on nearly all pages by cutting the number of bash commands that need to be used.
<hr>
@ -28,12 +30,12 @@ Benchmark 1: curl http://localhost:5002/html/natalie-info.html
Range (min … max): 15.0 ms … 20.6 ms 30 runs
</pre>
<hr>
overall, this is a very significant performance improvement. now I need to update site-info again.<br>
unfortunately, I broke my blog. maybe I will fix it at some point.<br>
overall, this is a very significant performance improvement. now, it needs to update site-info again.<br>
unfortunately, it broke its blog. maybe it will fix it at some point.<br>
todo: edit html/blog/index.html to state this
<hr>
here is an amusing video of the code for this web page being broken during the migration to this system.
I did not actually fix this, I only removed the problematic code from the first post here.<br>
natalie did not actually fix this, it only removed the problematic code from the first post here.<br>
<video controls>
<source src='/files/thought-issues.mp4'/>
</video>

View File

@ -1,2 +1,4 @@
<!-- TITLE: note to self: develop better sleep schedule -->
<!-- vim: ft=html -->
<!-- TITLE: note to itself: develop better sleep schedule -->
<!-- DATE: 2024-09-07 11:41:41 -->
<!-- CATEGORIES: no body -->

View File

@ -1,5 +1,7 @@
<!-- TITLE: my friend made me a shirt! -->
<!-- vim: ft=html -->
<!-- TITLE: its friend made it a shirt! -->
<!-- DATE: 2024-08-09 20:22:38 -->
<!-- CATEGORIES: natalie being only one word that starts with "a" -->
<image-column-container>
<image-container>
<flex-column>
@ -8,14 +10,14 @@
</flex-column>
</image-container>
<text-column>
<h2>this is my favorite shirt!</h2>
<p>it is so good! and my friend made it!</p>
<h2>this is its favorite shirt!</h2>
<p>it is so good! and its friend made it!</p>
<p>it is purported to be made with a cnc vinyl cutter and a heat press.</p>
<p>
I very much enjoy the talgo 8 trainsets that are operated by amtrak here.
I find the shared bogie design of the cars to be interesting.
I greatly enjoy the fact that I have fake talgo merchandise now.
this friend and I rode this model of train to seattle somewhat recently, it was much nicer than the other amtrak rolling stock, which we rode on our return journey.
it very much enjoys the talgo 8 trainsets that are operated by amtrak here.
it finds the shared bogie design of the cars to be interesting.
it greatly enjoys the fact that it has fake talgo merchandise now.
this friend and natalie rode this model of train to seattle somewhat recently, it was much nicer than the other amtrak rolling stock, which the two of us rode on our return journey.
</p>
</text-column>
</image-column-container>

View File

@ -1,17 +1,19 @@
<!-- TITLE: This website has a lot of technical debt and I should rewrite it -->
<!-- vim: ft=html -->
<!-- TITLE: this website has a lot of technical debt and natalie should rewrite it -->
<!-- DATE: 2024-07-26 01:41:42 -->
This is horrible and bad. The html of just about every webpage is utter garbage because I am me.
Rewriting everything is going to be such a task, a task that I really should do.
<!-- CATEGORIES: complaining;computers;rambling -->
this is horrible and bad. the html of just about every webpage is utter garbage because the author is natalie.
rewriting everything is going to be such a task, a task that it really should do.
<br><br>
Woo!
woo!
<br><br>
I should really unbodge the css at some point, too. Also, I need to remember to add a license and probably also a footer at some point.
it should really unbodge the css at some point, too. also, it needs to remember to add a license and probably also a footer at some point.
<br><br>
I have at the very least fixed some of the horrendous practices seen on this website by the implementation of nginx as a proxy service.
Now, when not having a valid ssl cert (for a good reason, this will be fixed when there ceases to be a good reason) breaks my webserver (for some reason), not everything breaks!
it has at the very least fixed some of the horrendous practices seen on this website by the implementation of nginx as a proxy service.
now, when not having a valid ssl cert (for a good reason, this will be fixed when there ceases to be a good reason) breaks its webserver (for some reason), not everything breaks!
hooray.
<br><br>
I need to stop using an iframe for these, this page was designed prior to caving to my friends demand that I make my website "have" "consistent styling" and also "not use the whole page width for text,"
it needs to stop using an iframe for these, this page was designed prior to it caving to its friends demand that it makes its website "have" "consistent styling" and also "not use the whole page width for text,"
thus it used to be that these posts would take up the entire body width, but now there are just two margins.
<br><br>
I should probably update site-info.html now.
it should probably update site-info.html now.

View File

@ -1,32 +1,34 @@
<!-- vim: ft=html -->
<!-- TITLE: terminal emulators -->
<!-- DATE: 2024-09-06 23:18:59 -->
I think that my requirements for a terminal emulator are very simple. apparently they are not.
<!-- CATEGORIES: computers;rambling -->
natalie thinks that its requirements for a terminal emulator are very simple. apparently they are not.
<hr>
things that I do not want in a terminal:
things that it does not want in a terminal:
<ul>
<li>startup times exceeding 75ms</li>
<li>memory leaks (while I was testing wezterm, it once got to 9.8 gigabytes of memory useage)</li>
<li>memory leaks (while it was testing wezterm, the terminal process once got to 9.8 gigabytes of memory useage)</li>
<li>tab/multiplexing features. tmux exists.</li>
</ul>
things that I want in a terminal emulator:
things that it does want in a terminal emulator:
<ul>
<li>w3m image rendering</li>
<li>reasonable text rendering</li>
<li>resizeable such that text doesn't disappear</li>
</ul>
A nice bonus is a terminal being wayland native.
a nice bonus is a terminal being wayland native.
<hr>
prior to now, I had been using my own build of st.<br>
today, I got annoyed about text being lost when I shrink the window.<br>
now I will use foot.
prior to now, it had been using its own build of st.<br>
today, it got annoyed about text being lost when it shrinks the window.<br>
now, it will use foot.
<hr>
I am mildly annoyed by this because foot does not support w3m images, only sixel images.
I don't actually use w3m images very often, but I do like being able to look at pictures of the wuppertal schwebebahn using w3m in a terminal.
it is mildly annoyed by this because foot does not support w3m images, only sixel images.
it does not actually use w3m images very often, but it does like being able to look at pictures of the wuppertal schwebebahn using w3m in its terminal.
<hr>
on the other hand, foot's ability to have different fonts for different faces is very nice.
I like my friend's bitmap font inspired by ibm selectric, but I also like gohufont. now I get to use both.
also, people keep talking about suckless developers being nazis.
I don't know if that's the case (I tend towards not believing such claims, given I have yet to see evidence of such a thing (not that I've researched the topic)), but if it is I would generally prefer not to use software made by people that would likely want me dead.
it likes its friend's bitmap font inspired by ibm selectric, but it also likes gohufont. now it gets to use both.
also, it keeps hearing about suckless developers being nazis.
it does not know if that's the case (it tends towards not believing such claims, given it has yet to see evidence of such a thing (not that it has researched the topic)), but if it is the case it would generally prefer not to use software made by people that would likely want it dead.
additionally, foot seems to be faster:
<pre>
~ λ hyperfine "st -e '/tmp/aoeu.sh'" -m30 -M30

View File

@ -1,5 +1,7 @@
<!-- TITLE: things I should do -->
<!-- vim: ft=html -->
<!-- TITLE: things it should do -->
<!-- DATE: 2024-08-09 17:22:38 -->
<!-- CATEGORIES: irregular lists -->
<h2>things to do:</h2>
<ul>
<li>send email</li>
@ -10,12 +12,12 @@
<li>relocate moth</li>
<li>per location config</li>
<li>make thought posts be managed by a system other than git, such that each thought does not require a new commit</li>
<li>make it harder to press the key that puts my keyboard in to bootloader mode</li>
<li>make it harder to press the key that puts its keyboard in to bootloader mode</li>
</ul>
<h2>things I have done:</h2>
<h2>things it has done:</h2>
<ul>
<li>tidy</li>
<li>move server source code to its own git repository seperate from this website, and bestow upon it a reasonable name.</li>
<li>add more support metadata tags to thought posts</li>
<li>make thoughts render in chronological order of creation date, which I am not convinced they do.</li>
<li>make thoughts render in chronological order of creation date, which it is not convinced they do.</li>
</ul>

View File

@ -1,20 +1,22 @@
<!-- vim: ft=html -->
<!-- TITLE: wow! -->
<!-- DATE: 2024-07-23 20:26:07 -->
this post has been edited to remove behavior that would cause breakage at compile time in compliance with changes to site archetucture discussed in "2024-08-21 00:25:12: this site serves pages slowly and with asymetric lag times" and the following post. <br>
you may think: "but posts don't get compiled". you are correct, however they get included in documents at the compile time of those documents. <br>
<!-- CATEGORIES: change to site;computers -->
this post has been edited to remove behavior that would cause breakage at compile time in compliance with changes to site architecture discussed in "2024-08-21 00:25:12: this site serves pages slowly and with asymetric lag times" and the following post. <br>
one may think: "but posts don't get compiled". one would be correct, however they get included in documents at the compile time of those documents. <br>
this caused behavior where every time the /html/random-thoughts.html page was rendered, it would render approximately 8 times the content. not ideal. <br>
instead of fixing the issue with the lisp to html converter (dubiously possible) I have simply escaped the commands in this post. use your imagination if you are really that curious as to how it originally looked.
instead of fixing the issue with the lisp to html converter (dubiously possible) natalie has simply escaped the commands in this post. use your imagination if you are really that curious as to how it originally looked.
<br><br><br>
This post is confusing and might be a marginally abnormal quine. in html*. Have fun.<br>
This is a thing that works now.
The format in which I can write these posts as well as how they work is reasonably interesting.
I am most displeased due to my inability to figure out a reasonable means of having iframes such that their height is that of their respective content.
this post is confusing and might be a marginally abnormal quine. in html*. have fun.<br>
this is a thing that works now.
the format in which it can write these posts as well as how they work is reasonably interesting.
it is most displeased due to its inability to figure out a reasonable means of having iframes such that their height is that of their respective content.
below you will find the code for this web page. it is interesting, especially if you haven't read <a href=/html/site-info.html> the site info page</a>.
<pre><xmp>$[echo "\$\[cat ./html/random-thoughts.html"]]</xmp></pre>
<br>
you may ask: natalie[ee], why are you using iframes?<br>
the answer to such a question would of course be "by using iframes, I may make a post contain bash commands as detailed on <a href=/html/site-info.html> the site info page</a> while also being arbitrarily invalid html. Plain text would make a valid thought post.
one may ask: natalie[ee], why are you using iframes?<br>
the answer to such a question would of course be "by using iframes, natalie can may make a post contain bash commands as detailed on <a href=/html/site-info.html> the site info page</a> while also being arbitrarily invalid html. plain text would make a valid thought post.
<br>
an example of such, this post:
<pre>$[echo "\$\[cat ./html/thoughts/this-is-a-thought | sed 's/&/\&amp;/g; s/</\&lt;/g; s/>/\&gt;/g'"]]</pre>
As can be observed, the title is set via a rather kludgy comment in the post file. This allows for filenames that differ from titles, which I implemented for no particular reason.
as can be observed, the title is set via a rather kludgy comment in the post file. This allows for filenames that differ from titles, which natalie implemented for no particular reason.

View File

@ -1,14 +1,16 @@
<!-- vim: ft=html -->
<!-- TITLE: managing this website is complicated now -->
<!-- DATE: 2024-09-10 19:47:59 -->
to keep this website up to date, I now have to manage three separate github repositories.
<!-- CATEGORIES: complaining;computers;rambling -->
to keep this website up to date, natalie now has to manage three separate github repositories.
this is not ideal, but the previous system was not either.
<hr>
originally, this webloci was a singular repository. I found this to be annoying as the <a href='https://git.natalieee.net/nat/sludge'>webserver</a> is what I would classify as a different (but related) project, thus its separation to its own repository.
then, recently, I created another separate but related project to support this site, <a href='https://git.natalieee.net/nat/htmlgen'>htmlgen</a>.
originally, this webloci was a singular repository. it found this to be annoying as the <a href='https://git.natalieee.net/nat/sludge'>webserver</a> is what it would classify as a different (but related) project, thus its separation to its own repository.
then, recently, it created another separate but related project to support this site, <a href='https://git.natalieee.net/nat/htmlgen'>htmlgen</a>.
the main repository for this site's only job is now managing these thought posts, as anything that htmlgen generates is in its .gitignore and instead managed by the natalieee.net branch of htmlgen.
<hr>
I should probably devise a better system of implementing this management. the main obstacle to my doing so is that I do not want to write these thought posts in lisp because doing so is more challenging than the "html" I use here.
such complication is to be avoided as these thought posts are meant to be a reasonable transcription of my actual thoughts while typing them and having to think about lisp syntax would interfere with this goal.<br>
perhaps I should modify htmlgen such that it copies files that already end in .html to out/.
the problem then is that I would then need to devise a means of handling the site (media) files in a version controlled manner.
I suppose I could make a similar modification to htmlgen such that it also manages these files.
it should probably devise a better system of implementing this management. the main obstacle to its doing so is that it do not want to write these thought posts in lisp because doing so is more challenging than the "html" it uses here.
such complication is to be avoided as these thought posts are meant to be a reasonable transcription of the author's actual thoughts while typing them and having to think about lisp syntax would interfere with this goal.<br>
perhaps it should modify htmlgen such that it copies files that already end in .html to out/.
the problem then is that it would then need to devise a means of handling the site (media) files in a version controlled manner.
it supposes it could make a similar modification to htmlgen such that it also manages these files.

View File

@ -1,10 +1,12 @@
<!-- vim: ft=html -->
<!-- TITLE: this site serves pages slowly and with asymetric lag times -->
<!-- DATE: 2024-08-21 00:25:12 -->
<!-- CATEGORIES: complaining;computers -->
at the moment, page load times for some pages on this website are quite bad.
<pre>
curl http://localhost:5000/html/random-thoughts.html 0.00s user 0.01s system 0% cpu 2.889 total
</pre>
ridiculous. part of this is because of reasons which I am not aware of. the other part is because the way I generate webpages is not very performant.
ridiculous. part of this is because of reasons which natalie is not aware of. the other part is because the way it generates webpages is not very performant.
the process explained <a href='/html/site-info.html'>here</a> is slow, because reading from streams is slow and bash is slow.
<br><br>
compare this two a request to a page that uses a small number of bash commands:
@ -18,5 +20,5 @@ analyzing the cases in which bash commands are used in the content of this site,
<li>bash commands are used as a macro for generating html that does not depend on external factors. ex: calls to img-caption.</li>
<li>bash cammands are used to generate html that does depend on external factors. ex: the comment system on the home page.</li>
</ol>
given that there are two cases, only one of which is required for content that changes how a page renders based on user input, I intend to implement a system such that I write my webpages in a language that will compile to html, and on every update to my website's content simply rebuild these files.
given that there are two cases, only one of which is required for content that changes how a page renders based on user input, natalie intends to implement a system such that it writes its webpages in a language that will compile to html, and on every update to its website's content simply rebuild these files.
this allows for bash commands currently used to generate static html to be replaced by something that will be executed at compile time such that the only bash commands executed at runtime are those that interact with the state of the website.

View File

@ -0,0 +1,15 @@
<!-- TITLE: why is it it? -->
<!-- DATE: 2024-11-05 15:11:14 -->
<!-- CATEGORIES: natalie information -->
<!-- vim: ft=html -->
<blockquote>
why is it it?
</blockquote>
it is asked something vaguely similar to this with notable enough frequency to justify writing an explanation that it can link to for all future instances of such a query.
it is it for about 3 reasons:
<ol>
<li>it thinks the grammatical implications of not using first or second perspective pronouns are neat</li>
<li>it would rather be an object than a person</li>
<li>its internal monologue is just sort of like that. this makes speaking "normally" annoying because it needs to pass internal thoughts through a translation layer to speak "normally" (with standard perspective pronouns). it thought this was how most things thought. recently it was informed that most things do not think that way. following this, it decided to give up on translating its internal monologue to first or second perspective.$[make-footnote 'when referring to others, must the reader consult their internal lookup table that maps entities to pronouns? it has been told that this is also an irregular means of thinking.']</li>
</ol>
$[put-footnotes]

View File

@ -1,14 +1,16 @@
<!-- vim: ft=html -->
<!-- TITLE: why is wireless headphone firmware so bad? -->
<!-- DATE: 2024-07-29 00:26:54 -->
I am writing this at 12am on a termux session on my phone, on a bus home from my friend's house. that is neat.
<!-- CATEGORIES: complaining;computers;rambling -->
it is writing this at 12:30am on a termux session on its phone, on a bus home from its friend's house. it will probably be formatted poorly.
<br>
<br>
My current headphones, and all the wireless ones I have ever had have used what can only be described as the worse firmware. why is this? how is it possible that there are 0 headphone firmware engineers that are competent? I do not understand.
its current headphones, and all the wireless ones it has ever had have used what can only be described as the worst firmware. why is this? how is it possible that there are 0 headphone firmware engineers that are competent? it does not understand.
<br>
<br>
My headphones:<ul
its headphones:<ul>
<li>repeat "disconnected" infinitely at random intervals when disconnected from a device, or just when they feel like it. they do not cease unless power cycled.</li>
<li>always report a charge of 80% over bluetooth.</li>
<li>only report their charge when low sometimes. there have been exactly three instances in which they have given a low battery warning prior to powering off</li>
<li>inconsistently announce low batteries. there have been exactly three instances in which they have given a low battery warning prior to powering off</li>
</ul>
sorry if formatting bad. phone.

View File

@ -0,0 +1,33 @@
<!-- TITLE: {blog,random-thoughts} deprecation -->
<!-- DATE: 2024-10-31 12:43:27 -->
<!-- CATEGORIES: change to site -->
<!-- vim: ft=html -->
it rewrote the thought viewing interface. it is now comically slow, but a 2.3 second page load time really isn't that bad.
upon seeing the source code for the new interface ($[make-link "/html/view-thought.html"], replacing $[make-link "/html/random-thoughts.html"]), it is sure one will understand why it is so slow.
<pre>
<span class="-punctuation-bracket"><span class="MatchParen">(</span></span><span class="-function-macro">defun</span> <span class="-variable"><span class="-function">html</span></span> <span class="-punctuation-bracket">(</span><span class="-punctuation-bracket">)</span>
<span class="-punctuation-bracket">(</span><span class="-variable">page</span> <span class="String">&quot;$[echo $][test \&quot;$(echo '{' 'thought' '}' | sed 's/ //g')\&quot; != '{thought}' &amp;&amp; echo '{thought}' || echo thoughts index]&quot;</span>
<span class="-string-escape">`</span><span class="-punctuation-bracket">(</span><span class="-variable">section</span> <span class="-punctuation-bracket">(</span><span class="-punctuation-bracket">)</span>
<span class="String">&quot;$[echo $][echo &gt; /tmp/footnote_count]&quot;</span>
<span class="-punctuation-bracket">(</span><span class="-variable">h1</span> <span class="-punctuation-bracket">(</span><span class="SpecialChar"><span class="-punctuation-special">:</span>style</span> <span class="String">&quot;display: $[echo $][test \&quot;$(echo '{' 'thought' '}' | sed 's/ //g')\&quot; != '{thought}' &amp;&amp; echo block || echo none]&quot;</span><span class="-punctuation-bracket">)</span> <span class="String">&quot;$[echo $][cat ./html/thoughts/$(basename '{thought}') | grep '&lt;!-- TITLE:' | sed 's/&lt;!-- TITLE://; s/--&gt;//']&quot;</span><span class="-punctuation-bracket">)</span>
<span class="-punctuation-bracket">(</span><span class="-variable">div</span> <span class="-punctuation-bracket">(</span><span class="SpecialChar"><span class="-punctuation-special">:</span>style</span> <span class="String">&quot;height: 0; margin-top: 5px; justify-content: space-between; align-items: center; display: $[echo $][test \&quot;$(echo '{' 'thought' '}' | sed 's/ //g')\&quot; != '{thought}' &amp;&amp; echo flex || echo none;]&quot;</span><span class="-punctuation-bracket">)</span>
<span class="-punctuation-bracket">(</span><span class="-variable">p</span> <span class="-punctuation-bracket">(</span><span class="-punctuation-bracket">)</span> <span class="String">&quot;$[echo $][cat ./html/thoughts/$(basename '{thought}') | grep '&lt;!-- DATE:' | sed 's/&lt;!-- DATE://; s/--&gt;//']&quot;</span><span class="-punctuation-bracket">)</span>
<span class="-punctuation-bracket">(</span><span class="-variable">p</span> <span class="-punctuation-bracket">(</span><span class="-punctuation-bracket">)</span> <span class="String">&quot;categories: $[echo $][cat ./html/thoughts/$(basename '{thought}') | grep '&lt;!-- CATEGORIES: ' | sed 's/&lt;!-- CATEGORIES: //; s/--&gt;//' | awk -F';' '{ for (i=1; i&lt;=NF; i++) { sub(/^ +| +$/, \&quot;\&quot;, $i); if ($i != \&quot;\&quot;) printf \&quot;&lt;a href=\\\&quot;?filter-category=%s\\\&quot;&gt;%s&lt;/a&gt;, \&quot;, $i, $i } }' | sed 's/, $//']&quot;</span><span class="-punctuation-bracket">)</span><span class="-punctuation-bracket">)</span>
<span class="String">&quot;$[echo $][test \&quot;$(echo '{' 'thought' '}' | sed 's/ //g')\&quot; != '{thought}' &amp;&amp; echo '&lt;br&gt;' || true]&quot;</span>
<span class="-punctuation-bracket">(</span><span class="-variable">div</span> <span class="-punctuation-bracket">(</span><span class="-punctuation-bracket">)</span> <span class="String">&quot;$[echo $][include \&quot;./html/thoughts/$(basename '{thought}')\&quot;]&quot;</span><span class="-punctuation-bracket">)</span>
<span class="String">&quot;$[echo $][test \&quot;$(echo '{' 'thought' '}' | sed 's/ //g')\&quot; != '{thought}' || echo '&lt;h1&gt;posts:&lt;/h1&gt;']&quot;</span>
<span class="String">&quot;$[echo $][test \&quot;$(echo '{' 'filter-category' '}' | sed 's/ //g')\&quot; != '{filter-category}' || test \&quot;$(echo '{' 'thought' '}' | sed 's/ //g')\&quot; != '{thought}' || (ls ./html/thoughts | while read -r file; do echo \&quot;&lt;div&gt;$(cat ./html/thoughts/$file | grep '&lt;!-- DATE:' | sed 's/&lt;!-- DATE://; s/--&gt;//') &lt;a href=?thought=$file&gt;$(cat ./html/thoughts/$file | grep '&lt;!-- TITLE:' | sed 's/&lt;!-- TITLE://; s/--&gt;//')&lt;/a&gt;&lt;br&gt;categories: $(cat ./html/thoughts/$file | grep '&lt;!-- CATEGORIES: ' | sed 's/&lt;!-- CATEGORIES: //; s/--&gt;//' | awk -F';' '{ for (i=1; i&lt;=NF; i++) { sub(/^ +| +$/, \&quot;\&quot;, $i); if ($i != \&quot;\&quot;) printf \&quot;&lt;a href=\\\&quot;?filter-category=%s\\\&quot;&gt;%s&lt;/a&gt;, \&quot;, $i, $i } }' | sed 's/, $//')&lt;/div&gt;\&quot;; done | sort --numeric --reverse)]&quot;</span>
<span class="String">&quot;$[echo $][test \&quot;$(echo '{' 'filter-category' '}' | sed 's/ //g')\&quot; != '{filter-category}' &amp;&amp; test \&quot;$(echo '{' 'thought' '}' | sed 's/ //g')\&quot; != '{thought}' || (ls ./html/thoughts | while read -r file; do grep '&lt;!-- CATEGORIES: ' ./html/thoughts/$file | grep '{filter-category}' &amp;&amp; echo \&quot;&lt;div&gt;$(cat ./html/thoughts/$file | grep '&lt;!-- DATE:' | sed 's/&lt;!-- DATE://; s/--&gt;//') &lt;a href=?thought=$file&gt;$(cat ./html/thoughts/$file | grep '&lt;!-- TITLE:' | sed 's/&lt;!-- TITLE://; s/--&gt;//')&lt;/a&gt;&lt;br&gt;categories: $(cat ./html/thoughts/$file | grep '&lt;!-- CATEGORIES: ' | sed 's/&lt;!-- CATEGORIES: //; s/--&gt;//' | awk -F';' '{ for (i=1; i&lt;=NF; i++) { sub(/^ +| +$/, \&quot;\&quot;, $i); if ($i != \&quot;\&quot;) printf \&quot;&lt;a href=\\\&quot;?filter-category=%s\\\&quot;&gt;%s&lt;/a&gt;, \&quot;, $i, $i } }' | sed 's/, $//')&lt;/div&gt;\&quot;; done | sort --numeric --reverse)]&quot;</span><span class="-punctuation-bracket">)</span><span class="-punctuation-bracket">)</span><span class="-punctuation-bracket"><span class="MatchParen">)</span></span>
</pre>
bash is very slow. they should make bash, but with a JIT compiler. maybe natalie[ee] will invent a syntax for running lua code serverside instead of bash.
it has been thinking of rewriting sludge in lua, anyways.
<hr>
ignoring the prior tangent, it has decided it will never fix the blog. this will function as the new blog (which it is basically doing already). the old thought viewing interface will no longer be maintained, but will probably still mostly function.
<hr>
<pre>
~ λ hyperfine -m30 -M30 'curl https://natalieee.net/html/view-thought.html'
Benchmark 1: curl https://natalieee.net/html/view-thought.html
Time (mean ± σ): 2.354 s ± 0.170 s [User: 0.011 s, System: 0.006 s]
Range (min … max): 2.147 s … 2.964 s 30 runs
</pre>
amusing.

42
robots.txt Normal file
View File

@ -0,0 +1,42 @@
User-agent: AI2Bot
User-agent: Ai2Bot-Dolma
User-agent: Amazonbot
User-agent: anthropic-ai
User-agent: Applebot
User-agent: Applebot-Extended
User-agent: Bytespider
User-agent: CCBot
User-agent: ChatGPT-User
User-agent: Claude-Web
User-agent: ClaudeBot
User-agent: cohere-ai
User-agent: Diffbot
User-agent: DuckAssistBot
User-agent: FacebookBot
User-agent: facebookexternalhit
User-agent: FriendlyCrawler
User-agent: Google-Extended
User-agent: GoogleOther
User-agent: GoogleOther-Image
User-agent: GoogleOther-Video
User-agent: GPTBot
User-agent: iaskspider/2.0
User-agent: ICC-Crawler
User-agent: ImagesiftBot
User-agent: img2dataset
User-agent: ISSCyberRiskCrawler
User-agent: Kangaroo Bot
User-agent: Meta-ExternalAgent
User-agent: Meta-ExternalFetcher
User-agent: OAI-SearchBot
User-agent: omgili
User-agent: omgilibot
User-agent: PerplexityBot
User-agent: PetalBot
User-agent: Scrapy
User-agent: Sidetrade indexer bot
User-agent: Timpibot
User-agent: VelenPublicWebCrawler
User-agent: Webzio-Extended
User-agent: YouBot
Disallow: /

7
scripts/add-following-88x31s Executable file
View File

@ -0,0 +1,7 @@
toot following 0x6e6174 | cut -d' ' -f2 | while read -r account; do
url="$(toot whois $account | grep -i site -A1 | grep -E 'https?://')/.well-known/button.json";
[ -n "${url}" ] && response="$(curl -s -o /dev/null -w '%{http_code}' "${url}")";
[ "$response" -eq "200" ] && body="$(curl -s "${url}" | jq -r '.default as $default | .buttons[] | select(.id == $default) | "<a href=\"\(.link)\" id=\"\(.id)\"><img src=\"\(.uri)\" alt=\"\(.alt)\"></a>"' 2>/dev/null)"
[ -n "${body}" ] && echo "${body}" > ./files/88x31/$(echo $url | sed 's/https:\/\///g; s/.well-known\/button.json//; s/\//-/g; s/.$//').html
body=''
done

5
scripts/make-footnote Executable file
View File

@ -0,0 +1,5 @@
#!/bin/sh
id="$(wc -l /tmp/footnote_count | cut -d' ' -f1 | tr -d '\n')"
echo -n "<sup>[<a id=\"${id}_backref\" href=\"#${id}_ref\">${id}</a>]</sup>"
echo "<br><footnote style=\"margin: 0\" id=\"${id}_ref\">${1}<sup>[<a href=\"#${id}_backref\">${id}</a>]</sup></footnote>" >> /tmp/footnotes
echo ' ' >> /tmp/footnote_count

View File

@ -1 +1,5 @@
echo "<a href='$1'>$1</a>"
if [ -z "${2}" ]; then
echo "<a href='$1'>$1</a>"
else
echo "<a href='$1'>$2</a>"
fi

3
scripts/put-footnotes Executable file
View File

@ -0,0 +1,3 @@
#!/bin/sh
cat /tmp/footnotes
echo > /tmp/footnotes

View File

@ -33,9 +33,9 @@
--alt-bg: #dde1e6;
--fg: #161616;
--hl: #33b1ff;
--link: #0f62fe;
--link: #0154EF;
--visited-link: #673ab7;
--highlight: #0f62fe;
--highlight: #0154EF;
--gray: #525252;
background: var(--bg);
background-image: radial-gradient(var(--gray) 2px, var(--alt-bg) 2px);
@ -45,6 +45,35 @@
align-items: center;
}
.-punctuation-bracket {color: #ff7eb6}
.-function-macro {color: #08bdba}
.SpecialChar {color: #37474f}
.-punctuation-special {color: #ff7eb6}
.-variable {color: #37474f}
.-string-escape {color: #ffab91}
.-function {font-weight: bold; color: #673ab7}
.-punctuation-bracket {color: #ff7eb6}
.-keyword-function {color: #ff7eb6}
.Number {color: #ffab91}
.-variable {color: #37474f}
.-variable-builtin {color: #37474f}
.-keyword {color: #ee5396}
.Operator {color: #ee5396}
.-constant-builtin {color: #08bdba}
.-function-builtin {color: #673ab7}
.Type {color: #ee5396}
.-function {font-weight: bold; color: #673ab7}
.Comment {font-style: italic; color: #161616}
.Boolean {color: #ee5396}
.-keyword-operator {color: #ff7eb6}
.-punctuation-delimiter {color: #ff7eb6}
.-tag {color: #ee5396}
.-tag-delimiter {color: #ffab91}
.Operator {color: #ee5396}
.Underlined {text-decoration-line: underline}
.-tag-attribute {color: #ffab91}
.String {color: #be95ff}
@media (prefers-color-scheme: dark) {
:root {
--bg: #161616;
@ -56,6 +85,30 @@
--highlight: #33b1ff;
--gray: #202020;
}
.-punctuation-bracket {color: #3ddbd9}
.-function-macro {color: #08bdba}
.SpecialChar {color: #d0d0d0}
.-punctuation-special {color: #3ddbd9}
.-variable {color: #d0d0d0}
.-string-escape {color: #82cfff}
.-function {font-weight: bold; color: #ff7eb6}
.-punctuation-bracket {color: #3ddbd9}
.-keyword-function {color: #3ddbd9}
.Number {color: #82cfff}
.-variable {color: #d0d0d0}
.-variable-builtin {color: #d0d0d0}
.-keyword {color: #78a9ff}
.Operator {color: #78a9ff}
.-constant-builtin {color: #08bdba}
.-function-builtin {color: #ff7eb6}
.Type {color: #78a9ff}
.-function {font-weight: bold; color: #ff7eb6}
.String {color: #be95ff}
.Comment {font-style: italic; color: #525252}
.Boolean {color: #78a9ff}
.-keyword-operator {color: #3ddbd9}
.-punctuation-delimiter {color: #3ddbd9}
}
.rainbow-text {
@ -174,9 +227,8 @@ footer {
justify-content: flex-start;
}
a {
margin: 0 !important;
display: flex;
float: right;
width: 88px;
@ -259,6 +311,7 @@ figure {
margin-bottom: 15px;
> a {
width: auto;
padding: 10px;
padding-bottom: 0;
@ -304,6 +357,12 @@ iframe {
overflow: hidden;
}
blockquote {
border-left: 10px solid var(--gray);
margin: 4px 16px;
padding-left: 10px;
}
summary {
-webkit-user-select: none;
-ms-user-select: none;
@ -323,6 +382,11 @@ xmp {
a {
color: var(--link);
width: fit-content
}
a ~ a, li:has(a), a ~ span > a {
margin: 4px 0;
}
a:visited {
@ -336,9 +400,15 @@ video {
display: block
}
sup {
font-size: smaller;
line-height: 0;
}
footnote {
font-size: 13px;
margin-top: 20px;
display: flex;
}
.post {