diff options
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> — a poem about my ramen noodel bowl</li> + <li><a href="touching-grass/">touching-grass.html</a> — a short video with an exciteable description</li> + <li><a href="smoems.html">smoems.html</a> — 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 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—<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>— 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> — subscribe with your feed reader ;)</li> + <li><a href="/things/">things/</a> — projects; creative pursuits; what i work on</li> + <li><a href="/words/">words/</a> — 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 '<database-password>';</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"> +<p> +<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> +</p> +<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/> +<p> +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. +</p> +<p> +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. +</p> +<p> +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. +</p> +<p> +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! +</p> +<p> +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. +</p> +<h2 id="two-of-them">Two of Them?</h2> +<p> +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. +</p> +<p> +This does mean that I pay for almost an entire Nanode to do +very nearly nothing. +</p> +<p> +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! +</p> +<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> +<p> +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. +</p> +<p> +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> +</p> +<p> +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. +</p> +<p> +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. +</p> +<p> +It completed quicker than I thought, the command only took 21 minutes!, and all seemed well. +</p> +<h3 id="all-was-not-well">All Was Not Well</h3> +<p> +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> +</p> +<p> +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. +</p> +<p> +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>. +</p> +<p> +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. +</p> +<p> +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. +</p> +<p> +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. +</p> +<p> +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. +</p> +<p> +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. +</p> +<p> +So to google I went! And pasted <q>timed out because it queued and checked out the connection for longer than 15000ms</q> +</p> +<p> +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: +</p> +<blockquote> + <p>Usually that's an indication of database issues, from missing indexes to queries that need optimization.</p> +</blockquote> +<p> +"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. +</p> +<p> +That's it! take care and don't forget to reindex after your migration. +</p> + </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">← {path_name}</a> + {%end} +</nav> +<main id="main-content" class="writing sized"> + <h1>{title}</h1> + {main} +</main> +{%end} \ No newline at end of file |