about summary refs log tree commit diff
diff options
context:
space:
mode:
authorgennyble <gen@nyble.dev>2024-03-13 05:32:02 -0500
committergennyble <gen@nyble.dev>2024-03-13 05:33:32 -0500
commit588919965350beefc08d8e382de727eb21295b0a (patch)
treeb523e54ff73907b40f754f81ac6e6117dce56e9c
parent0b94c2293df9df5c1ff5307d2f169c3c30c02bc6 (diff)
download∞-588919965350beefc08d8e382de727eb21295b0a.tar.gz
∞-588919965350beefc08d8e382de727eb21295b0a.zip
march 13th, 2024
this is what was published on the 10th, here.
https://amble.quest/notice/AfhzCKhLrynnNg5Qsi
-rw-r--r--.gitignore15
-rw-r--r--.times114
-rw-r--r--readme.md6
-rw-r--r--served/bits/bits.css17
-rw-r--r--served/bits/bits.html48
-rw-r--r--served/bits/poem.css14
-rw-r--r--served/bits/ramen-bowl.html25
-rw-r--r--served/bits/scrap/scrap.css73
-rw-r--r--served/bits/scrap/scrap.html95
-rw-r--r--served/bits/smoems.html60
-rw-r--r--served/bits/touching-grass/grass.vtt5
-rw-r--r--served/bits/touching-grass/touching-grass.css45
-rw-r--r--served/bits/touching-grass/touching-grass.html80
-rw-r--r--served/colorsquash/colorsquash.html94
-rw-r--r--served/home.html66
-rw-r--r--served/styles/common.css65
-rw-r--r--served/styles/home.css147
-rw-r--r--served/styles/post.css5
-rw-r--r--served/things/sillygifs/sillygifs.css22
-rw-r--r--served/things/sillygifs/sillygifs.html57
-rw-r--r--served/things/things.html9
-rw-r--r--served/words/akkoma-postgres-migration.html156
-rw-r--r--served/words/atom.xml196
-rw-r--r--served/words/words.html16
-rw-r--r--served/words/writing.css54
-rw-r--r--support/.times5
-rw-r--r--support/atom.conf87
-rw-r--r--support/atom.xml30
-rw-r--r--support/keeplinks2
-rw-r--r--support/redirects45
-rw-r--r--templates/base.html25
-rw-r--r--templates/minimal.html3
-rw-r--r--templates/post.html11
33 files changed, 1686 insertions, 6 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..0ac4c58
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,15 @@
+# image
+*.png
+*.jpeg
+*.jpg
+*.gif
+
+# video
+*.mp4
+
+# program archives
+*.tar.gz
+*.zip
+
+# macos please
+.DS_Store
diff --git a/.times b/.times
index 2a7d36b..94e2c78 100644
--- a/.times
+++ b/.times
@@ -1,5 +1,109 @@
-,1701572006,1701572898,1701572898
-.times-ignore,1701572836,1701572840,1701572840
-.times,1701572898,1701573742,1701573729
-readme.md,1701572410,1701573718,1701573720
-updateTimes.sh,1701572592,1701572893,1701572898
+,1708577754,1710325922,1710325922
+.times-ignore,1708577774,1708577778,1710323505
+readme.md,1708577774,1708577778,1710323667
+.gitignore,1710323648,1710325679,1710325679
+updateTimes.sh,1708577774,1708577778,1710323505
+.times,1710325922,1710326012,1710326002
+templates,1708577778,1709378595,1710323505
+templates/minimal.html,1708593912,1708593919,1710323668
+templates/base.html,1708577778,1709459819,1710323668
+templates/post.html,1708577778,1709194328,1710323668
+support,1709310518,1709368202,1710323505
+support/keeplinks,1708577774,1708577778,1710323668
+support/atom.xml,1709368202,1709463716,1710323668
+support/redirects,1708577774,1708577778,1710323668
+support/.times,1708577774,1708577778,1710323668
+support/atom.conf,1709365138,1709463236,1710323668
+served,1708577778,1710067376,1710323505
+served/.DS_Store,1708577778,1708577778,1710323667
+served/home.html,1708592892,1709310292,1710323668
+served/valid-atom.png,1709295369,1709295369,1710067421
+served/colorsquash,1710067376,1710067376,1710323505
+served/colorsquash/astro_squash.gif,1710067376,1710067376,1710067433
+served/colorsquash/colorsquash.html,1710067376,1710067471,1710323668
+served/colorsquash/astro.jpg,1710067376,1710067376,1710067433
+served/colorsquash/v0.1.0,1710067376,1710067376,1710323505
+served/colorsquash/v0.1.0/squash-v0.1.0_windows-x64.zip,1710067376,1710067376,1710323668
+served/colorsquash/v0.1.0/squash-v0.1.0_macos-x64.tar.gz,1710067376,1710067376,1710323668
+served/colorsquash/v0.1.0/squash-v0.1.0_linux-aarch64.tar.gz,1710067376,1710067376,1710323668
+served/colorsquash/v0.1.0/squash-v0.1.0_macos-aarch64.tar.gz,1710067376,1710067376,1710323668
+served/colorsquash/v0.1.0/squash-v0.1.0_linux-x64.tar.gz,1710067376,1710067376,1710323668
+served/styles,1708596940,1709378278,1710323505
+served/styles/post.css,1708602873,1709309810,1710323668
+served/styles/common.css,1708596949,1709310038,1710323668
+served/styles/home.css,1708597104,1709310339,1710323668
+served/bits,1709300635,1710067313,1710323505
+served/bits/poem.css,1709308669,1709308779,1710323667
+served/bits/bits.css,1709298688,1709309896,1710323667
+served/bits/ramen-bowl.html,1709308573,1709458561,1710323667
+served/bits/bits.html,1709297468,1709310176,1710323667
+served/bits/smoems.html,1708770789,1709461948,1710323667
+served/bits/touching-grass,1708602527,1708602571,1710323505
+served/bits/touching-grass/grass_720p.mp4,1708602542,1708602542,1710323668
+served/bits/touching-grass/grass.mp4,1708602542,1708602542,1710323667
+served/bits/touching-grass/grass_poster_alternate.jpg,1708602542,1708602542,1710070052
+served/bits/touching-grass/grass.vtt,1708602542,1708602542,1710323668
+served/bits/touching-grass/touching-grass.css,1708602571,1708605900,1710323668
+served/bits/touching-grass/grass_poster.jpg,1708602542,1708602542,1710070052
+served/bits/touching-grass/touching-grass.html,1708602542,1709463806,1710323668
+served/bits/scrap,1708608052,1708608183,1710323505
+served/bits/scrap/.DS_Store,1708608052,1708608052,1710323667
+served/bits/scrap/scrap.html,1708608052,1709463297,1710323667
+served/bits/scrap/scrap.css,1708608183,1708657179,1710323667
+served/bits/scrap/aeropostale-prehistory,1708608052,1708608052,1710323505
+served/bits/scrap/aeropostale-prehistory/dramatic.jpg,1708608052,1708608052,1710070035
+served/bits/scrap/aeropostale-prehistory/close_bottom.jpg,1708608052,1708608052,1710070034
+served/bits/scrap/aeropostale-prehistory/dramatic_third.jpg,1708608052,1708608052,1710067506
+served/bits/scrap/aeropostale-prehistory/20230915_145424.jpg,1708608052,1708608052,1710070034
+served/bits/scrap/aeropostale-prehistory/20230915_145454.jpg,1708608052,1708608052,1710070034
+served/bits/scrap/wrench-2023-08-07,1708608052,1708608052,1710323505
+served/bits/scrap/wrench-2023-08-07/wrench_third.jpg,1708608052,1708608052,1710067510
+served/bits/scrap/wrench-2023-08-07/wrench.jpg,1708608052,1708608052,1710070045
+served/bits/scrap/grace-prehistory,1708608052,1708608052,1710323505
+served/bits/scrap/grace-prehistory/top.jpg,1708608052,1708608052,1710070044
+served/bits/scrap/grace-prehistory/top_third.jpg,1708608052,1708608052,1710067510
+served/bits/scrap/grace-prehistory/testchart_quarter.jpg,1708608052,1708608052,1710067510
+served/bits/scrap/grace-prehistory/20230915_152526.jpg,1708608052,1708608052,1710070036
+served/bits/scrap/grace-prehistory/testchart.jpg,1708608052,1708608052,1710070044
+served/bits/scrap/grace-prehistory/20230915_152620.jpg,1708608052,1708608052,1710070041
+served/things,1709294898,1709311271,1710323505
+served/things/things.html,1709311271,1709311581,1710323668
+served/things/sillygifs,1708605998,1708606021,1710323505
+served/things/sillygifs/1000.gif,1708605998,1708605998,1710070061
+served/things/sillygifs/sillygifs.css,1708606021,1708763451,1710323668
+served/things/sillygifs/1_000_000.gif,1708605998,1708605998,1710070099
+served/things/sillygifs/sillygifs.html,1708605998,1708763356,1710323668
+served/things/sillygifs/100.gif,1708605998,1708605998,1710070061
+served/things/sillygifs/0123456789.gif,1708605998,1708605998,1710070061
+served/things/sillygifs/100_000.gif,1708605998,1708605998,1710070062
+served/things/sillygifs/10_000.gif,1708605998,1708605998,1710070096
+served/words,1708677141,1709378278,1710323505
+served/words/akkoma-postgres-migration.html,1708677164,1709458342,1710323668
+served/words/writing.css,1708678138,1709378432,1710323668
+served/words/words.html,1708677164,1709201376,1710323668
+served/words/atom.xml,1709368798,1709463814,1710323668
+served/faces,1708577778,1708605123,1710323505
+served/faces/.DS_Store,1708577778,1708577778,1710323668
+served/faces/seeing double,1708577778,1708577778,1710323505
+served/faces/seeing double/.DS_Store,1708577778,1708577778,1710323668
+served/faces/seeing double/sidwalk_closed.jpg,1708577778,1708577778,1710070058
+served/faces/seeing double/sidwalk_closed_1000p.jpg,1708577778,1708577778,1710070059
+served/faces/seeing double/face.jpg,1708577778,1708577778,1710070058
+served/faces/oct23,1708577778,1708577778,1710323505
+served/faces/oct23/.DS_Store,1708577778,1708577778,1710323668
+served/faces/oct23/spoon.jpg,1708577778,1708577778,1710070058
+served/faces/oct23/spoon_contrasted.jpg,1708577778,1708577778,1710070058
+served/faces/oct23/lights_banner.jpg,1708577778,1708577778,1710070058
+served/faces/oct23/lights.jpg,1708577778,1708577778,1710070057
+served/faces/medley mélange,1708577778,1708577778,1710323505
+served/faces/medley mélange/face_3fourths.jpg,1708577778,1708577778,1710070057
+served/faces/medley mélange/face.jpg,1708577778,1708577778,1710070057
+served/faces/medley mélange/background.jpg,1708577778,1708577778,1710070055
+served/faces/medley mélange/background_weird.jpg,1708577778,1708577778,1710070057
+served/faces/triblur,1708577778,1708577778,1710323505
+served/faces/triblur/.DS_Store,1708577778,1708577778,1710323668
+served/faces/triblur/triblur_2by3.png,1708577778,1708577778,1710070059
+served/faces/triblur/triblur_94.gif,1708577778,1708577778,1710067421
+served/faces/triblur/triblur.png,1708577778,1708577778,1710070059
+served/faces/triblur/trichrideo.png,1708577778,1708577778,1710070059
+served/faces/triblur/triblur_94.png,1708577778,1708577778,1710070059
diff --git a/readme.md b/readme.md
index c0756ad..eea8f51 100644
--- a/readme.md
+++ b/readme.md
@@ -6,4 +6,8 @@ this is my, gennyble's, website. and a few associated files.
 
 i will try not to stress too much on the small things.
 
-i kill so many links i do not like this.
\ No newline at end of file
+i kill so many links i do not like this.
+
+### files, files!
+*`faces/`*
+	for internet faces throughout the times. organized loosly as directories of face-editions.
diff --git a/served/bits/bits.css b/served/bits/bits.css
new file mode 100644
index 0000000..5e3000f
--- /dev/null
+++ b/served/bits/bits.css
@@ -0,0 +1,17 @@
+.list {
+	list-style-position: inside;
+	margin: 0;
+	padding: 0;
+}
+
+#two-up {
+	display: flex;
+	flex-direction: row;
+	flex-wrap: wrap;
+	column-gap: 1rem;
+}
+
+#two-up :nth-child(n) {
+	flex: 1 0 calc(var(--page-width) / 2 - 1rem);
+	max-width: 20rem;
+}
\ No newline at end of file
diff --git a/served/bits/bits.html b/served/bits/bits.html
new file mode 100644
index 0000000..0d94eec
--- /dev/null
+++ b/served/bits/bits.html
@@ -0,0 +1,48 @@
+---
+template=post
+title=Bits
+style=/styles/post.css
+style=poem.css
+style=bits.css
+---
+[@paragraphs off]
+<p>
+	Bits of my world presented as photos, poetry, or prose.
+</p>
+
+<ol class="list">
+	<li><a href="ramen-bowl.html">ramen-bowl.html</a> &mdash; a poem about my ramen noodel bowl</li>
+	<li><a href="touching-grass/">touching-grass.html</a> &mdash; a short video with an exciteable description</li>
+	<li><a href="smoems.html">smoems.html</a> &mdash; transplanted poems from twitter</li>
+</ol>
+
+<div id="two-up">
+	<section id="scrap">
+		<h2><a href="scrap/">scrap/</a></h2>
+		<img src="scrap/aeropostale-prehistory/dramatic_third.jpg" style="width: 100%">
+		<p>
+			bits of usually-metal that I find while walking around (or really just
+			happen upon). Collected and
+			photographed for your viewing pleasure :D
+		</p>
+	</section>
+
+	<section id="ramen-bowl">
+		<h2>Ramen Bowl</h2>
+		<pre>
+once daily, perchance twice
+i will have a ramen.
+flavoured beef, maybe chicken.
+
+in it goes tabasco, paprika.
+the packet of course.
+
+to wash the bowl takes so much.
+i do not wash the bowl.
+
+my ramens own a bowl.
+collecting flavour of the past!
+for the future now.
+	</pre>
+	</section>
+</div>
\ No newline at end of file
diff --git a/served/bits/poem.css b/served/bits/poem.css
new file mode 100644
index 0000000..9acade9
--- /dev/null
+++ b/served/bits/poem.css
@@ -0,0 +1,14 @@
+summary {
+	font-size: 2rem;
+}
+
+pre {
+	width: 100%;
+	white-space: break-spaces;
+	font-family: sans-serif;
+}
+
+pre.stacked {
+	border-top: 1px dashed var(--text-dim);
+	padding-top: 24px;
+}
\ No newline at end of file
diff --git a/served/bits/ramen-bowl.html b/served/bits/ramen-bowl.html
new file mode 100644
index 0000000..1820f74
--- /dev/null
+++ b/served/bits/ramen-bowl.html
@@ -0,0 +1,25 @@
+---
+template=post
+title=Ramen Bowl
+style=/styles/post.css
+style=poem.css
+publish=December 21st, 2023
+#Category poetry
+#Tags writing
+---
+[@paragraphs off]
+<pre>
+once daily, perchance twice
+i will have a ramen.
+flavoured beef, maybe chicken.
+
+in it goes tabasco, paprika.
+the packet of course.
+
+to wash the bowl takes so much.
+i do not wash the bowl.
+
+my ramens own a bowl.
+collecting flavour of the past!
+for the future now.
+</pre>
\ No newline at end of file
diff --git a/served/bits/scrap/scrap.css b/served/bits/scrap/scrap.css
new file mode 100644
index 0000000..c863c7b
--- /dev/null
+++ b/served/bits/scrap/scrap.css
@@ -0,0 +1,73 @@
+/* wide */
+@media (min-width: 44rem) {
+	.left {
+		float: left;
+		width: 50%;
+		margin: 0 16px 16px 0;
+	}
+
+	.right {
+		float: right;
+		width: 50%;
+		margin: 0 0 16px 16px;
+	}
+
+	.smright {
+		float: right;
+		width: 25%;
+		margin: 0 0 16px 16px;
+	}
+}
+
+/* narrow */
+@media (max-width: 44rem) {
+
+	.left,
+	.right {
+		display: block;
+		margin: 8px auto 16px auto;
+		width: min(50vh, 100%);
+	}
+
+	.smright {
+		float: right;
+		width: 96px;
+		margin: 0 0 16px 16px;
+	}
+}
+
+article {
+	overflow-y: auto;
+}
+
+article>header {
+	display: flex;
+	flex-direction: row;
+	gap: 16px;
+	padding-bottom: 8px;
+	align-items: center;
+}
+
+header>h2 {
+	margin: 0;
+}
+
+header>time,
+header>p {
+	color: var(--text-dim);
+	height: min-content;
+}
+
+header>p {
+	font-style: italic;
+	margin: 0;
+}
+
+article>p {
+	margin-top: 0;
+	margin-bottom: 16px;
+}
+
+article>p:last-of-type {
+	margin-bottom: inherit;
+}
\ No newline at end of file
diff --git a/served/bits/scrap/scrap.html b/served/bits/scrap/scrap.html
new file mode 100644
index 0000000..0bf68ad
--- /dev/null
+++ b/served/bits/scrap/scrap.html
@@ -0,0 +1,95 @@
+---
+template=post
+title=Scrap
+style=scrap.css
+style=/styles/post.css
+---
+[@paragraphs off]
+
+<p>
+	I walk around a lot. Quite a bit, really! And I tend to notice weird little bits on the ground.
+	I pick these things up and cherish them.
+	And I'll catalog them here. My good little bits of scrap :D
+</p>
+
+<article id="wrench_2023-08-07">
+	<header>
+		<h2>Wrench</h2>
+		<time datetime="2023-08-07">Aug 7th, 2023</time>
+	</header>
+
+	<img src="wrench-2023-08-07/wrench_third.jpg" class="left" alt="a half-inch wrench sitting on an open palm." />
+	<p>
+		look at my wrench! I found it in a crack! Where a parking-lot-blacktop met the concrete transition
+		from the road. I'm quite surprised I saw it; It was very well hidden. While I was
+		walking over it I noticed a glimmer, kept walking, and then double-took with a
+		sort of "what was that?" And there it was!
+	</p>
+	<p>
+		It's of the half-inch variety, a crescent on one end and a box-head the other. Oh, it's just so good! A proper
+		spanner! This find elates me so.
+	</p>
+</article>
+
+<svg viewBox="0 0 1000 20" preserveAspectRatio="xMidYMid slice" xmlns="http://www.w3.org/2000/svg"
+	style="height: 2em; width: 100%;" role="heading" aria-level="2" id="prehistory"> <!-- aria match h2 -->
+	<style>
+		.text {
+			font: italic 16px sans-serif;
+		}
+	</style>
+	<path d="M 0 11 L 1000 11" stroke="var(--text)" stroke-width="0.5"></path>
+	<rect x="462.5" y="0" width="77.5" height="20" fill="var(--background)" stroke="var(--background)" />
+	<text x="465" y="16" class="text" stroke="var(--text)" fill="var(--text)" stroke-width="0.1">prehistory</text>
+</svg>
+
+<article id="aeropostale-prehistory">
+	<header>
+		<h2>Belt Buckle</h2>
+		<p>time forgotten</p>
+	</header>
+
+	<img src="aeropostale-prehistory/dramatic_third.jpg" class="right"
+		alt="a belt buckle branded Aeropostale in cursive, stylized writing sitting on bricks." />
+	<p>
+		This little guy I found next to a brick, industrial building in Bensenville, Illinois. I was
+		very excited to find it! It's a belt buckle! That's so weird! How was it separated from
+		it's lengthy leather companion?
+	</p>
+	<p>
+		The body of the buckle seems to be some kind of stainless steel, but I can't be sure. It
+		has "Aéropostale" written on the frame where you might thread the belt material through.
+		The branding appears to be cast into it. The bar is very rusty and I would guess is a kind
+		of mild steel.
+	</p>
+</article>
+
+<article id="grace-prehistory">
+	<header>
+		<h2>Grace</h2>
+		<time datetime="2022-09">Sep, 2022</time>
+	</header>
+
+	<img src="grace-prehistory/top_third.jpg" class="left"
+		alt="a small, metal placard with the word grace written on it haphazardly in varying tones of grey. there is a color test chart in the top-left corner." />
+	<p>
+		I found this walking through an under-construction bike path. It was mysteriously lying in a mound of dirt along
+		the path.
+	</p>
+	<p>
+		The metal feels lighter than steel and it's not magnetic; it might be made of aluminum? The writing feels rough.
+		I think
+		it's an etching or engraving.
+	</p>
+	<img src="grace-prehistory/testchart_quarter.jpg" class="smright"
+		alt="The top-left corner of the placard cropped on the colour chart" />
+	<p>
+		The little colour test chart is very interesting. Along the top it's labelled A through D
+		and the side 1 through 6. Only sixteen of the positions appear to have a colour. Most are
+		shades of yellow or grey. A-2 is a very nice blue, C-5 a pleasing pink. They get darker as
+		the rows go down, the sixth being too dark to make out much hue.
+	</p>
+</article>
+
+<p style="font-style: italic; max-width: 20rem; margin: 0 auto">i have lots more prehistory to add as i go through my
+	little box and take photos</p>
\ No newline at end of file
diff --git a/served/bits/smoems.html b/served/bits/smoems.html
new file mode 100644
index 0000000..2c52476
--- /dev/null
+++ b/served/bits/smoems.html
@@ -0,0 +1,60 @@
+---
+template=post
+title=Small Poems
+style=/styles/post.css
+style=poem.css
+publish=June 16th, 2023
+#Category poetry
+#Tags writing
+---
+[@paragraphs off]
+<p>
+	small poems; here they are! i posted most of them before to twitter, but that's for the birds.
+</p>
+
+<hr />
+
+<!-- https://twitter.com/gennyble/status/1669872284360757249 -->
+<!-- in stillness -->
+<pre>
+too much walking
+made these feet real sore.
+but the stillness was mocking
+so i did a little more.
+
+just now a dull ache
+as 've worn away the pain
+we now all understand
+in stillness, there's no gain
+</pre>
+
+<hr />
+
+<!-- https://twitter.com/gennyble/status/1572451953111859203 -->
+<!-- running in the street -->
+<pre>
+i went for a walk tonight but
+	i walked too fast;
+i jogged down the middle of the street and
+	took a stride too big;
+i ran with arms pumping much too hard; i sprinted and
+i lost
+my legs.
+my breath
+left me.
+i hovered—
+i flew.
+</pre>
+
+<hr />
+
+<!-- https://twitter.com/gennyble/status/1648470625999273984 -->
+<pre>
+in which she drank two monster
+(and ten ounces coffee)
+in which she looks for her w-2.
+(well, is supposed to be).
+in which she's lost track of time
+(and her place therein).
+in which she types to you from her car.
+</pre>
\ No newline at end of file
diff --git a/served/bits/touching-grass/grass.vtt b/served/bits/touching-grass/grass.vtt
new file mode 100644
index 0000000..c77f0c3
--- /dev/null
+++ b/served/bits/touching-grass/grass.vtt
@@ -0,0 +1,5 @@
+WEBVTT
+
+1
+00:00:01.250 --> 00:00:02.750 line:85%
+[grass ripping]
\ No newline at end of file
diff --git a/served/bits/touching-grass/touching-grass.css b/served/bits/touching-grass/touching-grass.css
new file mode 100644
index 0000000..765d1ea
--- /dev/null
+++ b/served/bits/touching-grass/touching-grass.css
@@ -0,0 +1,45 @@
+.mark {
+	color: var(--color-a);
+	cursor: pointer;
+}
+
+.mark:before,
+.mark:after {
+	color: var(--text-dim);
+}
+
+.mark:before {
+	content: '[';
+}
+
+.mark:after {
+	content: ']';
+}
+
+a[download] {
+	color: var(--color-a-dim);
+}
+
+.small,
+a[download] {
+	font-size: 0.75rem;
+}
+
+ul {
+	display: flex;
+
+	padding: 0;
+	margin: 0;
+
+	flex-direction: row;
+	flex-wrap: wrap;
+	column-gap: 8px;
+
+	align-items: baseline;
+
+	list-style: none;
+}
+
+#long {
+	flex-grow: 2;
+}
\ No newline at end of file
diff --git a/served/bits/touching-grass/touching-grass.html b/served/bits/touching-grass/touching-grass.html
new file mode 100644
index 0000000..a57cbd2
--- /dev/null
+++ b/served/bits/touching-grass/touching-grass.html
@@ -0,0 +1,80 @@
+---
+template=post
+title=Touching Grass
+style=touching-grass.css
+style=/styles/post.css
+#Publish 2023-07-29 17:46 -0500
+#Category video
+#Tags writing
+#QuarkedUp
+---
+[@paragraphs off]
+<section style="width: 100%; text-align: right; padding: 8px 0">
+	<video id="grass" controls width="100%" poster="grass_poster.jpg" preload="metadata" loop>
+		<source src="grass_720p.mp4" type="video/mp4" />
+		<track default src="grass.vtt" />
+	</video>
+	<ul>
+		<li class="small">download</li>
+		<li><a href="grass.mp4" download>[1080p | 7.1MB]</a></li>
+		<li><a href="grass_720p.mp4" download>[720p | 1.9MB]</a></li>
+		<li id="long"></li>
+		<li><input type="checkbox" checked id="loop"><label> loop video?</label></input></li>
+	</ul>
+</section>
+
+<script>
+	document.addEventListener("DOMContentLoaded", setup);
+
+	const video = document.getElementById("grass");
+	function setup() {
+		let marks = document.getElementsByClassName("mark");
+		for (let i = 0; i < marks.length; ++i) {
+			marks[i].addEventListener('click', markClick)
+		}
+		console.log(marks);
+
+		let loop = document.getElementById('loop');
+		loop.addEventListener('change', loopChanged)
+
+		// Fire once with a fake event so we aren't desynced
+		loopChanged({ 'target': loop });
+	}
+
+	function markClick(event) {
+		let target = event.target;
+		let time = parseFloat(target.getAttribute('data-time'));
+		console.log(`seeking to ${time}`)
+		video.currentTime = time;
+	}
+
+	function loopChanged(event) {
+		let target = event.target;
+		let checked = target.checked;
+		console.log(`video looping: ${checked}`);
+		video.loop = checked;
+	}
+</script>
+[@paragraphs on]
+
+I took this short video to send to a friend one day and accidentally
+made a 106 frame masterpiece. Well, that's hyperbolic, but there's a
+lot I enjoy about it.
+
+[#the-colours]
+The contrast between my orange painted nails and the surprisingly
+green grass is pretty pleasing. I think the gentle brown of the brick
+in the bottom-left corner helps keep from an overwhelming greenery.
+Thanks bricks :)
+
+[#the-composition]
+The accidental camera movement is nice, too. I like the angle the camera is at and the way it wobbles.
+It's clearly hand-held. At <span class="mark" data-time="1.3">1.3-ish-seconds</span>
+you can see I gently sway forward, but seem to be less wobbly. <i>I'm braced;
+I'm stable! I have-three-points-of-contact-with-the-ground!</i> Then, at roughly
+<span class="mark" data-time="1.9">2&nbsp;seconds</span> when the grass finally
+yields, I get rocked back and wobbles resume.
+
+[#the-sound]
+The sound! And the sound. The ripping of the grass. That planty matter finally giving way. The fibrous tearing.
+I just like it; I enjoy it! I greatly appreciate it.
diff --git a/served/colorsquash/colorsquash.html b/served/colorsquash/colorsquash.html
new file mode 100644
index 0000000..982eeb6
--- /dev/null
+++ b/served/colorsquash/colorsquash.html
@@ -0,0 +1,94 @@
+---
+template=post
+title=Colorsquash
+---
+[@paragraphs off]
+
+<style>
+	table {
+		border: none;
+		border-collapse: collapse;
+		border-spacing: 8px;
+	}
+
+	table tr:nth-last-of-type(2n) {
+		background-color: var(--background-alt);
+	}
+
+	table td:first-of-type {
+		padding-right: 8px;
+	}
+
+	table a {
+		padding: 16px;
+	}
+	
+	#images {
+		display: flex;
+		flex-direction: row;
+	}
+
+	#images figure {
+		width: 50%;
+	}
+
+	figure img {
+		width: 100%;
+	}
+
+	figcaption {
+		text-align: center;
+	}
+</style>
+
+<section id="images">
+	<figure>
+		<img src="astro.jpg" alt="a small dog laying on a concrete floor in an industrial building">
+		<figcaption>24bit rgb</figcaption>
+	</figure>
+
+	<figure>
+		<img src="astro_squash.gif" alt="the same image in 256 color. there are some visual differences, but the two images look very similar">
+		<figcaption>256 color indexed</figcaption>
+	</figure>
+</section>
+
+<table style="max-width: 75%; margin: auto; float: right;">
+	<tr>
+		<th>Platform</th>
+		<th>Size</th>
+	</tr>
+	<tr>
+		<td><a href="./v0.1.0/squash-v0.1.0_windows-x64.zip">Windows x64</a></td>
+		<td>295K</td>
+	</tr>
+	<tr>
+		<td><a href="./v0.1.0/squash-v0.1.0_linux-x64.tar.gz">Linux x64</a></td>
+		<td>1.3M</td>
+	</tr>
+	<tr>
+		<td><a href="./v0.1.0/squash-v0.1.0_linux-aarch64.tar.gz">Linux aarch64</a></td>
+		<td>1.3M</td>
+	</tr>
+	<tr>
+		<td><a href="./v0.1.0/squash-v0.1.0_macos-x64.tar.gz">MacOS x64</a></td>
+		<td>444K</td>
+	</tr>
+	<tr>
+		<td><a href="./v0.1.0/squash-v0.1.0_macos-aarch64.tar.gz">MacOS ARM</td>
+		<td>436K</td>
+	</tr>
+</table>
+
+<p>
+	GitHub's alright, but I think it'd be neat to host binaries here, too. They're still generated in GitHub's CI for now however.
+</p>
+
+<!--
+
+Links:
+1. https://stackoverflow.com/a/63868920
+	- https://github.com/herzbube/birthtime_touch
+	- https://www.anmolsarma.in/post/linux-file-creation-time/
+2. https://man7.org/linux/man-pages/man2/statx.2.html
+-->
\ No newline at end of file
diff --git a/served/home.html b/served/home.html
new file mode 100644
index 0000000..74f25bf
--- /dev/null
+++ b/served/home.html
@@ -0,0 +1,66 @@
+---
+template=minimal
+title=Home | nyble.dev
+style=/styles/home.css
+---
+[@paragraphs off]
+<header>
+	<img src="/faces/triblur/triblur_94.gif" alt="my face in 256 color with red and blue fringing" />
+
+	<section id="contact">
+		<h2>Contact~,.</h2>
+		<ul>
+			<li>Email! <a href="mailto:gen@nyble.dev">gen@nyble.dev</a></li>
+			<li>Github? <a href="https://github.com/gennyble">@gennyble</a></li>
+			<!-- well, i guess that's it. -->
+			<!-- <li>Twitter.. <a href="https://twitter.com/gennyble">@gennyble</a></li> -->
+			<li>Cohost: <a href="https://cohost.org/gen">cohost/gen</a></li>
+			<li>Fedi&mdash;<br><a href="https://amble.quest/inann" style="margin-left: 1rem">@inann@amble.quest</a></li>
+		</ul>
+	</section>
+</header>
+
+<main id="main-content">
+	<section id="greeting">
+		<h1>Hello,</h1>
+		<p>
+			I'm genny. I like to write software things. <br />
+			small, intentional tools and multimedia experiments are some of my favourite projects to work on.
+		</p>
+	</section>
+
+	<section id="multimedia">
+		<h2>sharing images, videos,<br /><a href="bits/" style="color: var(--color-a-dim)">bits/</a> of my world</h2>
+		<ol class="thing-list">
+			<li><a href="bits/ramen-bowl.html">ramen-bowl.html</a></li>
+			<li><a href="bits/touching-grass/">touching-grass.html</a></li>
+			<li><a href="bits/smoems.html">smoems.html</a></li>
+		</ol>
+	</section>
+
+	<section id="scrap">
+		<h2>&mdash; scrap</h2>
+		<p style="display: inline">
+			dropped things collected: <a href="bits/scrap/">scrap.html</a>
+		</p>
+		<p style="text-align: right;">
+			last update:<br />
+			<time datetime="2023-08-07">aug 7, 2023</time> - wrench!
+		</p>
+		<!-- for half-length border on right/bottom of this section -->
+		<div id="scrap-halfborder"></div>
+	</section>
+
+	<section id="writing">
+		<!-- for half-length border on left/top of this section -->
+		<div id="writing-halfborder"></div>
+
+		<a href="/atom.xml" style="float: right; margin-left: 1rem"><img src="valid-atom.png"></a>
+
+		<ul class="thing-list">
+			<li><a href="/atom.xml">atoml.xml</a> &mdash; subscribe with your feed reader ;)</li>
+			<li><a href="/things/">things/</a> &mdash; projects; creative pursuits; what i work on</li>
+			<li><a href="/words/">words/</a> &mdash; technical writing, project updates, and weeknotes.</li>
+		</ul>
+	</section>
+</main>
\ No newline at end of file
diff --git a/served/styles/common.css b/served/styles/common.css
new file mode 100644
index 0000000..b9c959b
--- /dev/null
+++ b/served/styles/common.css
@@ -0,0 +1,65 @@
+* {
+	box-sizing: border-box;
+}
+
+:root {
+	--text: #222;
+	--text-dim: #444;
+	--background: #FFF;
+	--background-dim: #F8F0F0;
+	--color-a: rgb(11, 113, 126);
+	--color-a-dim: rgb(7, 80, 90);
+}
+
+@media (prefers-color-scheme: dark) {
+	:root {
+		--text: #eee;
+		--text-dim: #bbb;
+		--background: #001;
+		--background-dim: #222;
+		--color-a: #3a8;
+		--color-a-dim: rgb(158, 228, 208);
+	}
+}
+
+html,
+body {
+	padding: 0;
+	margin: 0;
+}
+
+body {
+	font-size: 1.1rem;
+	line-height: 1.4;
+	font-family: sans-serif;
+	padding: 2rem 5vw;
+
+	color: var(--text);
+	background-color: var(--background);
+}
+
+a {
+	color: var(--color-a);
+}
+
+h1,
+h2,
+h3 {
+	font-family: serif;
+}
+
+#nav-access {
+	/* shove it above the page and make sure it's always on top*/
+	position: absolute;
+	top: -20rem;
+	left: 0;
+	width: 100%;
+	z-index: 1000000;
+
+	text-align: center;
+	font-size: 2rem;
+	list-style: none;
+	padding: 0;
+	margin: 0;
+	overflow: hidden;
+}
\ No newline at end of file
diff --git a/served/styles/home.css b/served/styles/home.css
new file mode 100644
index 0000000..64c534b
--- /dev/null
+++ b/served/styles/home.css
@@ -0,0 +1,147 @@
+body {
+	padding-top: 4rem;
+	padding-bottom: 4rem;
+}
+
+main,
+header {
+	max-width: 35rem;
+	margin: 0 auto;
+}
+
+header {
+	display: flex;
+	justify-content: space-between;
+	flex-wrap: wrap;
+	row-gap: 1rem;
+}
+
+header img {
+	width: 96px;
+	height: 96px;
+	margin-top: 1.5em;
+}
+
+#contact a {
+	text-decoration: none;
+	color: var(--color-a);
+	border-bottom: none;
+}
+
+#contact ul {
+	line-height: normal;
+	list-style: none;
+	padding: 0;
+	margin: 0;
+}
+
+#contact h2 {
+	margin: 0;
+}
+
+#greeting {
+	flex: 1 0 15rem;
+}
+
+#greeting h1 {
+	margin-top: 0;
+}
+
+.thing-list {
+	padding: 0.5rem 0;
+	margin: 0;
+	list-style-position: inside;
+}
+
+ul.thing-list {
+	padding: 0;
+	list-style: none;
+}
+
+section h2 {
+	margin: 0;
+}
+
+ol,
+ul.thing-list {
+	line-height: 1.5;
+}
+
+#scrap {
+	max-width: 25rem;
+}
+
+@media (min-width: 40rem) {
+	main {
+		padding: 1rem 0;
+		display: grid;
+		grid-template-columns: 1fr 1fr;
+		column-gap: 1rem;
+		row-gap: 0.5rem;
+	}
+
+	#greeting {
+		grid-column: 1 / 3;
+	}
+
+	#greeting p {
+		max-width: 25rem;
+	}
+
+	#scrap {
+		width: 100%;
+		/* a padding on desktop so it falls below the multimedia heading and
+		looks like it's kind of part of that section even if maybe it's not */
+		padding-top: 2.25rem;
+		position: relative;
+		padding-right: 1rem;
+	}
+
+	#scrap h2 {
+		display: inline;
+		margin: 0 0.5rem 0 0;
+	}
+
+	/* tried https://stackoverflow.com/a/68283780 but it didn't seem to want
+	to work for right and bottom at the same time */
+	#scrap-halfborder {
+		position: absolute;
+		right: 0;
+		bottom: 0;
+
+		z-index: -1;
+		width: 50%;
+		height: 50%;
+		border: 1px solid var(--text);
+		border-width: 0px 1px 1px 0px;
+	}
+
+	#writing-halfborder,
+	#feed-halfborder {
+		position: absolute;
+		left: 0;
+		top: 0;
+
+		z-index: -1;
+		width: 25%;
+		height: min(50%, 2rem);
+		border: 1px solid var(--text);
+		border-width: 1px 0 0 1px;
+	}
+
+	#writing {
+		padding-left: 1rem;
+		padding-top: 1rem;
+		position: relative;
+
+		grid-column: 1 / 3;
+	}
+
+	#feed {
+		position: relative;
+		margin: 1rem 0 0 1rem;
+		padding: 1rem 0 0 1rem;
+		width: 15rem;
+		float: right;
+	}
+}
\ No newline at end of file
diff --git a/served/styles/post.css b/served/styles/post.css
new file mode 100644
index 0000000..5913840
--- /dev/null
+++ b/served/styles/post.css
@@ -0,0 +1,5 @@
+.sized {
+	--page-width: 34rem;
+	max-width: var(--page-width);
+	margin: 0 auto;
+}
\ No newline at end of file
diff --git a/served/things/sillygifs/sillygifs.css b/served/things/sillygifs/sillygifs.css
new file mode 100644
index 0000000..678e292
--- /dev/null
+++ b/served/things/sillygifs/sillygifs.css
@@ -0,0 +1,22 @@
+table {
+	margin: 1rem auto;
+}
+
+@media (max-width: 50rem) {
+	/* Modile target */
+	table {
+		width: 100%;
+	}
+}
+
+@media (min-width: 50rem) {
+	/* Desktop target */
+
+	table {
+		min-width: 25rem;
+	}
+
+	td {
+		margin: 0 1rem;
+	}
+}
\ No newline at end of file
diff --git a/served/things/sillygifs/sillygifs.html b/served/things/sillygifs/sillygifs.html
new file mode 100644
index 0000000..1fe7b85
--- /dev/null
+++ b/served/things/sillygifs/sillygifs.html
@@ -0,0 +1,57 @@
+---
+template=post
+title=Sillygifs
+style=sillygifs.css
+style=/styles/post.css
+#Category gif
+---
+
+<section style="width: 100%; text-align: center; padding: 1rem 0">
+	<img src="0123456789.gif" style="max-width: 100%"
+		alt="animated gif counting from 0 to 9. the digits are written left to right rather then replacing the previous">
+</section>
+
+I <i>really</i> like GIFs. As cute little weird things people send to one another,
+and as an at-the-time-of-writing 34 year old file format. So I thought I'd make a
+few.
+
+The one that's counting above in an ambery colour is in the font Alarm Clock.
+You can find it here: <a href="https://www.dafont.com/alarm-clock.font">dafont.com/alarm-clock</a>.
+
+I wanted to make a long gif. A sillily long gif. Something so long that I seriously doubt anyone will let it
+play through entirely. Below is a set of five gif that count to different powers of ten with a second
+between numbers. They're black and white and are in the Instruction font
+(<a href="https://www.dafont.com/instruction.font">dafont</a>).
+
+<table>
+	<tr>
+		<th>File</th>
+		<th>Watch Time</th>
+		<th>Size</th>
+	</tr>
+	<tr>
+		<td><a href="100.gif">100.gif</a></td>
+		<td>1m40s</td>
+		<td>48.6KB</td>
+	</tr>
+	<tr>
+		<td><a href="1000.gif">1000.gif</a></td>
+		<td>16m40s</td>
+		<td>478.0KB</td>
+	</tr>
+	<tr>
+		<td><a href="10_000.gif">10_000.gif</a></td>
+		<td>2h46m40s</td>
+		<td>4.66MB</td>
+	</tr>
+	<tr>
+		<td><a href="100_000.gif">100_000.gif</a></td>
+		<td>1d3h46m40s</td>
+		<td>46.60MB</td>
+	</tr>
+	<tr>
+		<td><a href="1_000_000.gif">1_000_000.gif</a></td>
+		<td>11d13h46m40s</td>
+		<td>466.03MB</td>
+	</tr>
+</table>
\ No newline at end of file
diff --git a/served/things/things.html b/served/things/things.html
new file mode 100644
index 0000000..a70f20a
--- /dev/null
+++ b/served/things/things.html
@@ -0,0 +1,9 @@
+---
+template=post
+title=Things
+style=/styles/post.css
+#Category gif
+---
+
+living pages for my projects and their various states of dissary. This section
+is not part of the Atom Feed, but project updates published in words/ are.
\ No newline at end of file
diff --git a/served/words/akkoma-postgres-migration.html b/served/words/akkoma-postgres-migration.html
new file mode 100644
index 0000000..e7c804b
--- /dev/null
+++ b/served/words/akkoma-postgres-migration.html
@@ -0,0 +1,156 @@
+---
+template=post
+title=Akkoma Postgres Migration
+style=/styles/post.css
+style=writing.css
+#Summary A retelling of how I migrated my Akkoma instance's Postgres database and the troubles I faced.
+#Publish 2023-10-18
+---
+
+\<i>(i'm going to say Pleroma a lot here where Akkoma might
+	be correct for newly installed software, but my instance is
+	a few years old and this is more of a telling-of-events than
+	a guide)</i>
+
+<details class="tldr">
+	<summary>TL;DR; if you migrated your Akkoma's postgres and now you're getting timeouts</summary>
+	<p>
+		It might need a reindex. Use <code>psql</code> to connect
+		to the database and run <code>REINDEX DATABASE akkoma;</code>.
+		This might take awhile.
+	</p>
+</details>
+
+<hr/>
+
+Recently I went about trying to get the services running on
+my VPS to be happy in a gig of RAM. I did not achieve this,
+but I found a solution that worked nearly as well.
+
+I wanted to try to scale my VPS, on the "Linode 4GB" plan, back down to a Nanode. It
+started it's life as a Nanode but Akkoma - well, Pleroma then -
+was greatly displeased with this and pegged my CPU at 100%. Since
+my CPU usage lately peaks at 30% and averages 18%, this no longer
+seems to be the case.
+
+To re-nanode, I had to fit in 1G of memory.
+I managed to shave the 110M I needed
+by asking <code>systemd-journald</code> to stop using 80M of memory
+<i>(it seemed to ignore my 10M plea, but it dropped by 30M so whatever)</i>,
+telling Postgres to max use 100M, and disabling things that
+I as not actively using anymore.
+
+I didn't specifically want to learn the ins-and-outs of Postgres
+performance tuning, so I used <a href="https://pgtune.leopard.in.ua/">pgtune</a>
+to give me the right config lines for 100M. It worked well!
+
+This was all for naught, though, because I couldn't get my
+disk to fit under 25G, which was also a requirement of nanodeisation that I'd
+forgotten about. The database itself was 9.9G! You can
+<a href="https://docs.akkoma.dev/stable/administration/CLI_tasks/database/#prune-old-remote-posts-from-the-database">Prune old remote posts</a>
+but I didn't really want to do that yet. It seems like the right
+way to go, but I had one more trick.
+
+<h2 id="two-of-them">Two of Them?</h2>
+
+I have to keep a separate VPS around for another thing, and it gets
+half a percent of CPU usage, which is... not a lot. All it does is serve
+a single-page static site through Nginx. I could almost
+certainly put this on the same server as all my things, but
+I like having the separation.
+
+This does mean that I pay for almost an entire Nanode to do
+very nearly nothing. 
+
+By putting Postgres on it I'd lose the different-machine aspect
+of the separation, but gain so much disk space and memory. The
+single-page-static is still on a separate public IP which is
+good enough for me!
+
+<h3 id="setup-postgres">Postgres Migration</h3>
+
+<i>(more of a recount of events than a guide, but written guidlike? just pay mind to the commands and you'll be fine)</i>
+
+Install Postgres on the new server. It doesn't have to be the
+same major version since we're going to dump and restore the
+database which is
+<a href="https://www.postgresql.org/docs/current/upgrading.html">the recommended upgrade method anyway</a>.
+Don't forget to run <code>initdb</code> and give your data
+directory with the <code>-D</code> flag. Run it under the
+postgres user.
+
+Now create the database and role that you'll use. In my experience
+these have to match the database you're migrating from. I followed
+the <a href="https://docs.akkoma.dev/stable/administration/backup/#restoremove">Akkoma database restore/move</a>
+docs and ended up using psql, again under the postgres user, to run
+<code>CREATE USER akkoma WITH ENCRYPTED PASSWORD '&lt;database-password&gt;';</code> and
+<code>CREATE DATABASE akkoma OWNER akkoma;</code>. <i>(well, i replaced akkoma with pleroma and later used alter queries to change them, but that's because my database is old)</i>
+
+After that was ready, I used my firewall of choice (ufw) to
+allow the servers to talk using their private IPs <i>(yay same datacenter)</i>. After that was done, I ran
+this command <code>pg_dump -U akkoma -C akkoma | ssh dynamo "sudo psql -U akkoma -d akkoma"</code>
+and waited.
+<i>dynamo</i> being the host of the new postgres server and owner of a spot in my .ssh/config.
+
+A Note:<br/>
+you can directly do <code>pg_dump ... | psql ...</code> but the Postgres upgrade
+docs say you need to use the new psql version to upgrade, and the old server was missing that
+binary. Instead of seeing if psql 13 would work or if I could get psql 15 working there, I
+pipped it over ssh.
+
+It completed quicker than I thought, the command only took 21 minutes!, and all seemed well.
+
+<h3 id="all-was-not-well">All Was Not Well</h3>
+
+First, to prevent Akkoma from receiving activites that may
+be lost if I have to revert, I disallowed everything on 80/443
+except to my own IP so I could see if the web interface was working.
+Yeah my website'd be down for a bit but it was whatever. <i>(i think i could've
+	edited the nginx config to the same effect, but this was easier)</i>
+
+I edited my <code>/etc/pleroma/config.exs</code> to point
+to the new postgres server and started Akkoma, but new-Postgres didn't
+see a connection? Oh, I edited the wrong config and it was still
+connecting to the local Postgres.
+
+I deleted <code>/etc/pleroma</code>, so I'd stop getting confused by
+it, and edited the <i>correct</i> file: <code>/opt/pleroma/config/prod.secret.exs</code>
+<i>(this is because I'm a From Source install)</i>.
+
+Aaaand it didn't work. Turns out it was trying to connect to it's own private IP
+because copy-paste can be hard sometimes. Glad I stopped old-Postgres.
+
+Fixing that, I finally saw connections on the other machine. New problem: Akkoma
+timesout the query after 15000ms (15 seconds) because it was taking too long. what?
+and nothing is loading? ahhh.
+
+per the Akkoma docs from earlier, I ran some commands to try and cleanup
+the database. I'm a
+From Source install, so I can <code>mix pleroma.database vacuum analyze</code>
+which did <i>not help</i> so I tried it again with <code>full</code> instead
+of <code>analyze</code>. This also did not help.
+
+I think what I was looking for was Akkoma to throw a fit as evidence that
+something weird happened during the transfer, but nothing went wrong.
+
+So I was out of ideas. I am a Postgres novice and I'm out of luck. What
+does someone like me do when out of luck? Past the error into Google of course!
+Maybe I should've done that from the start, right, but I don't get
+many results for Akkoma or Pleroma normally.
+
+So to google I went! And pasted <q>timed out because it queued and checked out the connection for longer than 15000ms</q>
+
+and then I read
+<a href="https://elixirforum.com/t/timed-out-because-it-queued-and-checked-out-the-connection-for-longer-than-15000ms/34793/4">a comment from al2o3cr</a> that said:
+
+<blockquote>
+	<p>Usually that's an indication of database issues, from missing indexes to queries that need optimization.</p>
+</blockquote>
+
+"Missing indexes" there caught my eye. It made a lot of sense to me. It's
+taking so long because it's either digging through the 2.5 million activities
+in the database, or it's trying to reindex the thing <i>(both?)</i>. A quick
+google later and I ran <code>REINDEX akkoma;</code> from psql which literally
+fixed all of my problems.
+
+That's it! take care and don't forget to reindex after your migration.
\ No newline at end of file
diff --git a/served/words/atom.xml b/served/words/atom.xml
new file mode 100644
index 0000000..d8a38d5
--- /dev/null
+++ b/served/words/atom.xml
@@ -0,0 +1,196 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+
+	<title>gennyble's writing</title>
+	<subtitle>Technical writing; project updates; weeknotes</subtitle>
+	<updated>2024-03-02T01:42:00-06:00</updated>
+
+	<link rel="self" href="https://nyble.dev/words/atom.xml" type="application/atom+xml" />
+	<id>https://nyble.dev/words/atom.xml</id>
+
+	<author>
+			<name>gennyble</name>
+			<email>gen@nyble.dev</email>
+	</author>
+
+	
+	<entry>
+		<title>Akkoma Postgres Migration</title>
+		<link href="https://nyble.dev/words/akkoma-postgres-migration.html" rel="alternate" type="text/html" />
+		<id>https://nyble.dev/atom/writing-1/akkoma-postgres-migration</id>
+
+		<published>2023-10-18T23:16:00-05:00</published>
+		<updated>2023-10-18T23:16:00-05:00</updated>
+
+		<content type="html">
+&lt;p&gt;
+&lt;i&gt;(i&apos;m going to say Pleroma a lot here where Akkoma might
+	be correct for newly installed software, but my instance is
+	a few years old and this is more of a telling-of-events than
+	a guide)&lt;/i&gt;
+&lt;/p&gt;
+&lt;details class=&quot;tldr&quot;&gt;
+	&lt;summary&gt;TL;DR; if you migrated your Akkoma&apos;s postgres and now you&apos;re getting timeouts&lt;/summary&gt;
+	&lt;p&gt;
+		It might need a reindex. Use &lt;code&gt;psql&lt;/code&gt; to connect
+		to the database and run &lt;code&gt;REINDEX DATABASE akkoma;&lt;/code&gt;.
+		This might take awhile.
+	&lt;/p&gt;
+&lt;/details&gt;
+&lt;hr/&gt;
+&lt;p&gt;
+Recently I went about trying to get the services running on
+my VPS to be happy in a gig of RAM. I did not achieve this,
+but I found a solution that worked nearly as well.
+&lt;/p&gt;
+&lt;p&gt;
+I wanted to try to scale my VPS, on the &quot;Linode 4GB&quot; plan, back down to a Nanode. It
+started it&apos;s life as a Nanode but Akkoma - well, Pleroma then -
+was greatly displeased with this and pegged my CPU at 100%. Since
+my CPU usage lately peaks at 30% and averages 18%, this no longer
+seems to be the case.
+&lt;/p&gt;
+&lt;p&gt;
+To re-nanode, I had to fit in 1G of memory.
+I managed to shave the 110M I needed
+by asking &lt;code&gt;systemd-journald&lt;/code&gt; to stop using 80M of memory
+&lt;i&gt;(it seemed to ignore my 10M plea, but it dropped by 30M so whatever)&lt;/i&gt;,
+telling Postgres to max use 100M, and disabling things that
+I as not actively using anymore.
+&lt;/p&gt;
+&lt;p&gt;
+I didn&apos;t specifically want to learn the ins-and-outs of Postgres
+performance tuning, so I used &lt;a href=&quot;https://pgtune.leopard.in.ua/&quot;&gt;pgtune&lt;/a&gt;
+to give me the right config lines for 100M. It worked well!
+&lt;/p&gt;
+&lt;p&gt;
+This was all for naught, though, because I couldn&apos;t get my
+disk to fit under 25G, which was also a requirement of nanodeisation that I&apos;d
+forgotten about. The database itself was 9.9G! You can
+&lt;a href=&quot;https://docs.akkoma.dev/stable/administration/CLI_tasks/database/#prune-old-remote-posts-from-the-database&quot;&gt;Prune old remote posts&lt;/a&gt;
+but I didn&apos;t really want to do that yet. It seems like the right
+way to go, but I had one more trick.
+&lt;/p&gt;
+&lt;h2 id=&quot;two-of-them&quot;&gt;Two of Them?&lt;/h2&gt;
+&lt;p&gt;
+I have to keep a separate VPS around for another thing, and it gets
+half a percent of CPU usage, which is... not a lot. All it does is serve
+a single-page static site through Nginx. I could almost
+certainly put this on the same server as all my things, but
+I like having the separation.
+&lt;/p&gt;
+&lt;p&gt;
+This does mean that I pay for almost an entire Nanode to do
+very nearly nothing. 
+&lt;/p&gt;
+&lt;p&gt;
+By putting Postgres on it I&apos;d lose the different-machine aspect
+of the separation, but gain so much disk space and memory. The
+single-page-static is still on a separate public IP which is
+good enough for me!
+&lt;/p&gt;
+&lt;h3 id=&quot;setup-postgres&quot;&gt;Postgres Migration&lt;/h3&gt;
+&lt;i&gt;(more of a recount of events than a guide, but written guidlike? just pay mind to the commands and you&apos;ll be fine)&lt;/i&gt;
+&lt;p&gt;
+Install Postgres on the new server. It doesn&apos;t have to be the
+same major version since we&apos;re going to dump and restore the
+database which is
+&lt;a href=&quot;https://www.postgresql.org/docs/current/upgrading.html&quot;&gt;the recommended upgrade method anyway&lt;/a&gt;.
+Don&apos;t forget to run &lt;code&gt;initdb&lt;/code&gt; and give your data
+directory with the &lt;code&gt;-D&lt;/code&gt; flag. Run it under the
+postgres user.
+&lt;/p&gt;
+&lt;p&gt;
+Now create the database and role that you&apos;ll use. In my experience
+these have to match the database you&apos;re migrating from. I followed
+the &lt;a href=&quot;https://docs.akkoma.dev/stable/administration/backup/#restoremove&quot;&gt;Akkoma database restore/move&lt;/a&gt;
+docs and ended up using psql, again under the postgres user, to run
+&lt;code&gt;CREATE USER akkoma WITH ENCRYPTED PASSWORD &apos;&amp;lt;database-password&amp;gt;&apos;;&lt;/code&gt; and
+&lt;code&gt;CREATE DATABASE akkoma OWNER akkoma;&lt;/code&gt;. &lt;i&gt;(well, i replaced akkoma with pleroma and later used alter queries to change them, but that&apos;s because my database is old)&lt;/i&gt;
+&lt;/p&gt;
+&lt;p&gt;
+After that was ready, I used my firewall of choice (ufw) to
+allow the servers to talk using their private IPs &lt;i&gt;(yay same datacenter)&lt;/i&gt;. After that was done, I ran
+this command &lt;code&gt;pg_dump -U akkoma -C akkoma | ssh dynamo &quot;sudo psql -U akkoma -d akkoma&quot;&lt;/code&gt;
+and waited.
+&lt;i&gt;dynamo&lt;/i&gt; being the host of the new postgres server and owner of a spot in my .ssh/config.
+&lt;/p&gt;
+&lt;p&gt;
+A Note:&lt;br/&gt;
+you can directly do &lt;code&gt;pg_dump ... | psql ...&lt;/code&gt; but the Postgres upgrade
+docs say you need to use the new psql version to upgrade, and the old server was missing that
+binary. Instead of seeing if psql 13 would work or if I could get psql 15 working there, I
+pipped it over ssh.
+&lt;/p&gt;
+&lt;p&gt;
+It completed quicker than I thought, the command only took 21 minutes!, and all seemed well.
+&lt;/p&gt;
+&lt;h3 id=&quot;all-was-not-well&quot;&gt;All Was Not Well&lt;/h3&gt;
+&lt;p&gt;
+First, to prevent Akkoma from receiving activites that may
+be lost if I have to revert, I disallowed everything on 80/443
+except to my own IP so I could see if the web interface was working.
+Yeah my website&apos;d be down for a bit but it was whatever. &lt;i&gt;(i think i could&apos;ve
+	edited the nginx config to the same effect, but this was easier)&lt;/i&gt;
+&lt;/p&gt;
+&lt;p&gt;
+I edited my &lt;code&gt;/etc/pleroma/config.exs&lt;/code&gt; to point
+to the new postgres server and started Akkoma, but new-Postgres didn&apos;t
+see a connection? Oh, I edited the wrong config and it was still
+connecting to the local Postgres.
+&lt;/p&gt;
+&lt;p&gt;
+I deleted &lt;code&gt;/etc/pleroma&lt;/code&gt;, so I&apos;d stop getting confused by
+it, and edited the &lt;i&gt;correct&lt;/i&gt; file: &lt;code&gt;/opt/pleroma/config/prod.secret.exs&lt;/code&gt;
+&lt;i&gt;(this is because I&apos;m a From Source install)&lt;/i&gt;.
+&lt;/p&gt;
+&lt;p&gt;
+Aaaand it didn&apos;t work. Turns out it was trying to connect to it&apos;s own private IP
+because copy-paste can be hard sometimes. Glad I stopped old-Postgres.
+&lt;/p&gt;
+&lt;p&gt;
+Fixing that, I finally saw connections on the other machine. New problem: Akkoma
+timesout the query after 15000ms (15 seconds) because it was taking too long. what?
+and nothing is loading? ahhh.
+&lt;/p&gt;
+&lt;p&gt;
+per the Akkoma docs from earlier, I ran some commands to try and cleanup
+the database. I&apos;m a
+From Source install, so I can &lt;code&gt;mix pleroma.database vacuum analyze&lt;/code&gt;
+which did &lt;i&gt;not help&lt;/i&gt; so I tried it again with &lt;code&gt;full&lt;/code&gt; instead
+of &lt;code&gt;analyze&lt;/code&gt;. This also did not help.
+&lt;/p&gt;
+&lt;p&gt;
+I think what I was looking for was Akkoma to throw a fit as evidence that
+something weird happened during the transfer, but nothing went wrong.
+&lt;/p&gt;
+&lt;p&gt;
+So I was out of ideas. I am a Postgres novice and I&apos;m out of luck. What
+does someone like me do when out of luck? Past the error into Google of course!
+Maybe I should&apos;ve done that from the start, right, but I don&apos;t get
+many results for Akkoma or Pleroma normally.
+&lt;/p&gt;
+&lt;p&gt;
+So to google I went! And pasted &lt;q&gt;timed out because it queued and checked out the connection for longer than 15000ms&lt;/q&gt;
+&lt;/p&gt;
+&lt;p&gt;
+and then I read
+&lt;a href=&quot;https://elixirforum.com/t/timed-out-because-it-queued-and-checked-out-the-connection-for-longer-than-15000ms/34793/4&quot;&gt;a comment from al2o3cr&lt;/a&gt; that said:
+&lt;/p&gt;
+&lt;blockquote&gt;
+	&lt;p&gt;Usually that&apos;s an indication of database issues, from missing indexes to queries that need optimization.&lt;/p&gt;
+&lt;/blockquote&gt;
+&lt;p&gt;
+&quot;Missing indexes&quot; there caught my eye. It made a lot of sense to me. It&apos;s
+taking so long because it&apos;s either digging through the 2.5 million activities
+in the database, or it&apos;s trying to reindex the thing &lt;i&gt;(both?)&lt;/i&gt;. A quick
+google later and I ran &lt;code&gt;REINDEX akkoma;&lt;/code&gt; from psql which literally
+fixed all of my problems.
+&lt;/p&gt;
+&lt;p&gt;
+That&apos;s it! take care and don&apos;t forget to reindex after your migration.
+&lt;/p&gt;
+		</content>
+	</entry>
+	
+</feed>
\ No newline at end of file
diff --git a/served/words/words.html b/served/words/words.html
new file mode 100644
index 0000000..c33515d
--- /dev/null
+++ b/served/words/words.html
@@ -0,0 +1,16 @@
+---
+template=post
+title=Writing
+style=/styles/post.css
+---
+
+If I write about tech things, you'll be able to find those things here.
+
+The writing is part of the website <a href="/atom.xml">Atom Feed</a>.
+
+<section class="written" style="clear: both;">
+	<a href="akkoma-postgres-migration.html">Akkoma Postgres Migration</a>
+	<p>
+		A retelling of how I migrated my Akkoma instance's Postgres database and the troubles I faced.
+	</p>
+</section>
diff --git a/served/words/writing.css b/served/words/writing.css
new file mode 100644
index 0000000..6056768
--- /dev/null
+++ b/served/words/writing.css
@@ -0,0 +1,54 @@
+h2, h3, h4, h5 {
+	margin-top: 32px;
+}
+
+blockquote {
+	border-left: 4px solid var(--text);
+	padding: 8px 8px 8px 12px;
+	margin: 0 auto;
+	background-color: var(--background-dim);
+	color: var(--text);
+	font-style: italic;
+}
+
+blockquote p {
+	margin: 0;
+}
+
+code {
+	background-color: var(--background-dim);
+}
+
+details.tldr {
+	width: 100%;
+	margin: 1rem auto;
+}
+
+details.tldr {
+	color: var(--text-dim);
+
+	padding: 8px;
+
+	border-radius: 8px;
+	border: 1px dashed var(--text-dim);
+}
+
+details[open].tldr summary {
+	padding-bottom: 8px;
+	margin-bottom: 8px;
+	border-bottom: 1px solid var(--text-dim);
+}
+
+details.tldr p {
+	margin: 0;
+}
+
+q {
+	background-color: var(--background-dim);
+	font-style: italic;
+	padding: 4px;
+}
+
+q::before, q::after {
+	content: none;
+}
diff --git a/support/.times b/support/.times
new file mode 100644
index 0000000..2a7d36b
--- /dev/null
+++ b/support/.times
@@ -0,0 +1,5 @@
+,1701572006,1701572898,1701572898
+.times-ignore,1701572836,1701572840,1701572840
+.times,1701572898,1701573742,1701573729
+readme.md,1701572410,1701573718,1701573720
+updateTimes.sh,1701572592,1701572893,1701572898
diff --git a/support/atom.conf b/support/atom.conf
new file mode 100644
index 0000000..eea619a
--- /dev/null
+++ b/support/atom.conf
@@ -0,0 +1,87 @@
+Webroot /home/gen/src/inf/served
+Template /home/gen/src/inf/support/atom.xml
+
+Feed words
+	Output words/atom.xml
+
+	Link https://nyble.dev/words/atom.xml
+	Id https://nyble.dev/words/atom.xml
+
+	Title gennyble's writing
+	Subtitle Technical writing; project updates; weeknotes
+	Updated 2024-03-02T01:42:00-06:00
+	Author
+		Name gennyble
+		Email gen@nyble.dev
+
+	# Reads the title from the frontmatter 
+	Entry words/akkoma-postgres-migration.html
+		Link https://nyble.dev/words/akkoma-postgres-migration.html
+		Id https://nyble.dev/atom/writing-1/akkoma-postgres-migration
+
+		Published 2023-10-18T23:16:00-05:00
+		Updated 2023-10-18T23:16:00-05:00
+
+Feed bits
+	Output bits/atom.xml
+
+	Link https://nyble.dev/bits/atom.xml
+	Id https://nyble.dev/bits/atom.xml
+
+	Title gennyble's creative pursuits
+	Subtitle Photos; Poetry; Prose
+	Updated 2024-03-02T01:42:00-06:00
+	Author
+		Name gennyble
+		Email gen@nyble.dev
+
+	Entry bits/smoems.html
+		Link https://nyble.dev/bits/smoems.html
+		Id https://nyble.dev/atom/bits-1/smoems
+
+		Published 2023-07-15T19:59:00-05:00
+		Updated 2023-07-15T19:59:00-05:00
+
+	Entry bits/touching-grass/touching-grass.html
+		Link https://nyble.dev/bits/touching-grass/
+		Id https://nyble.dev/atom/bits-2/touching-grass
+
+		Published 2023-07-29T17:46:00-05:00
+		Updated 2023-07-29T17:46:00-05:00
+
+	Entry bits/scrap/scrap.html
+		Title scrap: Grace (prehistory)
+		Part #grace-prehistory
+
+		Link https://nyble.dev/bits/scrap/
+		Id https://nyble.dev/atom/bits-3/scrap/grace-prehistory
+
+		Published 2023-09-15T15:26:20-05:00
+		Updated 2023-09-15T15:26:20-05:00
+
+	Entry bits/scrap/scrap.html
+		Title scrap: Aeropostale (prehistory)
+		Part #aeropostale-prehistory
+		
+		Link https://nyble.dev/bits/scrap/
+		Id https://nyble.dev/atom/bits-4/scrap/aeropostale-prehistory
+
+		Published 2023-09-15T15:27:00-05:00
+		Updated 2023-09-15T15:27:00-05:00
+
+	Entry bits/scrap/scrap.html
+		Title scrap: Wrench! (August 7th, 2023)
+		Part #wrench_2023-08-07
+		
+		Link https://nyble.dev/bits/scrap/
+		Id https://nyble.dev/atom/bits-5/scrap/wrench_2023-08-07
+
+		Published 2023-09-15T15:30:00-05:00
+		Updated 2023-09-15T15:30:00-05:00
+
+	Entry bits/ramen-bowl.html
+		Link https://nyble.dev/bits/ramen-bowl.html
+		Id https://nyble.dev/atom/bits-6/ramen-bowl.html
+
+		Published 2023-12-21T23:00:00-06:00
+		Updated 2023-12-21T23:00:00-06:00
\ No newline at end of file
diff --git a/support/atom.xml b/support/atom.xml
new file mode 100644
index 0000000..a2a1873
--- /dev/null
+++ b/support/atom.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+
+	<title>{feed_title}</title>
+	<subtitle>{feed_subtitle}</subtitle>
+	<updated>{feed_updated}</updated>
+
+	<link rel="self" href="{feed_link}" type="application/atom+xml" />
+	<id>{feed_id}</id>
+
+	<author>
+			<name>{feed_author_name}</name>
+			<email>{feed_author_email}</email>
+	</author>
+
+	{%pattern entry}
+	<entry>
+		<title>{entry_title}</title>
+		<link href="{entry_link}" rel="alternate" type="text/html" />
+		<id>{entry_id}</id>
+
+		<published>{entry_published}</published>
+		<updated>{entry_updated}</updated>
+
+		<content type="html">
+{entry_content}
+		</content>
+	</entry>
+	{%end}
+</feed>
\ No newline at end of file
diff --git a/support/keeplinks b/support/keeplinks
new file mode 100644
index 0000000..d669345
--- /dev/null
+++ b/support/keeplinks
@@ -0,0 +1,2 @@
+sillygifs.html => /sillygifs.html
+gif => /gif/
\ No newline at end of file
diff --git a/support/redirects b/support/redirects
new file mode 100644
index 0000000..81d55eb
--- /dev/null
+++ b/support/redirects
@@ -0,0 +1,45 @@
+sillygifs.html => sillygifs/
+
+touching-grass.html => touching-grass/
+smoems.html => smoems/
+
+# cohost
+/words/gif-selfies-and-color-quantization/pngd_nv12_2.webp
+/words/gif-selfies-and-color-quantization/pngd_nv12_3.webp
+/words/gif-selfies-and-color-quantization/pngd_nv12_4.webp
+/words/gif-selfies-and-color-quantization/pngd_nv12_5.webp
+/words/gif-selfies-and-color-quantization/close_candle.gif
+/words/gif-selfies-and-color-quantization/goth.gif
+/words/gif-selfies-and-color-quantization/yay_color.gif
+
+/words/dslr-trichrome-kind-of/trichrome/lighthouse_half.webp
+/words/dslr-trichrome-kind-of/trichrome/lighthouse_half.jpg
+/words/dslr-trichrome-kind-of/trichrome/gay_hydrant_half.webp
+/words/dslr-trichrome-kind-of/trichrome/gay_hydrant_half.jpg
+/words/dslr-trichrome-kind-of/bracketed/chart_quarter.webp
+/words/dslr-trichrome-kind-of/bracketed/chart_quarter.jpg
+/words/dslr-trichrome-kind-of/bracketed/fox_bridge_quarter.webp
+/words/dslr-trichrome-kind-of/bracketed/fox_bridge_quarter.jpg
+/words/dslr-trichrome-kind-of/bracketed/yield_half.webp
+/words/dslr-trichrome-kind-of/bracketed/yield_half.jpg
+/words/dslr-trichrome-kind-of/bracketed/spool_quarter.webp
+/words/dslr-trichrome-kind-of/bracketed/spool_quarter.jpg
+
+/links-in-the-night/blank/blank_full.png
+
+/touching-grass.html
+
+/triblur_94.png
+/triblur_94.gif
+
+/links-in-the-night/lady_overwatch_quarter.jpg
+/links-in-the-night/lala2_quart.png
+/links-in-the-night/ladyyawn.gif
+
+/links-in-the-night/ladyinlight196.gif
+
+/links-in-the-night/ladyinlight196_bt709_studioswing.gif
+
+/links-in-the-night/genderchangers.gif
+
+/links-in-the-night/ladymidlick.gif
\ No newline at end of file
diff --git a/templates/base.html b/templates/base.html
new file mode 100644
index 0000000..30c7a45
--- /dev/null
+++ b/templates/base.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+	<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+	<meta charset="utf-8" />
+
+	<link rel="icon" type="image/gif" href="/faces/triblur/triblur_94.gif" />
+
+	<title>{title}</title>
+
+	<link rel="stylesheet" href="/styles/common.css" />
+	{%pattern styles}
+	<link rel="stylesheet" href="{style}" />
+	{%end}
+</head>
+
+<body>
+	<ul id="nav-access">
+		<li><a href="#main-content">Skip to main content</a></li>
+	</ul>
+	{%wrapped-content}
+</body>
+
+</html>
\ No newline at end of file
diff --git a/templates/minimal.html b/templates/minimal.html
new file mode 100644
index 0000000..68c3716
--- /dev/null
+++ b/templates/minimal.html
@@ -0,0 +1,3 @@
+{%wrap-include base.html}
+{main}
+{%end}
\ No newline at end of file
diff --git a/templates/post.html b/templates/post.html
new file mode 100644
index 0000000..802b4e1
--- /dev/null
+++ b/templates/post.html
@@ -0,0 +1,11 @@
+{%wrap-include base.html}
+<nav class="sized">
+	{%pattern path}
+	<a id="home" href="{path_link}" alt="home">&larr; {path_name}</a>
+	{%end}
+</nav>
+<main id="main-content" class="writing sized">
+	<h1>{title}</h1>
+	{main}
+</main>
+{%end}
\ No newline at end of file