summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteph Enders <steph@senders.io>2024-03-07 15:17:29 -0500
committerSteph Enders <steph@senders.io>2024-03-07 15:17:29 -0500
commit1f689fd039533801842ae241671f2437ddbe0044 (patch)
tree50d3db88f2c7e676d6679696a101e6ae2b25448f
parent80f5dacf988b1cddd04eea6c4a6f70b165376764 (diff)
Copy old files and update build.sh to generate it all!
This is a huge messy commit but :) sue me. I'm not at work I can do git badly for once!
-rw-r--r--.gitignore3
-rw-r--r--README.md4
-rwxr-xr-xbuild.sh247
-rw-r--r--ideas.org9
-rw-r--r--posts/a-tour-de-chorus.html317
-rw-r--r--posts/bread.html120
-rw-r--r--posts/choosing-to-write-in-html.html (renamed from _posts/choosing-to-write-in-html.html)1
-rw-r--r--posts/css-themes-exist-now.html104
-rw-r--r--posts/first-a-new-years-resolution.html50
-rw-r--r--posts/how-i-generate-my-rss-feed.html146
-rw-r--r--posts/index.html15
-rw-r--r--posts/lisps-assembly-c-and-conlangs.html102
-rw-r--r--posts/manjaro-experiment.html144
-rw-r--r--posts/manjaro-follow-up-breaking-things.html99
-rw-r--r--posts/music-blog.html76
-rw-r--r--posts/music-spotlight-my-top-album-2022.html396
-rw-r--r--posts/my-markdown-html-setup.html212
-rw-r--r--posts/remember-recall-what-couldve-been-a-command-line-tool.html50
-rw-r--r--posts/rss-a-follow-up.html234
-rw-r--r--posts/tracks.html191
-rw-r--r--posts/venturing-back-into-c.html153
-rw-r--r--res/audio/ancient-signals-intermission.mp3bin0 -> 4430652 bytes
-rw-r--r--res/audio/as-tears-snuff-the-embers-i-scream.mp3bin0 -> 11638156 bytes
-rw-r--r--res/audio/in-session.mp3bin0 -> 5618614 bytes
-rw-r--r--res/audio/terraforming-spring.mp3bin0 -> 7744826 bytes
-rw-r--r--res/audio/unspoken.mp3bin0 -> 1717872 bytes
-rw-r--r--res/audio/untitled-1.mp3bin0 -> 2686320 bytes
-rw-r--r--templates/feed.rss14
-rw-r--r--templates/index.css (renamed from _templates/index.css)72
-rw-r--r--templates/page.html (renamed from _templates/page.html)9
-rw-r--r--templates/rss-item.xml11
31 files changed, 2707 insertions, 72 deletions
diff --git a/.gitignore b/.gitignore
index dfb90e6..8ba12ec 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
*.sw*
*.md.backup
www
-.build \ No newline at end of file
+.build
+gemini \ No newline at end of file
diff --git a/README.md b/README.md
index 269d7c1..3e647e0 100644
--- a/README.md
+++ b/README.md
@@ -5,8 +5,8 @@ This is the repo for my personal website. It's not much but it's mine.
## Structure
`./build.sh` builds the site - generates a `www` and `gemini` folder!
-`_posts` is where the posts go!
-`_templates` are where the templates are for file generation
+`posts` is where the posts go!
+`templates` are where the templates are for file generation
`static-html` all the HTML files that are, well, static and can be copied as written
`static-gemini` all the gemtext files that are, also, static and can be copied as written
`res` all the resources! These will end up in `www/media`
diff --git a/build.sh b/build.sh
index 20d232b..307c377 100755
--- a/build.sh
+++ b/build.sh
@@ -1,11 +1,10 @@
#!/usr/bin/env bash
-
BUILD=.build/
function extract_metadata() {
- name=$1
- file=$2
- val=$(sed -nE "/^--${name}: .+$/s/^--${name}: (.+)$/\1/p" $file)
+ local name=$1
+ local file=$2
+ local val=$(sed -nE "/^--${name}: .+$/s/^--${name}: (.+)$/\1/p" $file)
if [ -z "$val" ]; then
echo ""
return 1
@@ -16,27 +15,42 @@ function extract_metadata() {
}
function mktemp_file() {
- name=$1
- var=$(mktemp -p $BUILD "${name}_XXXXXX")
+ local name=$1
+ local var=$(mktemp -p $BUILD "${name}_XXXXXX")
echo "${var}"
return 0
}
+function extract_title() {
+ sed -n -E "1,/<\/h1>/s/.*<h1>(.+)<\/h1>.*/\1/p1" $1
+}
+
function generate_index() {
- base_dir=$1
+ local base_dir=$1
echo "Generating index for $base_dir"
- page_file=$(mktemp_file "index_page")
- content_file=$(mktemp_file "index_content")
- title=$(basename ${base_dir})
+ local page_file=$(mktemp_file "index_page")
+ local content_file=$(mktemp_file "index_content")
+ local indexed_files=$(mktemp_file "indexed_files")
+ local title=$(basename ${base_dir})
echo "<article>
<h1>${title} index</h1>
<ul>" > $content_file
- find $base_dir -type f -iname "*.html" \
- -exec echo "<li><a href=\"{}\">{}</a></li>" \; >> $content_file
- echo "</ul>
- </article>" >> $content_file
- sed -i "s,${base_dir},.,g" $content_file
+ find $base_dir -type f -iname "*.html" | sort -hr > $indexed_files
+ while read post; do
+ post_date=$(sed -n -E "1,/datetime=/s/Posted:.*datetime=.([0-9-]+).*/\1/p1" $post)
+ post_title=$(extract_title $post)
+ if [ -z "${post_date}" ]; then
+ echo "<li><a href=\"${post}\">${post_title}</a></li>" >> $content_file
+ else
+ echo "<li><a href=\"${post}\">${post_date} — ${post_title}</a></li>" >> $content_file
+ fi
+
+
+ done <$indexed_files
+ echo "</ul></article>" >> $content_file
+ sed -i "s,${base_dir},.,g" $content_file
+
generate_page "index" $content_file $page_file
# strip out the footer
@@ -54,11 +68,11 @@ function generate_index() {
# generates the base page structure
# any "special" functions can go in their various code_paths
function generate_page() {
- type=$1
- content_file=$2
- page_file=$3
+ local type=$1
+ local content_file=$2
+ local page_file=$3
echo "Using $page_file for file"
- cat _templates/page.html > $page_file
+ cat templates/page.html > $page_file
echo "Using $content_file for content"
sed -i "/^--/d" $content_file
@@ -70,12 +84,12 @@ function generate_page() {
echo "Injecting CSS into $page_file"
sed -i -e "/STYLE/ {
- r _templates/index.css
+ r templates/index.css
d}" $page_file
echo "Extracting page title"
page_title=$(sed -nE "/<\/h1>/s,.*<h1>(.+)</h1>.*,\1,1p" $content_file)
- sed -i -E "s/[{]PAGE_TITLE[}]/$page_title/1" $page_file
+ sed -i -E "s/[{]PAGE_TITLE[}]/${page_title/\//\\/}/1" $page_file
echo "Setting type"
if [ -z "$type" ]; then
@@ -87,6 +101,89 @@ function generate_page() {
return 0
}
+function set_tags() {
+ local tags=$1
+ local post_file=$2
+ if [ -z "$tags" ]; then
+ sed -i -E "s/[{]TAGS[}]//" $post_file
+ else
+ local tags_html_file=$(mktemp_file "tags_html")
+ echo "Using tags file $tags_html_file"
+ echo "<li>Tags: [ ${tags} ]</li>" > $tags_html_file
+ sed -i -e "/TAGS/ {
+ r $tags_html_file
+ d}" $post_file
+ fi
+
+}
+
+function set_post_date () {
+ local post_date=$1
+ local post_file=$2
+ match=$(echo $post_date | sed -n -E "s/^([0-9-]+)$/\1/p")
+ if [ -z "$match" ]; then
+ sed -i -E "s/[{]POST_DATE[}]//" $post_file
+ else
+ local post_date_html=$(mktemp_file "post_date")
+ display_date=$(date -d "${post_date}" +"%B %d, %Y")
+ echo "<li>
+ Posted: <time datetime=\"${post_date}\">${display_date}</time>
+ </li>" > $post_date_html
+ sed -i -e "/POST_DATE/ {
+ r $post_date_html
+ d}" $post_file
+
+ fi
+}
+
+function set_updated_at() {
+ local updated_at=$1
+ local post_file=$2
+ if [ -z "$updated_at" ]; then
+ sed -i -E "s/[{]UPDATED[}]//" $post_file
+ else
+ updated_html_file=$(mktemp_file "updated_html")
+ updated_disp=$(date -d "${updated_at}" +"%B %d, %Y")
+ echo "<li>
+ Updated on: <time datetime=\"${updated_at}\">${updated_disp}</time>
+ </li>" > $updated_html_file
+ sed -i -e "/UPDATED/ {
+ r ${updated_html_file}
+ d}" $post_file
+ fi
+}
+
+function push_pin() {
+ local post_date=$1
+ local post_url=$2
+ local post_title=$3
+ local pin_file=$4
+ local pin_text="<li><a href=\"${post_url}\">"
+ matched=$(echo "${post_date}" | sed -n -E "s/^([0-9-]+)$/\1/p")
+ if [ ! -z "${matched}" ]; then
+ pin_text="${pin_text}${post_date} — "
+ fi
+ pin_text="${pin_text}${post_title}</a></li>"
+ echo $pin_text >> $pin_file
+}
+
+function add_to_rss() {
+ local post_date=$1
+ local post_url=$2
+ local post_title=$3
+ local content_file=$4
+ local rss_data=$5
+ local pub_date=$(date -d "${post_date}" -R)
+ sed -E -e "{
+ s/[{]TITLE[}]/${post_title}/1;
+ s,[{]LINK[}],${post_url},g;
+ s/[{]PUBDATE[}]/${pub_date}/1;
+ /CONTENT/ {
+ r ${content_file}
+ d}
+ }" templates/rss-item.xml >> ${rss_data}
+}
+
echo "Clearing build-cache"
rm -rf $BUILD
mkdir $BUILD
@@ -101,8 +198,11 @@ rm -rf gemini
mkdir gemini
echo "Building html"
-# TODO
-for post in _posts/*.html; do
+pinned_html=$(mktemp_file "pinned")
+rss_data=$(mktemp_file "rss_data")
+echo "Using pinned file: $pinned_html"
+for post in posts/*.html; do
+ echo "Processing $post"
post_date=$(extract_metadata "post-date" $post)
if [ -z "$post_date" ]; then
# post is not ready to be posted
@@ -110,14 +210,15 @@ for post in _posts/*.html; do
echo "No data"
continue;
fi
+
+ echo "Extracting metadata"
updated_at=$(extract_metadata "updated-at" $post)
tags=$(extract_metadata "tags" $post)
type=$(extract_metadata "type" $post)
+ pinned=$(extract_metadata "pinned" $post)
post_file=$(mktemp_file "post")
content_file=$(mktemp_file "content")
- updated_html_file=$(mktemp_file "updated_html")
- tags_html_file=$(mktemp_file "tags_html")
echo "Copying $post data into $content_file"
cp $post $content_file
@@ -125,55 +226,94 @@ for post in _posts/*.html; do
generate_page $type $content_file $post_file
echo "Setting post date"
- sed -i -E "s/[{]POST_DATE_ISO[}]/${post_date}/" $post_file
- display_date=$(date -d "${post_date}" +"%B %d, %Y")
- sed -i -E "s/[{]POST_DATE_DISP[}]/${display_date}/" $post_file
-
+ set_post_date "$post_date" $post_file
echo "Setting updated at"
- if [ -z "$updated_at" ]; then
- sed -i -E "s/[{]UPDATED[}]//" $post_file
- else
- updated_disp=$(date -d "${updated_at}" +"%B %d, %Y")
- echo "&emsp;Updated at: <time datetime=\"${updated_at}\">${updated_disp}</time>" \
- > updated_html_file
- sed -i -e "/UPDATED/{ r ${updated_html_file} d}" $post_file
- fi
+ set_updated_at "$updated_at" $post_file
echo "Setting tags"
- if [ -z "$tags" ]; then
- sed -i -E "s/[{]TAGS[}]//" $post_file
- else
- echo "Using tags file $tags_html_file"
- echo "&emsp; Tags: [ ${tags} ]" > $tags_html_file
- sed -i -e "/TAGS/ {
- r $tags_html_file
- d}" $post_file
- fi
-
+ set_tags "$tags" $post_file
echo "Copying temp_file to www/"
filename=$(basename $post)
+ url=""
if [ "$type" == "blog" ]; then
year=$(date -d "$post_date" +%Y)
month=$(date -d "$post_date" +%m)
day=$(date -d "$post_date" +%d)
mkdir -p www/blog/$year/$month/$day
cp $post_file www/blog/$year/$month/$day/$filename
+ title="$(extract_title $post_file)"
+ if [ ! -z "$pinned" ]; then
+ push_pin "$post_date" \
+ "/blog/$year/$month/$day/$filename" \
+ "${title}" \
+ $pinned_html
+ fi
+ add_to_rss "$post_date" \
+ "/blog/$year/$month/$day/$filename" \
+ "${title}" \
+ ${content_file} \
+ ${rss_data}
else
- cp $post_file www/$filename
+ path=$(extract_metadata "path" $post)
+ mkdir -p www/$path
+ cp $post_file www/$path/$filename
+ dest=$(echo "/$path/$filename" | sed -E "s,/+,/,g")
+ if [ ! -z "$pinned" ]; then
+ push_pin "$post_date" \
+ "$dest" \
+ "$(extract_title $post_file)" \
+ $pinned_html
+ fi
fi
done
+function set_pinned() {
+ local pinned_html=$1
+ local file=$2
+ if [ -z "$pinned_html" ]; then
+ sed -i -E "s/[{]PINNED[}]//" $file
+ else
+ sort -r -o $pinned_html $pinned_html
+ sed -i -e "/PINNED/ {
+ r $pinned_html
+ d}" $file
+ fi
+}
+
+echo "Generate homepage"
+homepage=$(mktemp_file "homepage")
+generate_page "home" posts/index.html $homepage
+# clear extra tag content
+set_post_date "" $homepage
+set_updated_at "$(date --iso)" $homepage
+set_tags "" $homepage
+set_pinned "${pinned_html}" $homepage
+cp $homepage www/index.html
+
echo "Copying static-html"
cp -r static-html/* www/
echo "Copying res to www"
cp -r res/ www/media/
echo "Building http rss"
-# TODO
-./tidy.sh
+feed=$(mktemp_file "rss_feed")
+year="$(date +%Y)"
+build_date="$(date -R)"
+sed -E -e "{
+ s/[{]YEAR[}]/$year/1;
+ s/[{]BUILDDATE[}]/$build_date/g;
+ /ITEMS/ {
+ r ${rss_data}
+ d}
+}" templates/feed.rss > $feed
+
+cp $feed www/blog/feed.rss
echo "Generating index files"
-dir="www/blog"
-generate_index "$dir"
+generate_index "www/blog"
+generate_index "www/music"
+
+echo "Tidying HTML files"
+./tidy.sh
echo "Building gmi"
# TODO
@@ -183,6 +323,3 @@ echo "Copying res to gemini"
cp -r res/ gemini/media/
echo "Building gemini atom"
# TODO
-
-
-
diff --git a/ideas.org b/ideas.org
new file mode 100644
index 0000000..725cae9
--- /dev/null
+++ b/ideas.org
@@ -0,0 +1,9 @@
+* Ideas for posts
+
+This document is just ideas I may want to write about / maybe some loose drafts
+
+** ideas
+
+*** Redesigning my website
+*** Light-mode again!
+I've been toggling light and dark mode for my theme on emacs and it's been really helpful and frankly better on my eyes!
diff --git a/posts/a-tour-de-chorus.html b/posts/a-tour-de-chorus.html
new file mode 100644
index 0000000..5354b22
--- /dev/null
+++ b/posts/a-tour-de-chorus.html
@@ -0,0 +1,317 @@
+--post-date: 2023-03-18
+--type: blog
+--tags: music
+--pinned: true
+ <article>
+ <h1>A Tour de Chorus</h1>
+ <p>I&#39;ve been talking a lot about chorus on my mastodon, like, A LOT.
+ So I thought it would be fun to explore my chorus pedals a bit and
+ present this information in some shareable way, since no one wants to
+ listen to 18 minutes of audio in a row.</p>
+ <h2>What&#39;s on display</h2>
+ <p>So I have three chorus pedals to show off today:</p>
+ <ul>
+ <li>Boss CE-20</li>
+ <li>Warlus Audio Julia</li>
+ <li>Multivox CB-1 Chorus Box</li>
+ </ul>
+ <h2>The other gear</h2>
+ <p>I will be playing each of these pedals through my THR-100HD (see
+ <a href="/blog/music/2023-01-06/"
+ rel="me noopener"
+ target="_blank">my previous music blog post</a> in which I deep dive a
+ bit into this amp). It&#39;s running on the crunch channel, just at
+ the edge of breakup, with little to no reverb.</p>
+ <p>As for guitar - I am using my Reverend Descent RA Baritone.</p>
+ <h2>The demos</h2>
+ <p>For each of these demos I will be playing the same loop (mostly). I
+ recorded a loop into my Boss RC-3 to remove any playing bias towards the
+ more warbely chorus tones, and to make it easier for me! Each demo is
+ about 48s long (depending on how good my trimming was). I added a bit of
+ EQ in post to cut out some digital hum introduced when pairing my CE-20
+ with my RC-3 so sorry about that...</p>
+ <p>Let&#39;s start with the clean tone:</p>
+ <figure>
+ <audio controls=""><source src=
+ "/blog/music/2023-03-18/audio/clean.mp3">
+ <p>Download <a href="/blog/music/2023-03-18/audio/clean.mp3"
+ rel="me noopner"
+ target="_blank">MP3</a></p></audio>
+ </figure>This loop is something I had been noodling on all week, while on
+ my chorus kick. I feel it&#39;s actually a decent demo because it calls
+ on a lot of classic chorus sounds. Individually picked notes, bright open
+ strings, and then at the end some Nirvana-like dark power chord picking.
+ All classic chorus sounds to me.
+ <h3>CE-20</h3>
+ <p>Next we can go through the CE-20. The CE-20 has 4 modes we&#39;ll be
+ demoing, but there are a total of 6. We are demoing the &quot;Rich&quot;,
+ &quot;Standard&quot;, &quot;Dimensional D&quot;, and &quot;CE-1&quot;
+ settings. I skipped the &quot;Acoustic&quot; and &quot;Bass&quot;
+ settings as they&#39;ve always felt like some slight EQ on the
+ &quot;standard&quot; mode.</p>
+ <h4>Standard</h4>
+ <p>We can start with &quot;Standard&quot; as it&#39;s the most &quot;boss
+ chorus&quot;. Though I personally feel it lacks a bit of the bite the
+ CE-1 and CE-2 offer. But it wouldn&#39;t surprise me if
+ &quot;Standard&quot; was just a CE-2.</p>
+ <figure>
+ <figcaption>
+ CE-20 Standard Mode - Rate 10 o&#39;clock, Depth 2 o&#39;clock
+ </figcaption><audio controls=""><source src=
+ "/blog/music/2023-03-18/audio/ce-20-standard-r10-d2.mp3">
+ <p>Download <a href=
+ "/blog/music/2023-03-18/audio/ce-20-standard-r10-d2.mp3"
+ rel="me noopner"
+ target="_blank">MP3</a></p></audio>
+ </figure>
+ <figure>
+ <figcaption>
+ CE-20 Standard Mode - Rate 2 o&#39;clock, Depth 10 o&#39;clock
+ </figcaption><audio controls=""><source src=
+ "/blog/music/2023-03-18/audio/ce-20-standard-r2-d10.mp3">
+ <p>Download <a href=
+ "/blog/music/2023-03-18/audio/ce-20-standard-r2-d10.mp3"
+ rel="me noopner"
+ target="_blank">MP3</a></p></audio>
+ </figure>
+ <h4>Rich</h4>
+ <p>Let&#39;s compare this with the &quot;Rich&quot; mode. And keep in
+ mind the only settings I will be changing between these CE-20 modes is
+ the rate and depth. There is actually quite a bit of tone controlling you
+ get in the CE-20. But I generally keep those fairly static based on my
+ guitar and amp settings, and for the purposes of these demos are
+ static.</p>
+ <figure>
+ <figcaption>
+ CE-20 Rich Mode - Rate 10 o&#39;clock, Depth 2 o&#39;clock
+ </figcaption><audio controls=""><source src=
+ "/blog/music/2023-03-18/audio/ce-20-rich-r10-d2.mp3">
+ <p>Download <a href=
+ "/blog/music/2023-03-18/audio/ce-20-rich-r10-d2.mp3"
+ rel="me noopner"
+ target="_blank">MP3</a></p></audio>
+ </figure>
+ <h4>Dimensional D</h4>
+ <p>This mode is a recreation of the SDD-320 Dimension D effects unit,
+ later made into the Boss DC-2. This effect is one of my favorite
+ choruses. It&#39;s so unique. On the CE-20 there are 7 modes: 1 - 4, as
+ well as 3 &quot;combo&quot; modes: 1+4, 2+4, and 3+4. These map directly
+ to their SDD-320 counterparts, which also let you stack the modes
+ together. This really shines in stereo, but since the Julia is mono, I
+ felt it&#39;s only fair to use these how I use them on my board.</p>
+ <figure>
+ <figcaption>
+ CE-20 Dimensional D Mode - Mode 3
+ </figcaption><audio controls=""><source src=
+ "/blog/music/2023-03-18/audio/ce-20-dimensional-d-3.mp3">
+ <p>Download <a href=
+ "/blog/music/2023-03-18/audio/ce-20-dimensional-d-3.mp3"
+ rel="me noopner"
+ target="_blank">MP3</a></p></audio>
+ </figure>
+ <figure>
+ <figcaption>
+ CE-20 Dimensional D Mode - Mode 4
+ </figcaption><audio controls=""><source src=
+ "/blog/music/2023-03-18/audio/ce-20-dimensional-d-4.mp3">
+ <p>Download <a href=
+ "/blog/music/2023-03-18/audio/ce-20-dimensional-d-4.mp3"
+ rel="me noopner"
+ target="_blank">MP3</a></p></audio>
+ </figure>
+ <figure>
+ <figcaption>
+ CE-20 Dimensional D Mode - Mode 3+4
+ </figcaption><audio controls=""><source src=
+ "/blog/music/2023-03-18/audio/ce-20-dimensional-d-3-4.mp3">
+ <p>Download <a href=
+ "/blog/music/2023-03-18/audio/ce-20-dimensional-d-3-4.mp3"
+ rel="me noopner"
+ target="_blank">MP3</a></p></audio>
+ </figure>
+ <p>These are always so cool to hear. When you get into the combo modes
+ you start getting more &quot;chorus&quot; and less just
+ &quot;width/movement&quot;. But these are interesting to listen to
+ compared to the clean. There is subtle differences - but they&#39;re
+ there! It&#39;s almost like it is now less stark and smoother. Like the
+ notes are lathered in butter, mmm!</p>
+ <h4>CE -1</h4>
+ <p>Okay, now on to the real show, the CE-1. Not much to say about this
+ one. It&#39;s a CE-1, you have an &quot;intensity&quot; knob, and
+ it&#39;s so rich. The delay rate is much slower than you would expect,
+ almost logarithmic. But when you get past noon it starts to get quite
+ seasick.<br>
+ <small><em>Editors note: 7 o&#39;clock may be a bit higher than 7. None
+ of these pedals have freaking numbers on their knobs, so it&#39;s all a
+ guess. But it&#39;s a bit up from off</em></small></p>
+ <figure>
+ <figcaption>
+ CE-20 CE-1 Mode - Intensity 7 o&#39;clock
+ </figcaption><audio controls=""><source src=
+ "/blog/music/2023-03-18/audio/ce-20-ce-1-7oclock.mp3">
+ <p>Download <a href=
+ "/blog/music/2023-03-18/audio/ce-20-ce-1-7oclock.mp3"
+ rel="me noopner"
+ target="_blank">MP3</a></p></audio>
+ </figure>
+ <figure>
+ <figcaption>
+ CE-20 CE-1 Mode - Intensity 10 o&#39;clock
+ </figcaption><audio controls=""><source src=
+ "/blog/music/2023-03-18/audio/ce-20-ce-1-10oclock.mp3">
+ <p>Download <a href=
+ "/blog/music/2023-03-18/audio/ce-20-ce-1-10oclock.mp3"
+ rel="me noopner"
+ target="_blank">MP3</a></p></audio>
+ </figure>
+ <h3>Multivox CB-1 Chorus Box</h3>
+ <p>The Multivox CB-1 Chorus Box is a CE-1 clone, according to the gear
+ page, it&#39;s literally just the same circuit and components. I got my 5
+ years ago because, well, I love chorus. Currently, a part of my rack unit
+ to be used with my synths, this chorus is just so smooth. But the biggest
+ trouble is dialing in the right level. You&#39;ll notice for the CB-1
+ demos it&#39;s a different demo recording. I had to move my setup and I
+ accidentally wiped the RC-3. But because the CB-1 can be a bit tricky to
+ dial in, it&#39;s a bit quieter than the other demo tracks. But the level
+ control is one of my favorites, as it can add some crunch to the tone on
+ the peaks, adding a lot of flavor. I am running my guitar through the
+ &quot;hi&quot; input, because it gives me a bit more play with the input
+ level.</p>
+ <h4>Chorus</h4>
+ <figure>
+ <figcaption>
+ CB-1 Chorus Mode - Intensity 7 o&#39;clock
+ </figcaption><audio controls=""><source src=
+ "/blog/music/2023-03-18/audio/cb-1-7oclock.mp3">
+ <p>Download <a href="/blog/music/2023-03-18/audio/cb-1-7oclock.mp3"
+ rel="me noopner"
+ target="_blank">MP3</a></p></audio>
+ </figure>
+ <figure>
+ <figcaption>
+ CB-1 Chorus Mode - Intensity 10 o&#39;clock
+ </figcaption><audio controls=""><source src=
+ "/blog/music/2023-03-18/audio/cb-1-10oclock.mp3">
+ <p>Download <a href="/blog/music/2023-03-18/audio/cb-1-10oclock.mp3"
+ rel="me noopner"
+ target="_blank">MP3</a></p></audio>
+ </figure>
+ <figure>
+ <figcaption>
+ CB-1 Chorus Mode - Intensity 2 o&#39;clock
+ </figcaption><audio controls=""><source src=
+ "/blog/music/2023-03-18/audio/cb-1-2oclock.mp3">
+ <p>Download <a href="/blog/music/2023-03-18/audio/cb-1-2oclock.mp3"
+ rel="me noopner"
+ target="_blank">MP3</a></p></audio>
+ </figure>
+ <h4>Vibrato</h4>
+ <p>While this is mono, so it&#39;s acting like a straight vibrato. When
+ playing in stereo this creates it&#39;s own chorus, the stereo outs are
+ &quot;dry&quot; and &quot;wet&quot;. This differs from the CE-1 chorus
+ too, so it&#39;s like 2 chorus pedals in one. These demos are in
+ mono.</p>
+ <figure>
+ <figcaption>
+ CB-1 Vibrato Mode - Rate 10 o&#39;clock, Depth 2 o&#39;clock
+ </figcaption><audio controls=""><source src=
+ "/blog/music/2023-03-18/audio/cb-1-vibrato-d2-r10.mp3">
+ <p>Download <a href=
+ "/blog/music/2023-03-18/audio/cb-1-vibrato-d2-r10.mp3"
+ rel="me noopner"
+ target="_blank">MP3</a></p></audio>
+ </figure>
+ <figure>
+ <figcaption>
+ CB-1 Vibrato Mode - Rate 2 o&#39;clock, Depth 10 o&#39;clock
+ </figcaption><audio controls=""><source src=
+ "/blog/music/2023-03-18/audio/cb-1-vibrato-d10-r2.mp3">
+ <p>Download <a href=
+ "/blog/music/2023-03-18/audio/cb-1-vibrato-d10-r2.mp3"
+ rel="me noopner"
+ target="_blank">MP3</a></p></audio>
+ </figure>
+ <h4>CB-1 Off with Level Boost</h4>
+ <p>The CB-1 when over driven (just by the guitar itself) gets really warm
+ crunch to signal, and it&#39;s a lot of fun. I usually run my Model D
+ through this and I love it.</p>
+ <figure>
+ <figcaption>
+ CB-1 Off - Level to a point where when I dig in it clips heavily
+ </figcaption><audio controls=""><source src=
+ "/blog/music/2023-03-18/audio/cb-1-off-with-level.mp3">
+ <p>Download <a href=
+ "/blog/music/2023-03-18/audio/cb-1-off-with-level.mp3"
+ rel="me noopner"
+ target="_blank">MP3</a></p></audio>
+ </figure>
+ <h3>Walrus Audio Julia</h3>
+ <p>I picked up the Julia because it&#39;s such a versatile chorus: giving
+ you control over the rate, depth, lag, waveform, and mix. This lets you
+ craft basically ANY chorus sound you want. Exploring sounds, I&#39;ve
+ noticed the major limiter being the rate. The Julia is just SO fast. Even
+ at min rate, it&#39;s still faster than like 1/3 of the Boss rates. But
+ the sounds are still amazing!</p>
+ <figure>
+ <figcaption>
+ Julia - Triangle Wave, Rate 7 o&#39;clock, Depth 2 o&#39;clock, Lag 3
+ o&#39;clock, Mix 12 o&#39;clock (chorus)
+ </figcaption><audio controls=""><source src=
+ "/blog/music/2023-03-18/audio/julia-chorus-1.mp3">
+ <p>Download <a href="/blog/music/2023-03-18/audio/julia-chorus-1.mp3"
+ rel="me noopner"
+ target="_blank">MP3</a></p></audio>
+ </figure>
+ <figure>
+ <figcaption>
+ Julia - Sine Wave, Rate 10 o&#39;clock, Depth 2 o&#39;clock, Lag 9
+ o&#39;clock, Mix 12 o&#39;clock (chorus)
+ </figcaption><audio controls=""><source src=
+ "/blog/music/2023-03-18/audio/julia-chorus-2.mp3">
+ <p>Download <a href="/blog/music/2023-03-18/audio/julia-chorus-2.mp3"
+ rel="me noopner"
+ target="_blank">MP3</a></p></audio>
+ </figure>
+ <figure>
+ <figcaption>
+ Julia - Sine Wave, Rate 9 o&#39;clock, Depth 3 o&#39;clock, Lag 9
+ o&#39;clock, Mix 12 o&#39;clock (chorus)
+ </figcaption><audio controls=""><source src=
+ "/blog/music/2023-03-18/audio/julia-chorus-3.mp3">
+ <p>Download <a href="/blog/music/2023-03-18/audio/julia-chorus-3.mp3"
+ rel="me noopner"
+ target="_blank">MP3</a></p></audio>
+ </figure>
+ <figure>
+ <figcaption>
+ Julia - Triangle Wave, Rate 8 o&#39;clock, Depth 12 o&#39;clock, Lag
+ 12 o&#39;clock, Mix 5 o&#39;clock (vibrato, max)
+ </figcaption><audio controls=""><source src=
+ "/blog/music/2023-03-18/audio/julia-vibrato.mp3">
+ <p>Download <a href="/blog/music/2023-03-18/audio/julia-vibrato.mp3"
+ rel="me noopner"
+ target="_blank">MP3</a></p></audio>
+ </figure>
+ <h2>Thoughts</h2>
+ <p>Realistically? I love every single one of these choruses. It&#39;s
+ such an amazing effect, and I was messing around with the dirty channel
+ too, which still sounded great! The CB-1 was by no means a steal, but
+ it&#39;s my favorite chorus tone. But it comes with some quirks being a
+ late 70, early 80s device. The CE-20 is amazing but very much a &quot;mid
+ 00s digital pedal&quot; giving some of that digital-ness to it,
+ especially when mixing with other digital pedals. I&#39;m sure you heard
+ the high pitched wine in the background. I EQ&#39;d it out, but it&#39;s
+ there, and it bothers me. I think getting a CE-2w would give me a lot of
+ the options I want from this, without those digital artifacts. The CE-20
+ would be perfect if it had a vibrato mode, given the CE-1 has one, and
+ really make it the perfect all-in-one. But given I&#39;ve had this pedal
+ for at least 12 years (probably closer to 13. I can dig out the box and
+ see if I kept the receipt). I got in in college as my first ever chorus.
+ I was enamoured with it. I&#39;d be on my board today if it wasn&#39;t so
+ big. The Julia is the perfect multi-tool chorus, and I&#39;ve been really
+ happy with it. But it lacks that really SLOW rate that the Boss pedals
+ have, making it a BIT harder to really dial in the CE-1 tones.</p>
+ <p>I joked on mastodon that I was did this to convince myself I don&#39;t
+ NEED a CE-2w or DC-2w...and now I want them even more!</p>
+ </article>
+
diff --git a/posts/bread.html b/posts/bread.html
new file mode 100644
index 0000000..ebbdbae
--- /dev/null
+++ b/posts/bread.html
@@ -0,0 +1,120 @@
+
+--post-date: 2020-02-17
+--type: blog
+ <article>
+ <h1>Bread</h1>
+ <p>I decided to make a singular dedicated page to my recent bread bakes.
+ I am trying to at least keep a log of each bake, what went wrong/right in
+ hopes of nailing a recipe that works best for me.</p>
+ <h2 id="2020-02-17">February 17, 2020</h2>
+ <p>First post! I have done four bakes in 2020 that are worth mentioning.
+ Three that ended up rather successful and one lesson learned. Because
+ this is my first post its containing three very similar bakes that were
+ effectively the same recipe</p>
+ <h3>Boules</h3>
+ <p>I have made two very good boules in 2020. I first made a pate
+ fermentee using the following ratio using 50% of my total flour weight:
+ (500g, so 250g).</p>
+ <table class="bake-info">
+ <caption>
+ Pate Fermentee
+ </caption>
+ <thead>
+ <tr>
+ <th>Item</th>
+ <th>%</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>Flour (Bread)</td>
+ <td>100%</td>
+ </tr>
+ <tr>
+ <td>Water (Room temp)</td>
+ <td>70%</td>
+ </tr>
+ <tr>
+ <td>Yeast (Instant)</td>
+ <td>0.55%</td>
+ </tr>
+ <tr>
+ <td>Salt</td>
+ <td>10%</td>
+ </tr>
+ </tbody>
+ </table>To make the pate, I mixed all the dry ingredients together, then
+ added the room temperature water. I let that loose mixture rest for 15
+ minutes. Once it was rested, I wet my hands and bench (lightly) and
+ kneaded for roughly 8 minutes. After kneading I tightened the dough into
+ a boule and let it sit in a plastic wrap covered greased bowl for an
+ hour. After an hour I placed it into the friged, as is.
+ <p>The next day, basically in the AM when I had time to bake I took the
+ dough out of the fridge, cut it into smaller bits (four), and let it come
+ to room temperature (ish, about an hour). I prepped the same ratio above
+ except with warmer water (~108°F). When I added the water to the dry
+ ingredients I added the pate along with it. I used the curved edge of my
+ scrapper to cut into the pate and incorporate it fully. Once I felt it
+ was all one loose mess I let it sit for 15 minutes. After the 15 minutes
+ I wet my hands, and bench, and began to knead the dough for 8 minutes.
+ After kneading I formed the dough into a boule and placed it into a
+ greased bowl covered in plastic wrap. I let that sit on my bench for 90
+ minutes or so. After the first proof I dampened my bench and took the
+ risen dough out of the bowl and lightly pressed it into a thick circle. I
+ then took the, what would be, corners of the mass and folded them into
+ the center, rotating after each fold. This process creates a boule shape
+ while creating tension. I would continue to do this about 8-10 times
+ really until it felt like I couldn&#39;t grab anymore/it wouldn&#39;t
+ stick. Then I flipped the dough over and tightened the boule in a
+ scooping motion as I rotated it. Then placed it into my floured banneton.
+ I let it rise again for about 45 minutes. Around the 30 minute mark I
+ would preheat my oven to 500°F. Once the oven was preheated and its been
+ at least 45 minutes. I flipped out the dough onto the peel (dusted with
+ corn flour) and scored it. I then misted the top with a spray bottle of
+ water and slid it onto my baking stone. While preheating the oven I also
+ set a kettle to boil some water which I poured into the preheating baking
+ sheet on the bottom rack. I set the timer for 10 minutes and every two
+ minutes or so I would add more boiling water. After 6 minutes I rotated
+ the dough using the peel (careful not to damage it). And misted the
+ facing side with the spray bottle (I found the back is lighter so this
+ helps make the entire steaming more even). After the turn and mist I add
+ twenty minutes to my timer and drop the temperature to 450°F.</p>
+ <p>This produces a nice, well risen boule with a golden brown crust.</p>
+ <p>I skipped the pate in my most recent bake and just did 100% (500g)
+ starting from &quot;day 2&quot;. I also subtituted 100g with AP
+ flour.</p>
+ <h3>Baguettes</h3>
+ <p>I actually did the boule recipe first for my baguettes. I did aiming
+ for 1000g flour so my pate was with 500g and a 50/50 AP/Bread mix. I
+ screwed up the ratio for yeast and added almost double. The recipe is
+ essentially the same with the final steps being the difference.</p>
+ <p>After the first proof I sliced the dough into three chunks. Then I
+ formed those into boules and let them sit for 5 minutes. After resting I
+ then rolled them into batards and let them sit for 10 minutes. After 10
+ minutes I then rolled them into baguettes and placed them on the baguette
+ sheet. And then baked them. After letting them rise for 45 or so
+ minutes.</p>
+ <h3>Accidents</h3>
+ <p>Baguette rolling is hard. And I need to let the dough rest longer
+ between each shape.</p>
+ <p>1000g for three ~15 inch baguettes is too much. I would do 750g next
+ time.</p>
+ <p>Proofing on the sheet is not recommended in the future as the rose
+ really well (probably all that extra yeast!) and ended up sticking
+ together.</p>
+ <p>I broke my oven light with my spray bottle. And I ruined my cast irons
+ seasoning usnig that for the boiling water.</p>
+ <h3>What to do next time</h3>
+ <p>Next french style boule, I want to do a pate again. As I&#39;ve only
+ done it for one boule loaf. And I want to try making two loafs from
+ it.</p>
+ <h2>Resources</h2>
+ <p><a target="_blank"
+ href="https://bakewithjack.co.uk">Bake With Jack&#39;s Youtube
+ Channel</a> really helped me shape up my shaping up. And the core of
+ the pate+french bread recipe is based on that from <a target="_blank"
+ href=
+ "https://www.goodreads.com/book/show/39910.The_Bread_Baker_s_Apprentice">The
+ Bread Baker&#39;s Apprentice</a></p>
+ </article>
+
diff --git a/_posts/choosing-to-write-in-html.html b/posts/choosing-to-write-in-html.html
index 28f6dea..f9a6efa 100644
--- a/_posts/choosing-to-write-in-html.html
+++ b/posts/choosing-to-write-in-html.html
@@ -1,6 +1,7 @@
--post-date: 2024-01-01
--tags: tech
--type: blog
+--pinned: true
<article>
<h1>Choosing to write in HTML</h1>
<p>
diff --git a/posts/css-themes-exist-now.html b/posts/css-themes-exist-now.html
new file mode 100644
index 0000000..25eee0d
--- /dev/null
+++ b/posts/css-themes-exist-now.html
@@ -0,0 +1,104 @@
+--post-date: 2022-12-05
+--type: blog
+ <article>
+ <h1>CSS Themes Exist Now!?</h1>
+ <p>Yeah news to me too! Seems like according to <a rel=
+ "external noopener noreferrer"
+ target="_blank"
+ href=
+ "https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme#browser_compatibility">
+ the MDN</a> it’s been supported since 2019 for most browsers and
+ supported by all by now.</p>
+ <p>This is so wild!</p>
+ <h2>Why is this cool?</h2>
+ <p>Well you may have noticed this is in dark mode now (if you set your
+ preferences to dark in your OS/Browser). But this is cool because it
+ means we’re no longer restricted to using Javascript and custom
+ preferences for websites.</p>
+ <p>I had assumed this existed because sites like GitHub were defaulting
+ to darkmode despite me never setting anything in like my profile
+ settings. But I just assumed based off of my legacy knowledge this was
+ some custom render trick using javascript.</p>
+ <h3>Still no JS!</h3>
+ <p>I keep this blog JS free! While not all pages under the senders.io
+ umbrella are javascript free - everything in www.senders.io (this blog)
+ will always be.</p>
+ <p>I try to keep that, not only for my sake, but for your sake too - a
+ javascript free blog means the priority is reading.</p>
+ <h2>Examples</h2>
+ <p>So I achieve darkmode in this blog by doing the following:</p>
+ <pre><code>/* default / light */
+:root {
+ --background: white;
+ --font: black;
+ --quote: #eee;
+ --link: #0303ee;
+ --linkv: #551a8b;
+ --linkf: #f02727;
+ --articleborder: #060606;
+ --tableborder: #aaa;
+ --tablehead: #ebcfff;
+ --tablez: #eee;
+}
+@media (prefers-color-scheme: dark) {
+ :root {
+ --background: #1e1e1e;
+ --font: #eee;
+ --quote: #444;
+ --link: #00d3d3;
+ --linkv: #cd78f4;
+ --linkf: #f02727;
+ --articleborder: #23ed9b;
+ --tableborder: #aaa;
+ --tablehead: #6f5a7e;
+ --tablez: #313131;
+ }
+}
+</code></pre>
+ <p>Essentially, I leverage <a rel="external noopener noreferrer"
+ target="_blank"
+ href=
+ "https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_custom_properties">
+ CSS Variables</a> to define the specific areas I set theme specific
+ colors (my nav bar is static regardless of dark/light mode for
+ example).</p>
+ <p>Then if the media preference is dark - I overwrite the variables with
+ my dark mode values!</p>
+ <p>Whats tricky is originally most of these values didn’t actually HAVE
+ values set - I relied on the system default for things like links and the
+ page colors in an effort to use minimum CSS as well.</p>
+ <p>I still feel like I am honoring that since I don’t have to duplicate
+ any actual CSS this way, I just have a lookup table of color values.</p>
+ <p>That being said my CSS file is still only about 3kB which is not so
+ bad. And I’ve actually covered most themed properties already - links,
+ tables, quotes.</p>
+ <h3>Toggling Themes</h3>
+ <p>Something else I found out during this experiment is you can actually
+ toggle the themes directly in your developer tooling. By opening your
+ devtools and going to Inspector (in firefox at least) there are two
+ buttons in the styles section “toggle light color scheme” and “toggle
+ dark color scheme” using a sun and moon icon.</p>
+ <p>This made testing VERY easy and actually is what I noticed to prompt
+ me into looking up if this was a standard CSS thing or not. So thanks
+ Mozilla!</p>
+ <h2>Conclusion</h2>
+ <p>Yeah if you’ve never realized this check out the MDN guides on both
+ variables (I didn’t realize these got put in the standard either!) and
+ themes!</p>
+ <ul>
+ <li>CSS Variables: <a rel="external noopener noreferrer"
+ target="_blank"
+ href=
+ "https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_custom_properties">
+ https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_custom_properties</a>
+ </li>
+ <li>CSS Media prefers-color-scheme: <a rel=
+ "external noopener noreferrer"
+ target="_blank"
+ href=
+ "https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme">
+ https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme</a>
+ </li>
+ </ul>
+ </article>
+
diff --git a/posts/first-a-new-years-resolution.html b/posts/first-a-new-years-resolution.html
new file mode 100644
index 0000000..0ed542b
--- /dev/null
+++ b/posts/first-a-new-years-resolution.html
@@ -0,0 +1,50 @@
+
+--post-date: 2019-01-21
+--type: blog
+ <article>
+ <h1>First! A New Years Resolution</h1>
+ <p>I like to write small hacky things from time to time when I have a
+ weekend to myself, or a day, or an hour... But I never had a place to put
+ them or the push to complete them beyond their initial hack. So I decided
+ I should write a blog about it.</p>
+ <p>Also for work I had to write some prose about myself, something beyond
+ a technical document or RFC and I realized I am shit at writing my
+ thoughts outside of a very direct specific technical way.</p>
+ <p>I am not sure if it is the age of the internet I grew up in where most
+ of my written communication was informal or for school. But my personal
+ writing skills are trash and this is my attempt to kill all the birds
+ with one stone</p>
+ <h2>What can be expected here</h2>
+ <p>My intentions for this site beyond just a landing page with my resume,
+ I hope to upload some code-snippets from things I found interesting,
+ ideally some recordings, drawings, and model-painting.</p>
+ <h2>How often do I intend to update this blog</h2>
+ <p>Ideally, whenever I have something that I feel is worth sharing. But
+ for the sake of my resolution I want to do at least one post a month, and
+ if I am keeping my other resolutions I should have content to put
+ here</p>
+ <h2>Designing my site</h2>
+ <p>Designing this blog actually took way more time than it should have.
+ It began when I wanted to tackle a <i>javascriptless</i> website. And I
+ found that a bit difficult if I wanted to have code with syntax
+ highlighting. So I wrote a python script to generate <code class=
+ 'inline'>&lt;pre&gt;</code> tag wrapping Java code with partial syntax
+ highlighting.Possibly mistaking <code class='inline'>highlight.js</code>
+ usage documentation. But I would like to prevent having javascript on my
+ main website keeping it as simplistic as possible.</p>
+ <p>I test the site using both <code class='inline'>tidy</code> and
+ <code class='inline'>nginx</code> via <code class='inline'>docker</code>.
+ Using tidy I can validate the html (making sure I didn&#39;t miss any
+ tags etc) and tidy up any odd spacing. And then visually test it running
+ nginx. Having it served up similarly to s3 all the paths will work, and
+ is insanely easy to setup! If you&#39;re reading this and have anything
+ beyond a simple html file I recommend running docker + nginx over any
+ javascript server.</p>
+ <p>Then I deploy the site through <code class='inline'>s3-cli</code>
+ Which is simple and to the point.</p>
+ <h2>In Closing</h2>
+ <p>I wanted to include more but I ran out of time today to write more, I
+ will probably update this article with more information (and an updated
+ timestamp). Or just make another post of my code highlighting task.</p>
+ </article>
+
diff --git a/posts/how-i-generate-my-rss-feed.html b/posts/how-i-generate-my-rss-feed.html
new file mode 100644
index 0000000..752bb0c
--- /dev/null
+++ b/posts/how-i-generate-my-rss-feed.html
@@ -0,0 +1,146 @@
+
+--post-date: 2023-01-06
+--type: blog
+ <article>
+ <h1>How I Generate My RSS Feed</h1>
+ <p>I only just now started supplying an RSS feed to you fine people! You
+ can subscribe to it at <a href=
+ "/blog/feed.rss">www.senders.io/blog/feed.rss</a>!</p>
+ <p>I decided rather than manually generating the file contents I’d hook
+ into my pre-existing publish scripts to be able to generate the RSS
+ file.</p>
+ <h2>Publishing blog posts - shell scripts ftw</h2>
+ <p>In <a href="/blog/2022-11-06/">My Markdown -&gt; HTML Setup</a> I
+ touch on how I publish my markdown files into HTML for this blog. But
+ what I don’t <em>really</em> touch on is the shell scripts that tie the
+ whole process together.</p>
+ <p>What I have is two, now three, scripts that feed the whole
+ process:</p>
+ <ol>
+ <li><code>publish-blog.sh</code> - the main script</li>
+ <li><code>compile-md.sh</code> - generates the HTML output</li>
+ <li><code>update-feed.sh</code> - generates/appends the RSS feed</li>
+ </ol>
+ <p>The <code>update-feed.sh</code> script is the new one I just
+ added.</p>
+ <p><code>publish-blog.sh</code> is the primary interface, I supply the
+ date of the post and the path to the md file and that calls compile and
+ update to automate the entire process.</p>
+ <p>Without going into TOO much detail you can view the latest versions of
+ the scripts at <a rel="external noopener noreferrer"
+ target="_blank"
+ href=
+ "https://git.senders.io/senders/senders-io/tree/">git.senders.io/senders/senders-io/tree/</a>.</p>
+ <p>But the gist of the scripts is I parse out the necessary details,
+ find/replace some tokens in template files I have setup for headers and
+ footers, and concat the outputs into the final output HTML files, and now
+ RSS feed.</p>
+ <h3>update-feed.sh</h3>
+ <p>Source File: <a rel="external noopener noreferrer"
+ target="_blank"
+ href=
+ "https://git.senders.io/senders/senders-io/tree/update-feed.sh">git.senders.io/senders/senders-io/tree/update-feed.sh</a></p>
+ <p>This script is pretty interesting. I didn’t want to deal with any XML
+ parsers and libraries to just maintain a proper XML rss file and push
+ items into the tree. Rather, I just follow a similar setup to my markdown
+ generation. I leverage some temporary files to hold the contents, a
+ static temp file for the previously generated content, and at the end
+ swap the temp file with the real file.</p>
+ <p>I take in an input of the publish date (this is the date from the
+ publish script), the title, and the HTML file path. These are all already
+ variables in the publish script, but also something I can manually supply
+ if I need to publish an older article, or something I wrote directly in
+ HTML.</p>
+ <p>The core of the script is found here:</p>
+ <pre><code>PUBDATE=$(date -d &quot;$1&quot; -R)
+TITLE=$2
+FILE_PATH=$3
+PERMALINK=$(echo &quot;${FILE_PATH}&quot; | sed -e &quot;s,${TKN_URL_STRIP},${URL_PREFIX},g&quot;)
+LINK=$(echo &quot;${PERMALINK}&quot; | sed -e &quot;s,${TKN_INDEX_STRIP},,g&quot;)
+
+# Generate TMP FEED File Header
+
+cat -s $FILE_RSS_HEADER &gt; $FILE_TMP_FEED
+sed -i -E &quot;s/${TKN_BUILDDATE}/${BUILDDATE}/g&quot; $FILE_TMP_FEED
+sed -i -E &quot;s/${TKN_PUBDATE}/${PUBDATE}/g&quot; $FILE_TMP_FEED
+
+# Generate TMP Item File
+
+cat -s $FILE_RSS_ITEM_HEADER &gt; $FILE_TMP_ITEM
+sed -i -E &quot;s~${TKN_TITLE}~${TITLE}~g&quot; $FILE_TMP_ITEM
+sed -i -E &quot;s/${TKN_PUBDATE}/${PUBDATE}/g&quot; $FILE_TMP_ITEM
+sed -i -E &quot;s,${TKN_PERMALINK},${PERMALINK},g&quot; $FILE_TMP_ITEM
+sed -i -E &quot;s,${TKN_LINK},${LINK},g&quot; $FILE_TMP_ITEM
+sed -n &quot;/&lt;article&gt;/,/&lt;\/article&gt;/p&quot; $FILE_PATH &gt;&gt; $FILE_TMP_ITEM
+cat -s $FILE_RSS_ITEM_FOOTER &gt;&gt; $FILE_TMP_ITEM
+
+# Prepend Item to items list and overwrite items file w/ prepended item
+## In order to &quot;prepend&quot; the item (so it&#39;s on top of the others)
+## We need to concat the tmp item file with the existing list, then
+## we can push the contents over the existing file
+## We use cat -s to squeeze the blank lines
+cat -s $FILE_ITEM_OUTPUT &gt;&gt; $FILE_TMP_ITEM
+cat -s $FILE_TMP_ITEM &gt; $FILE_ITEM_OUTPUT
+
+# Push items to TMP FEED
+cat -s $FILE_ITEM_OUTPUT &gt;&gt; $FILE_TMP_FEED
+
+# Push RSS footer to TMP FEED
+cat -s $FILE_RSS_FOOTER &gt;&gt; $FILE_TMP_FEED
+echo $FILE_TMP_FEED
+
+# Publish feed
+cat -s $FILE_TMP_FEED &gt; $FILE_RSS_OUTPUT
+
+echo &quot;Finished generating feed&quot;
+</code></pre>
+ <p>Some key takeaways are:</p>
+ <ol>
+ <li>sed lets you do regex with delimiters that AREN’T <code>/</code> so
+ you can substitute something that shouldn’t actually ever show up in
+ your regex. For me that is <code>~</code>.</li>
+ <li>I always forget you can use sed to extract between tokens - which
+ is how I get the CDATA for the RSS: <code>sed -n
+ &quot;/&lt;article&gt;/,/&lt;\/article&gt;/p&quot;</code></li>
+ <li><code>mktemp</code> is really REALLY useful - and I feel is under
+ utilized in shellscripting</li>
+ </ol>
+ <p>The obvious cracks are:</p>
+ <ol>
+ <li>I rely SO much on <code>sed</code> that it’s almost certainly going
+ to break</li>
+ <li>I don’t have much other flag control to do partial generation - so
+ if I need to do something either starting partway through or not finish
+ the full process, I don’t have that.</li>
+ <li>Sometimes things can break silently and it will go through, there
+ is no verification or like manual checking along the way before
+ publishing the feed.rss</li>
+ </ol>
+ <p>The final two can easily be managed by writing the feed to a location
+ that isn’t a temp file and I can manually do the <code>cat -s
+ $FILE_TMP_FEED &gt; www/blog/feed.rss</code> myself after I check it
+ over.</p>
+ <p>But for now I’ll see if I ever have to redo it. I don’t think anyone
+ will actually sub to this so I don’t really need to care that much if I
+ amend the feed.</p>
+ <h2>Where to put the feed URL</h2>
+ <p>I never intended to provide an RSS feed. I doubt anyone but me reads
+ this, and from my previous experience with gemini feed generation was a
+ bit of a headache.</p>
+ <p>A quick aside: I really only decided thanks to Mastodon. I was
+ thinking during the Twitter meltdown “what if twitter but RSS” (I know
+ super unique idea). But basically like a true “microblog”. And some OSS
+ tools to publish your blog. This got me reading the RSS spec and looking
+ into it more - which then lead me down the using the RSS readers more (in
+ conjunction with gemini, and Cortex podcast talking about using RSS
+ more).</p>
+ <p>But I’ve decided to just put the RSS feed in the blog index, on my
+ homepage, and that’s it. I don’t need it permanently in the header.</p>
+ <h2>Conclusion</h2>
+ <p>I didn’t have much to share here, it doesn’t make too much sense to
+ write a big post on what can be explained better by just checking out the
+ shell scripts in my git source. The code speaks better than I ever
+ could.</p>
+ <p>I really, really like shell scripting.</p>
+ </article>
+
diff --git a/posts/index.html b/posts/index.html
new file mode 100644
index 0000000..90ed8a3
--- /dev/null
+++ b/posts/index.html
@@ -0,0 +1,15 @@
+<article>
+ <h1>Welcome!</h1>
+ <p>Hello, and welcome to my website! I'm Steph a dorky trans girl who loves <del>rambling</del>, err, posting about music, tech, and all things sed!</p>
+ <p>Really, this is just my personal website. Sometimes I throw things up here when I am in the mood!</p>
+ <h2>Pinned Posts</h2>
+ <ul id="pinned">
+ {PINNED}
+ </ul>
+ <hr/>
+ <p>
+ You can also find me on gemini:
+ <a href="gemini://senders.io" target="_blank" rel="external noreferrer noopener">gemini://senders.io</a>
+ (<a href="https://geminiprotocol.net/" rel="external noreferrer noopener" target="_blank">What is gemini?</a>)
+ </p>
+</article>
diff --git a/posts/lisps-assembly-c-and-conlangs.html b/posts/lisps-assembly-c-and-conlangs.html
new file mode 100644
index 0000000..8f2967c
--- /dev/null
+++ b/posts/lisps-assembly-c-and-conlangs.html
@@ -0,0 +1,102 @@
+--post-date: 2019-12-09
+--type: blog
+ <article>
+ <h1>Lisps, Assembly, C, and Conlangs</h1>
+ <p>I had originally hoped to do more blogging as a way of practicing my
+ writing and an incentive to do more hobby programming. The intent was
+ never to make this site solely programming, I had actually a few scrapped
+ posts about baking and guitar that just didn&#39;t get anywhere... but
+ that being said I did have a fair amount of hobbying in 2019 that I can
+ share some unfiltered, semi-structured thoughts on.</p>
+ <h2>Racket, 80x86, and even more C</h2>
+ <h3>Racket</h3>
+ <p><a target="_blank"
+ href="https://racket-lang.org">Racket</a> is a general-purpose
+ lisp-like language. I had began messing around in it with the
+ intention of creating a similar language to <a target="_blank"
+ href="https://docs.racket-lang.org/scribble/">Scribble</a> a document
+ authoring language written in Racket. I made <a target="_blank"
+ href="https://xkcd.com/1205/">the classic mistake</a> of trying to
+ create a productivity tool rather than just do the task I had
+ originally intended to do. It was interesting messing around in a
+ lisp/functional language which I haven&#39;t really used in a long
+ time. I wish I had more insightful things to say about it or project
+ to share. Either way its very worth the look.</p>
+ <h3>6502 -&gt; 80x86 -&gt; Commander X16</h3>
+ <p>I wanted to play around with writing some assembly language programs.
+ I looked back at the NES tutorials and tried writing some basic
+ hello-world programs for it, but never really came out with anything
+ worth while. I booted up dosbox and tried experimenting in some DOS
+ programming to get a kick of nostalgia. On my way over to a friends
+ apartment I stumbled across an 80x86 reference book which I took home and
+ dug into. I made some decent progress in, relative to my 6502 learning.
+ But this was in the summer, and I was preparing for what would turn into
+ a pretty time consuming move. After my move, my puppy, and some youtube,
+ <a target="_blank"
+ href="http://www.the8bitguy.com">The 8-Bit Guy</a> made a video about
+ his 8 Bit computer project <a target="_blank"
+ href="http://www.commanderx16.com/X16/Ready.html">Commander X16</a>
+ which I started looking into. Like all the other assembly language
+ projects they never amounted to more than a few print statements or
+ colors on the screen. But X16 is something I am going to keep an eye
+ on in 2020.<br>
+ <a target="_blank"
+ href="https://eater.net/">Ben Eater</a> also started a <a target=
+ "_blank"
+ href="https://eater.net/6502">6502 video series</a> which was amazing,
+ and thankfully my learnings from earlier in the year made the content
+ very understandable. In summary, I spent a lot of 2019 reading and
+ watching a lot of content about assembly language programming, but
+ never really did anything with it.</p>
+ <h3>Never ending C</h3>
+ <p>Without much to really say on the topic, I kept writing small programs
+ in C throughout the year. I spent a lot of time debugging and
+ troubleshooting a prefix terminal calculator with the intention of making
+ it a full utility to use on the command line / from within scripts. You
+ could do simple math without opening up x-calc, which I find myself doing
+ to check some quick math. Example code: <code class="inline">calc &quot;+
+ 1 1&quot;</code>. To me this was far cleaner than writing: <code class=
+ 'inline'>echo $((1+1))</code>. The big ideas I had for it was adding a
+ REPL and making it a command line calculator tool where you could get the
+ features of a standard calculator with store and recall functions. This
+ project involved making two stacks: the operations and the numbers.
+ Implementing two stacks from scratch was interesting and I may upload the
+ source and link it in an update. Overall it was full of breaks, bugs,
+ wrong turns, and bizarre memory issues. So needless to say it was a fun 3
+ days of programming.</p>
+ <h2>Non Programming Writing</h2>
+ <p>The project that soaked up a majority of my writing time, which sadly
+ should&#39;ve been documented here, was my conlang / world-building
+ project &quot;Tyur&quot;. This project spawned out of sci-fi story ideas
+ that, of course, never went anywhere (due to my poor dialog writing, and
+ writing in general) and my interest in language history. I have been
+ reading <a target="_blank"
+ href=
+ "https://www.goodreads.com/book/show/1831667.The_Horse_the_Wheel_and_Language">
+ The Horse the Wheel and Language</a> by David W. Anthony, which goes into
+ the history around Proto-Indo-European. It can be a bit dense so I had
+ been reading it on and off, and during the off times also started
+ <a target="_blank"
+ href=
+ "https://www.goodreads.com/book/show/18635317-the-origins-of-language">The
+ Origins of Language: A Slim Guide</a> by James R. Hurford, which tries
+ to provide insights on the evolutionary concept of language. Both of
+ these provided some fodder for the idea of creating my own <a target=
+ "_blank"
+ href="https://en.wikipedia.org/wiki/Constructed_language">conlang</a>.
+ My conlang is &quot;Tyur&quot; the language spoken by the Tyur people.
+ This process has really been a mix of world-building around the Tyur
+ and some fun fantasy mini story ideas similar to The Lord of the Rings
+ and old Warhammer Fantasy worlds. This however began my adventure down
+ the rabbit hole of trying to figure out how to create a font so I can
+ write more here about it. The documentation on this conlang is a mix
+ of loose-leaf folded in my bag that I scribble on when I get an idea.
+ So figuring out a proper way of building the alphabet and some root
+ words to start a dictionary are my current goals for the remainder of
+ the year/ start of 2020.</p>
+ <h2>Closing</h2>
+ <p>In closing, I think despite not writing much here, I messed around
+ with some interesting languages this year, and hope I can hobby more in
+ 2020.</p>
+ </article>
+
diff --git a/posts/manjaro-experiment.html b/posts/manjaro-experiment.html
new file mode 100644
index 0000000..0c24766
--- /dev/null
+++ b/posts/manjaro-experiment.html
@@ -0,0 +1,144 @@
+--post-date: 2020-12-17
+--updated-at: 2020-12-19
+--type: blog
+ <article>
+ <h1>Manjaro Experiment</h1>
+ <p>After years on Debian, running i3, I decided to try out a more
+ traditional Linux setup, and take a stab at gaming on Linux. I chose
+ Manjaro for a few reasons:</p>
+ <ul>
+ <li>It&#39;s not Debian based (it&#39;s arch btw /s)</li>
+ <li>It&#39;s still on Systemd so I won&#39;t lose that familiarity</li>
+ <li>For gaming it comes with pretty up to date drivers and setup for
+ running Steam games</li>
+ <li>It has a KDE installation which is what I wanted to run</li>
+ </ul>
+ <h2>Why &quot;not Debian&quot;</h2>
+ <p>Debian is home for me. I have used it for years on both work machines,
+ servers, personal desktop. But it comes with its own quirks. Starters - I
+ am running base Debian, not a Debian based system, which generally means
+ some packages are out of date. To get around this I run Sid/Unstable.
+ This hasn&#39;t been a particular issue, but sometimes there are version
+ conflicts and other just nuisances and no real <i>easy</i> way to get
+ every package in the proper version configuration. This was a particular
+ pain-point with getting Steam (nonfree too which adds another layer of
+ configurations) Wine and a few other packages all set up. Plus
+ 32-bit!</p>
+ <h3>i3</h3>
+ <p>I have been using i3 as my window manager and without really any other
+ desktop environment programs. My login is the typical tty debian login.
+ But running i3 and then having windows appear, especially game windows
+ which can be tempermental, getting tiled to have to break it out again is
+ just a hassle. While I could&#39;ve gone with another Debian base running
+ a proper desktop environment + window manager I figured that&#39;d be
+ boring and I&#39;d just be trying out the programs and not the Linux,
+ which is half the fun.</p>
+ <p>That being said. i3 <i>is</i> Linux for me. Being able to just move
+ between windows with a macro and every bit of it just being intutive
+ (after you&#39;ve learned!) is a productivity booster. Which is why I
+ still use it on my work machine, and can&#39;t see myself ever switching
+ off.</p>
+ <h2>KDE</h2>
+ <p>I&#39;ve used Gnome and XFCE as desktop environments before, and
+ they&#39;re fine, but I&#39;ve always like the customability,
+ flexibility, and polished look of KDE.</p>
+ <h3>Setting up KDE for an i3 addict</h3>
+ <p>By default KDE isn&#39;t really too hard to &quot;get used to&quot;
+ since it feels like any other OS, especially a windows setup. But the
+ main thing I needed to change is the <code class=
+ 'inline'>meta+&lt;key&gt;</code> commands.</p>
+ <ul>
+ <li>Remapping the Virtual Desktop changes</li>
+ <li>Remapping the KWin window focuses</li>
+ <li>Remapping the KWin move to desktop</li>
+ <li>Installing DMenu</li>
+ <li>Shrinking the &quot;start bar&quot; panel</li>
+ <li>Removing Pager</li>
+ <li>Changing Task Manger to Window List</li>
+ <li>Configuring Desktop Layout to &quot;Desktop&quot; (this removes the
+ icons)</li>
+ </ul>Doing this helped make me feel at home so far, and not have to
+ retrain my brain.
+ <h3>Some of the key remappings</h3>
+ <p>Setting up the KWin window keymapping was really what made me feel at
+ home. For the first few hours with it, I felt as limited in my
+ productivity as with Windows. KDE and Windows share by default a lot of
+ the same keymappings around window manipulation and virtual desktop
+ changes. <b>Switch to desktop N</b> setting this as <code class=
+ 'inline'>meta+&lt;N&gt;</code> where N is the dekstop 1-10 (0). <b>Switch
+ to Window to the Left/Right/Up/Down</b> This was one I was nervous
+ wouldn&#39;t exist as a keybind. But What was <code class=
+ 'inline'>meta+alt+&lt;dir&gt;</code> was mapped to without the alt. This
+ allowed for the very annoying lack of ability to just jump between
+ browser and terminal, or especially two separate terminals. <b>Quit
+ Window</b> with <code class='inline'>meta+shift+Q</code>, <b>Tile
+ Window</b> command to use the Shift key rather, especially as
+ <code class='inline'>meta+&lt;dir&gt;</code> was overwritten by the focus
+ switching.</p>
+ <h2>Manjaro</h2>
+ <p>So I went with KDE Manjaro. Manjaro aims for the gaming desktop
+ experience. Arch is new for me, so I feel that would be something to
+ adjust to and learn.</p>
+ <h2>Gaming</h2>
+ <p>It has only been a day with it as I am writing. But I was able to get
+ a fair amount of the fighting games I wanted to play work.</p>
+ <h2>Proton + Steam</h2>
+ <p>So far my main focus has been running the fighting games I noodle
+ around on in Steam. To do this I launched Steam and installed the proton
+ and setup to run all games, regardless of compatibility. None of the
+ games I hoped to run had worked this way. I then opt&#39;d into the beta
+ for Proton running the experimental builds, which should generally have
+ the more up-to-date tunings for games. With this setup I was able to get
+ Soulcalibur VI to work. Battle for the Grid and Dragon Ball FighterZ both
+ had launching issues. So I looked around and found <a href=
+ "https://github.com/GloriousEggroll/proton-ge-custom/">Proton Ge
+ Custom</a> which is a custom fork of Proton that contains custom settings
+ and tweeks for various games. One of which is Battle For the Grid which
+ is how I found it. Using this I was able to play every game except Dragon
+ Ball FighterZ! A callout for Dead or Alive 6 which is performing
+ questionably. It can run and isn&#39;t actually too bad, but in windowed
+ or borderless it stutters and drops frames.</p>
+ <h3>Other issues</h3>
+ <p>Even on Windows there are issues with some games and your standard
+ configurations. Disabling Steam Overlay and adjusting the Steam Input
+ Setting on some games helped get some games working.</p>
+ <h2>Conclusion</h2>
+ <p>Gaming on Linux is still not great. Its MILES ahead of where it was
+ even a few years ago when I setup this PC. And I think it will take some
+ adjustment getting a feel for an i3less workflow.</p>
+ <h2>Update!</h2>
+ <h2>NTFS mounting</h2>
+ <p>Update! I got DOA and a few other games to run a bit smoother by
+ remounting my NTFS drives properly. I ended up using the following for my
+ /etc/fstab configuraiton for my NTFS drives: <code>UUID=&lt;drive-id&gt;
+ /mount/path ntfs
+ uid=1000,gid=1000,rw,user,exec,async,locale=en_US.utf8,umask=000 0
+ 0</code> I had noticed that both steam and mount.ntfs was running at
+ 20-40% CPU while not really doing anything. And then upwards of 80%
+ during gameplay.</p>
+ <h2>i3 Compatibility</h2>
+ <p>As I spend more time using the OS I made a few more adjustments:</p>
+ <ul>
+ <li>Removed everything except the Clock and System Tray.</li>
+ <li>I added KRunner to <code class='inline'>meta+space</code> to ease
+ running KDE specific programs that I can&#39;t be bothered to memorize
+ the name of</li>
+ <li>Back and forth on forcing &quot;No border&quot; on all windows.
+ Part of the reason I moved away from i3 was so that I had better
+ floating window management. And doing this would basically put me in an
+ equally hard to manage system for floating game windows. So until I
+ find a plugin that makes small taskbar/borders for the windows I&#39;ll
+ be sticking with the default.</li>
+ <li>On Manjaro at least: UNINSTALL mesa-demos! <code class=
+ 'inline'>sudo pacman -R lib32mesa-demos mesa-demos</code> This package
+ had the annoying &quot;fire&quot; demo which made dmenu opening firefox
+ a pain in the ass.</li>
+ </ul>The biggest difference was removing the Application Launcher from
+ the main panel. Having it there really felt like a crutch for running
+ programs. It is equal I would say to running apps as dmenu via
+ <code class='inline'>meta+d</code> vs just <code class=
+ 'inline'>meta</code> to launch the Application Launcher. However, the
+ bulky UI of it, even using just Window List, took away from the look/feel
+ I was going for.
+ </article>
+
diff --git a/posts/manjaro-follow-up-breaking-things.html b/posts/manjaro-follow-up-breaking-things.html
new file mode 100644
index 0000000..c1a0c16
--- /dev/null
+++ b/posts/manjaro-follow-up-breaking-things.html
@@ -0,0 +1,99 @@
+
+--post-date: 2021-01-05
+--type: blog
+ <article>
+ <h1>Manjaro Follow-up - Breaking things!</h1>
+ <p>I wanted to write a quick follow-up covering how I managed to break,
+ and then recover, everything when I went to remove my old debian
+ partition.</p>
+ <h2>Recap</h2>
+ <p>To recap: I installed Manjaro alongside a Debian/sid and Windows 10
+ install. Each of those OSs were on their own SSDs. I went from a 128SSD
+ with Windows installed, to adding a 256 installing Debian. Years later I
+ split the Debian SSD into two parts - installing Manjaro on my new slice.
+ Since my last update I have been playing around with Manjaro and having
+ made my i3 keybindings for Kwin I&#39;ve been pretty happy. But then I
+ started breaking things.</p>
+ <h2>Break stuff</h2>
+ <p>I broke my Manjaro by updating my Debian (apparently). To be honest
+ this is the one part I don&#39;t fully understand <i>why</i> it happened.
+ From what I could find online I didn&#39;t setup my system to handle two
+ separate Linux OS installs. But I was no longer able to boot directly
+ into Manjaro without using the initramfs failover boot option. I only
+ updated my Debian install because I was debugging something on my work
+ install, which both run Debian/sid. (Otherwise I would&#39;ve used my
+ server which runs Debian/Stable). But considering I hadn&#39;t had any
+ need to boot back into Debian I decided to just get rid of it!</p>
+ <h2>GParted, Grub, Gotchas!</h2>
+ <p>I went in knowing I&#39;d have to fix my Grub since I&#39;d be
+ removing Debian, which was the OS that I configured when I first
+ dualbooted the machine, so I assumed they were linked somehow and I would
+ need to reinstall it. The process I followed was:</p>
+ <ul>
+ <li>Create a GParted Live USB</li>
+ <li>Launch GParted reconfigure my partitions</li>
+ <li>Open the terminal in the live USB and reinstall Grub</li>
+ </ul>The 3rd point being a bit of a &quot;rest of the owl&quot; I
+ wasn&#39;t sure what to expect. GParted thankfully warns you
+ &quot;you&#39;re probably going to break stuff see our FAQ&quot; which
+ had a section on reinstalling grub. Reading that the 3rd part became:
+ <ul>
+ <li>mount the linux OS</li>
+ <li>bind the live dirs that are needed: <code class='inline'>/dir /sys
+ /proc</code></li>
+ <li>chroot into the mounted folder</li>
+ <li>run <code class='inline'>grub-install &lt;device&gt;</code></li>
+ </ul>But what I failed to realize (stupidly in hindsight) was the
+ &quot;device&quot; is the Master Boot Record (MBR) device. So in my case
+ Windows or <code class="inline">/dev/sdb</code>. I had assumed it was the
+ device of the linux install so I tried that and got notified my EFI boot
+ directory didn&#39;t look like an EFI partition... and from here it was
+ rabbit holes.
+ <h2>Where is my EFI partition?</h2>
+ <p>I have a fairly old Windows 7 install that has been upgraded to
+ Windows 10 during this whole journey. I&#39;ve been meaning to reinstall
+ it (on a larger drive). But rather than having a few partitions on my
+ drive (typically having a boot partition) I just have the one (and a
+ recovery partition). Its marked as boot, and even mounted to <code class=
+ 'inline'>/boot/efi</code> I found when I was able to boot into Manjaro
+ again. But it made no sense to me. If I needed an EFI partition, why was
+ my efi pointed to the root of my Windows C drive? The rabbit hole
+ consisted of:</p>
+ <ul>
+ <li>Creating a 200MB Fat32 Boot partition</li>
+ <li>Mounting that as my efi-directory</li>
+ <li>Reinstalling grub (again on my Linux device)</li>
+ <li>Eventually getting it to boot straight into Manjaro</li>
+ <li>Modifying my <code class='inline'>/etc/fstab</code> to mount my
+ boot/efi to the new partition (oops)</li>
+ <li>Repeating the above steps 5 times hoping something would be
+ different</li>
+ <li>Eventually finding in a forum that grub should be on the
+ MBR...</li>
+ </ul>
+ <h2>The Fix and Final Steps</h2>
+ <p>The fix was to basically follow the steps above but use the MBR:</p>
+ <ul>
+ <li>Boot GParted Live USB</li>
+ <li>Properly configure any partitions (this case delete the
+ &quot;EFI&quot; partition)</li>
+ <li>Mount the linux device</li>
+ <li>Bind the necessary live dirs to the linux mount</li>
+ <li>Run grub-install to the MBR device</li>
+ <li>Reboot</li>
+ </ul>It was that misunderstanding about the MBR that sent me on a path,
+ but now I at least feel semi-confident in changing around my OSs knowing
+ how to fix Grub. But what bout the Fstab?
+ <p>Like all true movie monsters, my stupidity came back for the final
+ scare. I booted into Manjaro, from Grub! to have it crash on me. It
+ couldn&#39;t mount one of the devices! The deleted partition! I was in
+ the recover shell and was able to modify the Fstab to point back to the
+ correct boot/efi device. (Thankfully I was familiar with Fstab to begin
+ with). But editing two files in a super-low-res terminal is not my idea
+ of fun (okay, maybe it is).</p>
+ <h2>Conclusion</h2>
+ <p>One of my new years resolutions was to learn more about my system. So
+ lighting a fire I had to put out was a great way to get some more
+ knowledge on maintence for grub/dualbooting.</p>
+ </article>
+
diff --git a/posts/music-blog.html b/posts/music-blog.html
new file mode 100644
index 0000000..f0b25fc
--- /dev/null
+++ b/posts/music-blog.html
@@ -0,0 +1,76 @@
+
+--post-date: 2023-01-06
+--type: blog
+ <article>
+ <h1>Music Blog?!</h1>
+ <p>I wanted to make a little blog section to just talk about my music
+ making. Mainly, to save my friends from enduring my thinking out
+ loud.</p>
+ <h2>Reworking my THR100HD</h2>
+ <p>I have a <a href=
+ "https://usa.yamaha.com/products/musical_instruments/guitars_basses/amps_accessories/thr100hd/index.html"
+ rel="external noopener noreferrer"
+ target="_blank">Yamaha THR100H Dual</a> which is a nice modeling amp
+ with two &quot;amps&quot;. Typically, I run these in parallel so I am
+ running through BOTH at the same time. As of late I am actually
+ considering moving to dialing in separate tones, and using my <a href=
+ "https://www.joyoaudio.com/product/88.html"
+ rel="external noopener noexternal"
+ target="_blank">Joyo PXL-Live</a> to act as a &quot;channel&quot;
+ switcher.</p>
+ <h3>Dual Amping</h3>
+ <p>Honestly, dual amping is my <em>favorite</em> thing. And I would hate
+ to give it up, as it gives my tones SO much depth. But I find when I try
+ to mix my guitars that extra depth just makes mixing a bit more of a
+ hassle than need be. But Mick of &quot;That Pedal Show&quot; on YouTube I
+ feel feels similarly, considering in <a href=
+ "https://www.youtube.com/watch?v=uMvhraRDvDs"
+ rel="noopener external noreferrer"
+ target="_blank">one of their &quot;use less&quot; challenge videos</a>
+ he used two amps for maximum tone shaping - which I feel adds some
+ justification to my efforts!</p>
+ <h2>Results after one night</h2>
+ <p>I spent an hour or so tonight messing around with my setup and came
+ out with the following high gain tone:</p>
+ <figure>
+ <figcaption>
+ &quot;Rezzed&quot; - Hi-gain dual amped Baritone guitar
+ </figcaption><audio controls=""><source src=
+ "/blog/music/2023-01-06/audio/rezzed-senders-io-audio.mp3">
+ <source src="/blog/music/2023-01-06/audio/rezzed-senders-io-audio.ogg">
+ <p>Download <a href=
+ "/blog/music/2023-01-06/audio/rezzed-senders-io-audio.mp3"
+ rel="me noopner"
+ target="_blank">MP3</a> or <a href=
+ "/blog/music/2023-01-06/audio/rezzed-senders-io-audio.ogg"
+ rel="me noopner"
+ target="_blank">OGG</a></p></audio>
+ <figcaption>
+ <em><small>No copyright</small></em>
+ </figcaption>
+ </figure>
+ <h3>Thoughts</h3>
+ <p>I feel its a bit... boomy still. There is some extra weight coming
+ from the &quot;clean&quot; channel that I think is causing this to lose
+ some clarity. I don&#39;t think if I wanted to add a mix around this
+ I&#39;d even end up keeping it. Or I would do some heavy EQing to that
+ channel. Here is what I have dialed in so far:</p>
+ <figure>
+ <img src=
+ "/blog/music/2023-01-06/img/thr100hd-settings-senders-io-img.jpg"
+ alt=
+ "A photo of the front face knobs of my Yamaha THR100HD. The top amp is set to the clean setting, the booster is turned off. The gain is roughly at 3 O&#39;Clock, Master at 9 O&#39;Clock, Bass at 10 O&#39;Clock, Middle at 2 O&#39;Clock, Presense off, Rever off, and Volume at 11 O&#39;Clock. The bottom amp is set to Modern, with the booster turned off. The gain is set to around 2:30, Master at 10 O&#39;Clock, Bass at a bit below 9 O&#39;Clock, Middle at 2 O&#39;Clock, Treble at 1 O&#39;Clock, Presents at 1:30, Rever off, and Volume a little above 9 O&#39;Clock"
+ role="img"
+ width="100%">
+ <figcaption>
+ <em>Current dual amp settings</em>
+ </figcaption>
+ </figure>
+ <h2>Future</h2>
+ <p>In the future I plan to setup different profiles between each the 5
+ channels per amp - so they&#39;re all useable and I can just do single
+ amping - as that provides me the FX loop until I setup a proper stereo
+ board. But until then - this is the setup I&#39;ve been using and I
+ rarely touch the back!</p>
+ </article>
+
diff --git a/posts/music-spotlight-my-top-album-2022.html b/posts/music-spotlight-my-top-album-2022.html
new file mode 100644
index 0000000..088e057
--- /dev/null
+++ b/posts/music-spotlight-my-top-album-2022.html
@@ -0,0 +1,396 @@
+
+--post-date: 2023-01-03
+--type: blog
+ <article>
+ <h1>Music Spotlight: My Top Album 2022</h1>
+ <p>The hype is real. I only recently wrote last years, so I bet your hype
+ is nonexistent but for me I was writing that knowing full well there were
+ some bangers waiting to be unleashed in this year end review!</p>
+ <p>If you hadn’t read my previous post for 2021 the link is at the
+ bottom:</p>
+ <blockquote>
+ <p>The winner was “KANGA - You and I Will Never Die”</p>
+ </blockquote>
+ <h2>The album pool</h2>
+ <p>As always the criteria:</p>
+ <ul>
+ <li>it was released in 2022</li>
+ <li>it wasn’t a single</li>
+ <li>if it was an EP it has to be substantial and intentional</li>
+ </ul>
+ <p>And the albums are…</p>
+ <ul>
+ <li>Amining for Enrike - The Rats and the Children</li>
+ <li>And So I watch You from Afar - Jettison</li>
+ <li>Astronoid - Radiant Bloom</li>
+ <li>Carpenter Brut - Leather Terror</li>
+ <li>Cult of Luna - The Long Road North</li>
+ <li>Dance With the Dead - Driven to Madness</li>
+ <li>Elder - Innate Passage</li>
+ <li>Emma Ruth Rundle - EG2: Dowsing Voice</li>
+ <li>Giraffes? Giraffes! - Death Breath</li>
+ <li>God Mother - Obeveklig</li>
+ <li>Jay Hosking - Celestial spheres (and various other releases)</li>
+ <li>Long Distance Calling - Eraser</li>
+ <li>Ludovico Technique - Haunted People</li>
+ <li>MWWB - The Harvest (Mammoth Weed Wizard Bastard)</li>
+ <li>MØL - Diorama (Instrumental)</li>
+ <li>Psychostick - … and Stuff</li>
+ <li>Russian Circles - Gnosis</li>
+ <li>SIERRA - See Me Now</li>
+ <li>Starcadian - Shadowcatcher</li>
+ <li>Tina Dickow - Bitte Små Ryk</li>
+ <li>Toundra - Hex</li>
+ <li>Waveshaper - Forgotten Shapes</li>
+ </ul>
+ <p>2022’s playlist (+ 2 albums from bandcamp not on Spotify):</p>
+ <ul>
+ <li>
+ <a rel="external noopener noreferrer"
+ target="_blank"
+ href=
+ "https://open.spotify.com/playlist/2TCd910OyZcTjQ8l8Dc0Jy?si=efd0dc6286b84062">
+ [spotify] senders&#39; Releases 2022 Spotify Playlist</a>
+ </li>
+ <li>
+ <a rel="external noopener noreferrer"
+ target="_blank"
+ href=
+ "https://emmaruthrundle.bandcamp.com/album/eg2-dowsing-voice">[bandcamp]
+ Emma Ruth Rundle - EG2: Dowsing Voice</a>
+ </li>
+ <li>
+ <a rel="external noopener noreferrer"
+ target="_blank"
+ href=
+ "https://jayhosking.bandcamp.com/album/celestial-spheres">[bandcamp]
+ Jay Hosking - Celestial spheres</a>
+ </li>
+ </ul>
+ <h2>The Top 5</h2>
+ <p>In alphabetical order:</p>
+ <ul>
+ <li>Carpenter Brut - Leather Terror</li>
+ <li>Elder - Innate Passage</li>
+ <li>Emma Ruth Rundle - EG2: Dowsing Voice</li>
+ <li>Jay Hosking - Celestial spheres (and various other releases)</li>
+ <li>Tina Dickow - Bitte Små Ryk</li>
+ </ul>
+ <h2>Carpenter Brut - Leather Terror</h2>
+ <p>Some metal infused synthwave, Carpenter Brut managed to release a
+ catchy and heavy banger of an album. Featuring a few guest performers,
+ each of these tracks are unique and catchy in what I would consider a
+ very “same-y” genre. It’s nice having an infinite supply of retro synth
+ tracks to drive to, but sometimes it’s hard for one to really break
+ through into “oh shit yes!”. Typically, Starcadian is the one to do that
+ for me, as they add an extra layer to their tracks through their music
+ videos (each track being an “ear movie”).</p>
+ <p>Throughout the year I found myself coming back to a few tracks over
+ and over - especially when I was showering or doing some other short
+ activity and I just wanted something upbeat and fun as heck!</p>
+ <p>Some call out featured songs are The Widow Maker featuring Gunship,
+ Imaginary Fire featuring Greg Puciato, and Lipstick Masquerade featuring
+ Persha. I looped these three songs quite a bit. But there are quite a few
+ more to checkout.</p>
+ <h3>Favorite Track</h3>
+ <p>This is tough, as I looped those three songs quite a bit - each
+ bringing their own unique energy. So I’ll pick all three - my list my
+ rules:</p>
+ <ul>
+ <li>
+ <p>The Widow maker - feat. Gunship This track is representative of
+ the genre. It’s synthwave to the core.</p>
+ </li>
+ <li>
+ <p>Imaginary Fire - feat. Greg Puciato This is a metal track with
+ synths. Greg Puciato (of The Dillinger Escape Plan fame) is one of my
+ favorite vocalists and is immensely talented. This is probably my
+ favorite because I can’t get enough of his vocal style - the screams
+ and the clean vocals!</p>
+ </li>
+ <li>
+ <p>Lipstick Masquerade - feat. Persha This is a modern 80s track.
+ This is what retrowave was designed around and while tracks like The
+ Widow Maker are more typical of the genre, this is the song they all
+ are basing their sound off of. This is kill pop song.</p>
+ </li>
+ </ul>
+ <h3>Special Commendation - Non Stop Bangers</h3>
+ <p>You throw this album on and it hits you with just banger after banger.
+ I can’t keep myself from dancing. Even as I listen back as I write this
+ gemlog I am grooving in my chair! Like Kanga last year, this is just a
+ series of tracks that just make you dance.</p>
+ <h3>Album Link</h3>
+ <p><a rel="external noopener noreferrer"
+ target="_blank"
+ href=
+ "https://open.spotify.com/album/37PW0ipoWcjx3APS1MN0ql?si=HE0-siOqTsqVlJrlL9MWTw">
+ [spotify] Carpenter Brut - Leather Terror</a></p>
+ <h2>Elder - Innate Passage</h2>
+ <p>I toot’d a bit about this album, a later release in the year, this
+ took this year end review and flipped it on its head. I thought it was
+ wrapped up already with a separate release this year, but this makes the
+ decision so hard.</p>
+ <p>Elder came at us with what feels like a return to form. Having
+ previously released Omens in 2020 and a collaboration album in 2021,
+ Innate Passage takes the best parts of those two albums and builds on-top
+ of more “classic Elder” albums like Lore. Elder has carved out their own
+ niche in the genre making a blend of psych rock and stoner metal, with
+ each release leaning harder and harder into psychedelic realms. Innate
+ Passage has this almost ethereal feeling - especially in their opening
+ track Catastasis.</p>
+ <p>I think, however, they’ve left the doom and stoner metal behind. Dead
+ Roots Stirring and Elder (self titled) were certainly “Doomy” and in that
+ “doom/stoner” metal overlap. Lore, Reflections of a Floating World are
+ both still very “stoner metal”. But is playing psychedelic-metal with a
+ big muff automatically stoner metal? I think since Omens they’re
+ probably, as a band, firmly outside of the stoner metal field - and more
+ soundly in some psychedelic/prog metal genre?</p>
+ <p>They introduce themselves as such in their website actually!</p>
+ <figure>
+ <blockquote>
+ <p>genre-pushing rock band&nbsp;that melds heavy psychedelic sounds
+ with progressive elements and evocative soundscapes.</p>
+ </blockquote>
+ <figcaption>
+ <cite>— <a rel="external noopener noreferrer"
+ target="_blank"
+ href=
+ "https://beholdtheelder.com/elder-bio/">https://beholdtheelder.com/elder-bio/</a></cite>
+ </figcaption>
+ </figure>
+ <p>“Merged In Dreams - Ne Plus Ultra” is the track that flips this whole
+ argument on its head and shows that regardless, they’re still very much a
+ metal band and one that you’ll absolutely be head banging too, horn up
+ \m/.</p>
+ <h3>Favorite Track</h3>
+ <p>I think “Merged In Dreams - Ne Plus Ultra”. A nearly 15 minute track
+ that has everything in it you expect from Elder.</p>
+ <h3>Special Commendation - Excellent Vinyl Record Cover</h3>
+ <p>I LOVE their record covers when they do the circular inserts. You can
+ display this vinyl with having 3 separate views through the port, which
+ while purely aesthetic - it’s very nice!</p>
+ <p>The quality of the vinyl release was great, though I find any
+ non-black Vinyl has a 33% chance of being slightly warped upon arrival. I
+ am going to stick to traditional black vinyls from now on sadly. It’s too
+ freaking often</p>
+ <h3>Album Link</h3>
+ <p><a rel="external noopener noreferrer"
+ target="_blank"
+ href=
+ "https://open.spotify.com/album/5XClGjeje4c3qPjbtT898K?si=PFgsT8S_TD6hu4dwbFp3Jw">
+ [spotify] Elder - Innate Passage</a></p>
+ <h2>Emma Ruth Rundle - EG2: Dowsing Voice</h2>
+ <p>Her second album in her “Electric Guitar” series - Emma Ruth Rundle
+ (ERR from here on out) has released “Dowsing Voice” a haunting follow-up
+ to last years Engine of Hell. Holy holy HOLY hell, this album is an
+ impactful, artistic, just WOW. It’s hard to describe. I was listening to
+ it for this review and my partner, sitting behind me relaxing, said “What
+ the hell are you listening too, this is scary!”. And scary, emotional,
+ and difficult it is. ERR stretches the use of the “electric guitar”
+ title, as the focus here is the additional layers and voices added on-top
+ of the main tracks.</p>
+ <p>An experimental release that, at this time is only available on
+ bandcamp, is one I don’t put on frequently, but when I do am fully
+ captivated. If you like artistic records - please check this out.</p>
+ <h3>Favorite Track</h3>
+ <p>Probably: Keening into Ffynnon Llanllawer - I love the guitar(?) part
+ and the wailing/vocalization. It’s haunting. As a recording is
+ amazing.</p>
+ <p>Though “In the Cave of The Cailleach’s Death-Birth” is the /best/
+ track. Put some headphones on and give this a listen! Just amazing.</p>
+ <h3>Special Commendation - Album Art</h3>
+ <p>This album, IS ART, but the album art is just… really suiting the
+ music.</p>
+ <h3>Album Link</h3>
+ <p><a rel="external noopener noreferrer"
+ target="_blank"
+ href=
+ "https://emmaruthrundle.bandcamp.com/album/eg2-dowsing-voice">[bandcamp]
+ Emma Ruth Rundle - EG2: Dowsing Voice</a></p>
+ <h2>Jay Hosking - Celestial spheres (and various other releases)</h2>
+ <p>This is an interesting pick. Having released JUST in time for this
+ year, this is an album I have been engaging with in many, many ways.
+ Firstly, I am a patron of this performer via Patreon. They make music
+ videos (audio only performance videos of the songs) that they compile
+ into albums. Last year’s album is probably my actual favorite and likely
+ SHOULD’VE snuck into the top 5 because of the final track alone, which
+ was an emotional and just epic banger of a track (Linked at the bottom of
+ this review).</p>
+ <p>Celestial spheres is a compilation of 8 synth jams. Jay bills these as
+ semi-improvisational, and while the YT channel is a synth nerds dream of
+ these informative performances, the songs stand on their own. This one is
+ no exception. Using various different pieces of hardware synths,
+ grooveboxes, drum machines and traditional instruments - each track is
+ unique while still carrying this /energy/ and style. It’s so easy to hear
+ Jays tracks and know it’s him.</p>
+ <p>I’ve been following him for years and really enjoy the music he makes,
+ and the community he’s built up around his music. Due to the disconnected
+ nature of the singles (releasing effectively as YouTube videos prior to
+ the album drop) it’s difficult to ultimately rate these in these lists
+ since I don’t get a chance to really enjoy them /as an album/ until the
+ end of the year (the past two times happened like this where they came
+ out around the end of the year). And on my playlist “Future, Tense” is
+ present as it’s a “2022” album according to Spotify, but was out on
+ bandcamp in 2021, and that’s when I was gifted it by Jay.</p>
+ <p>So yeah - this whole section is like “disclaimer disclaimer” but if
+ you like groovy, typically instrumental synth music - check it out.</p>
+ <h3>The various other releases</h3>
+ <p>This year Jay released a few albums actually which I didn’t want to
+ include separately. If you enjoy this album (which was mostly comprised
+ of 2022 music, so was the primary focus) check out the other albums:</p>
+ <p><a rel="external noopener noreferrer"
+ target="_blank"
+ href=
+ "https://jayhosking.bandcamp.com/album/cinematic-works">https://jayhosking.bandcamp.com/album/cinematic-works</a>
+ <a rel="external noopener noreferrer"
+ target="_blank"
+ href=
+ "https://jayhosking.bandcamp.com/album/away-music-for-a-productive-day">https://jayhosking.bandcamp.com/album/away-music-for-a-productive-day</a>
+ <a rel="external noopener noreferrer"
+ target="_blank"
+ href=
+ "https://jayhosking.bandcamp.com/album/home-music-for-a-productive-day">https://jayhosking.bandcamp.com/album/home-music-for-a-productive-day</a></p>
+ <h3>Favorite Track</h3>
+ <p>Without out a doubt it’s Nychthemeron. It’s truly a wild track, with
+ so much happening in it. I suspect it was his favorite too since he made
+ an actual music video for it:</p>
+ <p><a rel="external noopener noreferrer"
+ target="_blank"
+ href="https://www.youtube.com/watch?v=Ka-xE3Qo3dA">[youtube] Jay
+ Hosking - Nychthemeron (Official Music video)</a></p>
+ <h3>Special Commendation - Each track has a live performance attached to
+ it!</h3>
+ <p>If you enjoy videos - these each have a corresponding YT video linked
+ at the bottom of the bandcamp page.</p>
+ <h3>Album Link</h3>
+ <p><a rel="external noopener noreferrer"
+ target="_blank"
+ href=
+ "https://jayhosking.bandcamp.com/album/celestial-spheres">[bandcamp]
+ Jay Hosking - Celestial spheres</a></p>
+ <h2>Tina Dickow - Bitte Små Ryk</h2>
+ <p>Tina Dickow (sometimes credited as Tina Dico, depending on the
+ release) is a fantastic Danish singer songwriter. Since her first solo
+ album she’s really found a way to elevate what is just folk indie pop.
+ Her songwriting, arrangements, and performances are always so rich. She
+ knows when to strip the song back - like Chefen Skal Ha&#39; Fri - while,
+ has certainly a lot happening beneath the lyrics - mixes them back a bit
+ to let the layered vocals cut through as the song builds. Each song has
+ so much to listen to! Picking out various instruments, layers, yet every
+ song would work performed just her and her acoustic guitar. I find her
+ style of pop music to be very engaging for that reason. I don’t often
+ listen to this style of music, but the production behind each track is so
+ good it hooks me in. That and her beautiful voice - which drew me in
+ first.</p>
+ <p>It’s a bit harder to talk about this album given the language barrier
+ (I do not speak Danish!) Which is a shame, since her lyrics are often
+ what I love about some of her previous albums. I’ve read the translations
+ and done my own as a learning exercise, but there is a layer missing
+ which is a shame given how strong this album is as whole.</p>
+ <p>I’ve spoken about Tina before in two previous gemlogs (<a href=
+ "gemini://senders.io/gemlog/2021-04-27-music-spotlight-awesome-eps.gmi">Music
+ Spotlight: Awesome EPs</a> and <a href=
+ "gemini://senders.io/gemlog/2021-05-18-5x5-playlists.gmi">5x5
+ Playlists</a> (both gemini:// links)) and is one of my absolute favorite
+ artists of all time. I’ve been slowly collecting her entire discography,
+ which can be tricky, given a lot of copies are out of print and the
+ remaining stock/used copies are often in Europe. (And that 5x5 playlist
+ is very telling given most of those artists have been featured in my top
+ albums lists and were winners! Is this foreshadowing?!)</p>
+ <h3>Favorite Track</h3>
+ <p>I shouldn’t have introduced this section - it has been so hard each
+ time! I think the title track, Bitte Små Ryk. It’s got everything there,
+ and is representative of the albums sound.</p>
+ <h3>Special Commendation - Lovely</h3>
+ <p>This whole album is lovely. There is emotion here too, and while I
+ don’t speak the language its often very clear. But I love Tina and her
+ music. It’s lovely and hits this spot in me thats just warm.</p>
+ <h3>Album Link</h3>
+ <p><a rel="external noopener noreferrer"
+ target="_blank"
+ href=
+ "https://open.spotify.com/album/6YV4Gomk4iy0dUyVqPDN7T?si=e3wO7G3XTI-ZIwhOSCswJA">
+ [spotify] Tina Dickow - Bitte Små Ryk</a></p>
+ <h2>My Top Pick</h2>
+ <p>This year has been especially hard, since I spent so much time
+ listening to 2021s releases which are some of my favorite of all time.
+ And between 2021 and 2022 (and mentioned in my 2021 spotlight) nearly
+ every one of my favorite artists released an album. So I have been
+ blessed with a lot to listen to.</p>
+ <p>Anyone following me on mastodon may have seen Tina Dickow just owning
+ my entire wrapped campaign, but with Elder releasing their album after
+ the data collection stops for wrapped, that certainly isn’t telling the
+ whole story.</p>
+ <p>And it wouldn’t be a top album list if I didn’t mention Starcadian
+ being consistently in the top 10 year after year, just narrowly missing
+ the top 5 - though technically, this release was in my 2020s list, as it
+ was available then, but had since been pulled, and was released
+ “officially” in 2022. Looking at what I can see it’s the same tracklist,
+ but the “inspired by” credits are entirely gone from the 2022
+ release.</p>
+ <h3>Elder - Innate Passage</h3>
+ <p>Each year picking the winner is hard. Part of the reason I do this is
+ I don’t really add stuff to the list I don’t like. A LOT of music comes
+ out each year, and I add what I listen to. I don’t listen to music I
+ don’t like - so by nature of the process - each album is a “top album”
+ for me.</p>
+ <p>But the top 5 is usually a mix of “omg obvs” and “yeah turns out I
+ threw that on way more than I expected” (Carpenter Brut). But its really
+ always a fight between those “obvs” - this year was Elder and Tina
+ Dickow. Their releases were seriously top tier and repeat listens.</p>
+ <p>Tina came in with the advantage of releasing in April, and Elder JUST
+ released theirs at the end of November. But I did some math on my
+ mastodon breaking down the comparison. Elder came at us with a longer
+ albums, under half as many tracks, and over 2x the average song length
+ (about 10min/track).</p>
+ <p>They didn’t waste a single second (neither did Tina) but just being
+ such an accessible album - just direct pure energy and power - BOOM! It
+ was great.</p>
+ <h3>This should’ve been a tie</h3>
+ <p>Honestly, I was ready to call it a tie. I am actually writing this
+ minutes before posting it, because that’s how undecided I am and how
+ close this is.</p>
+ <p>Tina Dickow deserves the number one slot any other year, and both her
+ and Elder’s albums I hope to see more of in the next few years! Both are
+ classic albums in their discographies (both albums of which I own and
+ spin regularly). I forced myself to pick, and just knowing me, my tastes,
+ and all the stuff I said above - I went with Elder. But seriously, listen
+ to this record - Tina manages to pack so much musicality in carving out a
+ unique sound and just amazing style. I love her &lt;3 :)</p>
+ <p>And if her music isn’t your jam - check out her guest tracks on the
+ Zero-7 stuff - angelic voice.</p>
+ <h2>Conclusion</h2>
+ <p>I am REALLY disappointed I had to choose between Elder and Tina Dickow
+ this year. Similarly, last year I had Raised by Swans, ERR, and Kanga!
+ And our winner in 2020 was Bell Witch. These ARE my top six favorite
+ musical artists currently active.</p>
+ <p>I’ll talk about music trends and my tastes later on. But I just wanted
+ to emphasize how much of a banger these last 3 years have been musically
+ and I am grateful I get to share these with you here.</p>
+ <p>I am really excited for 2023!</p>
+ <h2>This year’s playlist (2023)</h2>
+ <p><a rel="external noopener noreferrer"
+ target="_blank"
+ href=
+ "https://open.spotify.com/playlist/4zgdFBZslkcEq0xYFyME7U?si=4bc2bf7d015c4254">
+ [spotify] senders&#39; Releases 2023 Playlist</a></p>
+ <h2>Links</h2>
+ <p>If you use gemini:// you can check out my previous posts (until/unless
+ I decided to port those over too)</p>
+ <ul>
+ <li>
+ <a href=
+ "gemini://senders.io/gemlog/2022-11-30-music-spotlight-top-album-2021.gmi">
+ [gemini] Music Spotlight: Top Album 2021</a>
+ </li>
+ <li>
+ <a href=
+ "gemini://senders.io/gemlog/2021-03-21-music-spotlight-top-album-2020.gmi">
+ [gemini] Music Spotlight: Top Album 2020</a>
+ </li>
+ </ul>
+ <p>Thanks for reading! I don’t always crosspost - I am trying something
+ out :)</p>
+ </article>
+
diff --git a/posts/my-markdown-html-setup.html b/posts/my-markdown-html-setup.html
new file mode 100644
index 0000000..060f988
--- /dev/null
+++ b/posts/my-markdown-html-setup.html
@@ -0,0 +1,212 @@
+--post-date: 2022-11-06
+--type: blog
+--updated-at: 2024-03-02
+--tags: tech
+ <article>
+ <h1>My Markdown → HTML Setup</h1>
+ <p>A common way I see a lot of people blog, especially micro-blog, is in
+ <a rel="external noopener noreferrer"
+ target="_blank"
+href="https://daringfireball.net/projects/markdown/">markdown</a>.</p>
+ <figure>
+ <blockquote>
+ <p>Markdown is a lightweight markup language for creating formatted
+ text using a plain-text editor.</p>
+ <cite>— <a rel="external noopener noreferrer"
+ target="_blank"
+ href="https://en.wikipedia.org/wiki/Markdown">Wikipedia |
+ Markdown</a></cite>
+ </blockquote>
+ </figure>
+ <p>It built itself on-top of common syntax prevalent on the web and was
+ designed to be converted into simple HTML output. Since it leveraged
+ preexisting syntax it was easy for new users to pick up, and is now found
+ all over the web and applications.</p>
+ <p>Since I started this website, I had been writing each page by hand
+ using a few tools to facilitate that - and for a while I had been looking
+ for a good way to try out using markdown to generate some lighter pages
+ and these blogposts.</p>
+ <h2>Writing HTML by hand</h2>
+ <p>When it comes to blogging a lot of platforms offer WYSIWYG editor –
+ allowing users to write in rich-text that then gets converted into HTML
+ in the style of the platform. But for my case, since I self host this
+ website, I decided to stick to my roots and write PURE HTML instead.</p>
+ <p>HTML is fairly simple and easy once you get use to the basic structure
+ of the system. And since I’ve been working in HTML almost two decades
+ now, at the time it felt like the best solution to make a clean
+ website.</p>
+ <p>I briefly touched on my design process in <a href=
+ "/blog/2019-01-21/">2019-01-21 - First! A New Years Resolution</a>
+ outlining that I wanted to make a very lightweight and simple website.
+ And at the time I believed the best way to achieve this goal was to
+ carefully structure and craft my website’s HTML by hand.</p>
+ <p>This article is making the process sound far more difficult than it is
+ – it’s mostly just tedious.</p>
+ <pre><code>
+&lt;article&gt;
+ &lt;h2&gt; Title &lt;/h2&gt;
+ &lt;p&gt;
+ Some paragraph....
+ &lt;/p&gt;
+ &lt;h2&gt;
+ &lt;p&gt; some subsection &lt;/p&gt;
+ &lt;/h2&gt;
+ &lt;p&gt; more text &lt;/p&gt;
+... etc
+&lt;/article&gt;
+</code></pre>
+ <p>Is essentially what the website looks like - you can view the source
+ of this page to see – it’s very simple HTML.</p>
+ <p>The benefit I found doing this, mostly leveraging <a href=
+ "www.html-tidy.org/">tidy</a>, allowed a very easy to edit codebase. And
+ by leveraging the existing tags and their properties I also attempted to
+ keep the styling to an absolute minimum. Using existing tags to enforce
+ the styling I desired.</p>
+ <p>Only for certain areas (tables, code, quotes) where readability is an
+ issue do I setup custom CSS.</p>
+ <p>Most of this process is actually what will continue to happen but the
+ actual writing process will be unobstructed by the tedium of writing
+ HTML.</p>
+ <h2>Micro-blogging in general</h2>
+ <p>At the time of writing this, I have no ported over any of my <a rel=
+ "external noopener noreferrer"
+ target="_blank"
+ href="https://gemini.circumlunar.space/">Gemini</a> micro-blogs. This
+ warrants a longer post, since I wrote consistently in gemini from
+ March 2021 through May 2021 – having only stopped due to a long move
+ leading to a lot of server downtime breaking the habit. My gemini
+ updated multiple days a week - mostly due to the extremely lightweight
+ and limited nature of the platform.</p>
+ <h3>Gemtext</h3>
+ <p><a rel="external noopener noreferrer"
+ target="_blank"
+ href="https://gemini.circumlunar.space/docs/gemtext.gmi">Gemtext</a>
+ was the gemini protocol’s standard MIME type. It was a basic markup
+ language that relied on line based syntax. It was purposefully as lean
+ as necessary because this was what was ACTUALLY being served to
+ clients – unlike Markdown which first needed to be converted to HTML,
+ gemtext was the actual text served and rendered on the viewers client.
+ You could customize the style of your client - but you could not, as
+ an author, dictate how your content would be viewed. This meant the
+ only aspects of your blog you had control over was the actual content
+ and it’s structure – which for a blog is really all you should care
+ about.</p>
+ <p>It’s syntax contained most of what I was actually using here already
+ from HTML:</p>
+ <ol>
+ <li>headings</li>
+ <li>paragraphs that were wrapped based on page-width</li>
+ <li>links</li>
+ <li>lists</li>
+ <li>quotes</li>
+ <li>preformatted-text / codeblocks</li>
+ </ol>
+ <p>Besides links - it also leveraged the same common syntaxes that
+ markdown did.</p>
+ <h3>Gemtext links</h3>
+ <p>From my brief time in the IRC and in geminispace in general - a lot of
+ the “recommendations” came from new users about providing in-line links.
+ The philosophy was that by forcing links to exist on their own line -
+ clients could configure how they wanted these to be seen and not have to
+ worry about links interfering with the text.</p>
+ <figure>
+ <blockquote>
+ <p>Like Gopher (and unlike Markdown or HTML), Gemtext only lets you
+ put links to other documents on a line of their own. You can’t make a
+ single word in the middle of a sentence into a link. This takes a
+ little getting used to, but it means that links are extremely easy to
+ find, and clients can style them differently (e.g. to make it clear
+ which protocol they use, or to display the domain name to help users
+ decide whether they want to follow them or not) without interfering
+ with the readability of your actual textual content.</p>
+ <cite>
+ —
+ <a rel="external noopener noreferrer"
+ target="_blank" href="https://gemini.circumlunar.space/docs/gemtext.gmi">
+ gemini.circumlunar.space
+ – A quick introduction to “gemtext” markup | Links
+ </a>
+ </cite>
+ </blockquote>
+ </figure>
+ <p>I felt that this provided a lot of useful limitations that removed a
+ huge barrier for me to actually write down ideas without feeling over
+ burdened. I also lurked in the IRC - as well as <a rel=
+ "external noopener noreferrer"
+ target="_blank"
+ href="https://github.com/s3nd3r5/java-gemini-server">implemented my
+ own gemini server</a>.</p>
+ <p>As a quick aside – the java server was a lot of fun! The protocol was
+ very simple to work with for basic gemtext. I felt the ultimate downside
+ was trying to build something for basic gemini capsule hosting (like I
+ was using for a decent chunk of my time with gemini) - and something for
+ developers to use as a base application server. At the time in 2021 a lot
+ of talk was happening on IRC of users starting to look to provide more
+ complex experiences via the protocol and I wanted a way for those
+ interactions to be built out in Java - since most were in Go or Python at
+ the time. This decision lead to me burning out due to difficulties
+ splitting those responsiblities easily - where you could host along side
+ your application - since I lacked the experience with more complex Gemini
+ capsule applications.</p>
+ <p>But it was a good experience and I got hands on experience with Certs,
+ Netty, and SNI - which actually came in handy at my job!</p>
+ <h2>Wasn’t this about Markdown?</h2>
+ <p>A lot of what I liked about Gemini I found missing when I returned to
+ the World Wide Web. Writing a new post was tedious and I actually had a
+ few drafts sitting unposted. They’re probably checked into my git at this
+ moment! So I thought - why not just use markdown and convert to HTML?
+ That’s what it’s built for - and I already designed my site to work with
+ minimal customization of raw HTML tags!</p>
+ <h2>How I use Markdown</h2>
+ <p>Firstly, this blogpost was written in Markdown (with minimal HTML
+ sprinkled in). Then I render the markdown into HTML using <a rel=
+ "external noopener noreferrer"
+ target="_blank"
+ href=
+ "https://www.pell.portland.or.us/~orc/Code/discount/">Discount</a>.
+ Frankly, I don’t know how I stumbled across this markdown parser - I
+ think it came pre-installed on my KDE Arch system because another KDE
+ program used it. But I liked it, and it seemed extensible enough for
+ my needs.</p>
+ <p>This would produce the “body” of my articles - and I could then
+ prepend and append the template-head and foot to my html output to form a
+ blog post/web page.</p>
+ <h3>Customizations</h3>
+ <p>After I generated the output file, I replaced some placeholders in the
+ templates via <code>sed</code> and then <code>tidy</code>’d the HTML. The
+ only other major issue was Discount had no way of appending any link
+ attributes – so for external links I had <code>sed</code> append the
+ <code>rel</code> and <code>target</code> attributes - which work off the
+ assumption they’re not there. A lot of my home-server scripts rely on
+ assumptions…</p>
+ <p>This is all bundled up in a simple script file so I can just supply a
+ few arguments and the full page is re-rendered on command.</p>
+ <h2>Two Sources of Truth</h2>
+ <p>In the sytem I devised the markdown files are really the “source of
+ truth” but you could argue that the HTML files hold equal weigh - as
+ they’re what you’re reading right now. The markdown is only useful if I
+ render it as HTML. There exist nginx extensions to serve markdown as HTML
+ so I store everything as markdown. I could also provide some heading
+ information to the markdowns to remove the command arguments and have on
+ boot it generate the .html files in place before launching the site… But
+ these are all nice ideas for a later date.</p>
+ <p>Ultimately, this is something I contribute to ocassionally - I don’t
+ need something too complicated. I just need to output some HTML a few
+ times a year. So if I manually publish the HTML each time - that’s likely
+ far more efficent then re-rendering.</p>
+ <h2>Learnings</h2>
+ <p>This is the first post that uses this - though I’ve converted a page
+ over to this already. But once I worked out the kinks and built a flow
+ that works for me - this made the writing process a LOT easier. Another
+ issue was that once I <code>tidy</code>’d the HTML file - it became
+ frustrating to edit, and I didn’t always re-tidy it. Because the output
+ is always <code>tidy</code>’d by the script - I can edit the raw markdown
+ as needed. And the script generally will always output the same file
+ (with whatever changes I made of course). This makes the editing and git
+ history a lot clearer.</p>
+ <p>I would recommend writing in markdown - or even trying out gemini -
+ you can host your gemini capsule on the web even! (Most gemini webpages
+ are gemini capsules converted). I am sure other “blog focused markups”
+ also exist too.</p>
+ </article>
+
diff --git a/posts/remember-recall-what-couldve-been-a-command-line-tool.html b/posts/remember-recall-what-couldve-been-a-command-line-tool.html
new file mode 100644
index 0000000..b9ede49
--- /dev/null
+++ b/posts/remember-recall-what-couldve-been-a-command-line-tool.html
@@ -0,0 +1,50 @@
+
+--post-date: 2020-02-16
+--type: blog
+ <article>
+ <h1>remember/recall - what could've been a command line tool</h1>
+ <p>During a meeting at work when I realized I often forget useful
+ commands. So I had the bright idea to create a command line tool that
+ would basically append a file with the command you wanted to remember
+ that you could search over later if you wanted to recall a certain
+ command. I figured I could it could just be a simple bash script that
+ recalls your bash-history and appends it to a file, all things that are
+ incredibly easy to do... or so I thought.</p>
+ <h2>Look before you leap</h2>
+ <p>This article is a reminder to myself to test the core functionality
+ first, before decorating your program/script with all those bells and
+ whistles. While I did learn a lot in the process it is always a good to
+ check the basics first.</p>
+ <h2>What went right</h2>
+ <p>I actually ended up learning a lot during the development of the
+ (never finished) tool. I had never used <code>getopts</code> inside a
+ script before, which turned out to be extremely intuitive. That was all
+ that went right...</p>
+ <h2>What went wrong</h2>
+ <p>Literally, everything else that could&#39;ve went wrong did. The
+ &quot;project&quot; was a single bash script roughly 160 lines long
+ before I found out it wouldn&#39;t work. It was a series of flags that
+ enabled actions that called functions, some of which ended the script
+ either successfully or not. It wasn&#39;t necessarily a mess to read (I
+ tried to make it that every function ended up in an exit so I knew if I
+ entered I would need to assume it terminated) but it was hard to follow
+ when writing. I tried to allow it so you could default an action to make
+ the CLI intuitive which lead to a messy set of if/elses and switch
+ cases.</p>
+ <h3>You can&#39;t access un-committed bash history</h3>
+ <p>History command in a bash shell commits the history at the end of the
+ session. This makes sense once you know this, there are a lot of reasons
+ saving the commands to file after every execution is probably not the
+ best idea. However, it can be enabled with a flag when you enable a shell
+ session. But I didn&#39;t want to build a tool that required me to
+ remember I had to add something to my bash_profile before it would work.
+ I wanted something I could just copy onto a new machine and have access
+ to its functionality.</p>
+ <h2>Lesson learned</h2>
+ <p>While developing a tool to help me remember things, I learned
+ something I cannot forget: Test the core, simplest functionality first.
+ Before you do anything validate what you&#39;re trying to do will work.
+ Because after building all of these fancy bells and whistles, if it
+ can&#39;t do the basics, there is no point.</p>
+ </article>
+
diff --git a/posts/rss-a-follow-up.html b/posts/rss-a-follow-up.html
new file mode 100644
index 0000000..4e73012
--- /dev/null
+++ b/posts/rss-a-follow-up.html
@@ -0,0 +1,234 @@
+--post-date: 2022-12-31
+--type: blog
+ <article>
+ <h1>RSS - A Follow-up</h1>
+ <p>Get an RSS reader and connect everything to it!</p>
+ <p>Between switching to Mastodon for my social media allowance, and using
+ a dedicated RSS reader has really cut down my overall consumption and
+ wasted PC time.</p>
+ <blockquote>
+ <p>this blogpost is originally posted to my gemini gemlog: <a href=
+ "gemini://senders.io/gemlog/2022-12-31-rss-a-follow-up.gmi">gemini://senders.io/gemlog/2022-12-31-rss-a-follow-up.gmi</a>
+ which is where I do most of my writing, converting some useful to share
+ things over here. It is also where the original RSS gemlog this is a
+ follow-up to was posted. For context, I wanted to cutback on a lot of
+ my web consumption, wasting time and just being mindless online. So I
+ looked to RSS to help centralize and solve this issue.</p>
+ </blockquote>
+ <h2>Recap</h2>
+ <p>So I am using <a rel="external noopener noreferrer"
+ target="_blank"
+ href="https://tt-rss.org">https://tt-rss.org/</a> as my RSS
+ aggregator. It’s a self-hosted RSS aggregator that, using profiles,
+ allows you to subscribe to multiple feeds and have them “synced”
+ between multiple devices (they’re not synced, you’re connecting to a
+ central server). I like this because I don’t ever have to worry about
+ dismissing, reading, or marking anything on my phone to have it still
+ present on my PC. And I don’t have to worry about feed subscriptions
+ or my phone pinging a bunch of feeds, or obviously, any third-party
+ hosting.</p>
+ <h2>How I’ve been using it</h2>
+ <p>So as always, please send me interesting RSS feeds! Or even your own!
+ I am trying to read more blogs, and if you have something you enjoy drop
+ me a DM or email! I’ll share what I am following throughout this section
+ &lt;3</p>
+ <h3>Blogs</h3>
+ <p>Obviously, I am following blogs, one of the last holdouts of RSS. I
+ have a few that I follow, mostly other transfolk on Mastodon that I found
+ had their own blogs. Most non-trans folks I follow are using gemini and
+ still rely on the feed aggregators for that.</p>
+ <p>If you’re interested the two main ones I am reading right now are:</p>
+ <ol>
+ <li>
+ <a rel="external noopener noreferrer"
+ target="_blank"
+ href="https://erininthemorn.substack.com">Erin In The Morn
+ (substack)</a>
+ </li>
+ <li>
+ <a rel="external noopener noreferrer"
+ target="_blank"
+ href="https://www.selfawaresoup.com/">Selfaware Soup</a>
+ </li>
+ </ol>
+ <p>Which have been pretty insightful. Erin sharing a lot of US
+ transgender news, which is good since I have dropped off using Reddit
+ which is where I “got” my “news” from.</p>
+ <h3>Podcasts</h3>
+ <p>The other mainstay in RSS is podcasts. Some even say if a podcast
+ can’t be consumed via RSS, is it even a podcast? I would agree.
+ Everything else is just a show. I don’t <em>need</em> the content to be
+ consumable from my reader, but I’d really appreciate it if were. I am
+ always on the lookout for more podcasts though. With the only two
+ consistent listens being:</p>
+ <ol>
+ <li>
+ <a rel="external noopener noreferrer"
+ target="_blank"
+ href="https://www.relay.fm/penaddict">The Pen Addict Podcast
+ (relay.fm)</a>
+ </li>
+ <li>
+ <a rel="external noopener noreferrer"
+ target="_blank"
+ href="https://www.relay.fm/cortex">Cortex Podcast (relay.fm)</a>
+ </li>
+ </ol>
+ <p>And currently off-season:</p>
+ <ul>
+ <li>
+ <a rel="external noopener noreferrer"
+ target="_blank"
+ href="https://www.relay.fm/backmarkers">Backmarkers Podcast
+ (relay.fm)</a>
+ </li>
+ </ul>
+ <p>Which has a YouTube video format. Though, I honestly really don’t care
+ for Austin Evans, I just enjoy consuming some F1 content and pretending I
+ have friends I can talk to about motor racing.</p>
+ <p>While writing this section I added:</p>
+ <ul>
+ <li>
+ <a rel="external noopener noreferrer"
+ target="_blank"
+ href="https://inside.java/podcast/">Inside.java Podcast</a>
+ </li>
+ </ul>
+ <p>I have yet to listen, some of the topics seem interesting and being
+ infrequent gives me hope its quality over quantity. (And I like having
+ podcasts for chores to distract my brain)</p>
+ <h3>Tech News</h3>
+ <p>Right now I follow two main news sources in tech:</p>
+ <ol>
+ <li>
+ <a rel="external noopener noreferrer"
+ target="_blank"
+ href="https://www.debian.org/News/">debian.org/news</a>
+ </li>
+ <li>
+ <a rel="external noopener noreferrer"
+ target="_blank"
+ href="https://lwn.net/">LWN.net</a>
+ </li>
+ </ol>
+ <p>Running servers using stable debian - it’s good to know when security
+ updates come in, as well as distro updates. And LWN is fantastic, I’ve
+ been a subscriber for many years and while sometimes (Jake) can focus a
+ bit heavy on Python news, has been always interesting to read.</p>
+ <p>This is the section I plan on adding more and more to. I had other
+ tech blogs that just felt like clutter and were pushing out daily
+ articles that I couldn’t care less about (opensource.com cough cough).
+ But that’s just me. Tech news is mainly where I want to focus - since
+ fluff blogs are rarely my cup of tea.</p>
+ <p>LWN has some links in their weekly editions for other news feeds I
+ might consider directly subscribing too, but for now I have these.</p>
+ <h3>Music News</h3>
+ <p>Some folk have an RSS feed for their site updates, which I appreciate.
+ Some use sites like Squarespace but don’t properly connect up the RSS
+ feed which I do NOT appreciate.</p>
+ <p>So right now I have two bandsites that DO update it seems (as their
+ site aligns with the feed) - but the only one I’ll mention is: <a rel=
+ "external noopener noreferrer"
+ target="_blank"
+ href="https://raisedbyswans.com/">raisedbyswans.com</a> I’ve spoken of
+ this artist in my Music Spotlight MANY times and is one of my
+ favorites. His site, while entirely simple, is setup with RSS and has
+ been publishing his updates consistently. I appreciate this. Always a
+ strong rec from me!</p>
+ <p>I’ve been toying with Music Review sites that talk about new releases
+ in the genres they specialize in, but I haven’t settled on anything that
+ is helping me discover new music.</p>
+ <h3>YouTube</h3>
+ <p>This is probably where the biggest change has actually come in. Having
+ my YouTube feed fed through RSS has been fantastic. I am able to not only
+ refresh and not miss any updates (since YouTube sometimes likes to pull
+ updates in out of order than I don’t see it because it’s buried between
+ some other videos that I’d already seen.</p>
+ <p>But this also allows me one further level of filtering on my YouTube
+ subscriptions. I can stay subscribed to channels I am interested in
+ watching <em>occasionally</em> but not every video, and keep those off my
+ RSS feed. And for the “I like to watch most if not all the new videos” I
+ can subscribe to those via RSS. So it’s like the “bell” but without the
+ app basically. And since on Mobile I do NOT use the YouTube app (so I can
+ take advantage of the Ad Blocker in Firefox) that’s great!</p>
+ <p>What sucks / is tricky is actually subscribing to the RSS feeds
+ because YouTube buried that feature now. You just need the channel_id or
+ the username and you can subscribe using the following URL:</p>
+ <pre><code>https://www.youtube.com/feeds/videos.xml?channel_id={ID}
+</code></pre>
+ <p>And you can obtain the channel_id either using the URL (though with
+ aliases now (@channelname) its rare to see a channel_id in the URL) if
+ present otherwise a little console JS can print it out:</p>
+ <pre><code>ytInitialData.metadata.channelMetadataRenderer.externalId
+</code></pre>
+ <p>A note however - you’ll need to clear the console if you navigate to
+ the next channel, at least in Firefox, it caches the result otherwise and
+ you’ll print out the duplicate value. There are some tools where you can
+ print your subscribers list into these feed URLs and bulk subscribe. I’ve
+ lost the link (and it’s what I did initially) but I recommend doing the
+ manual add at least to focus on the channels you WANT in RSS, since you
+ can always fallback to the main subscriptions page on YouTube.</p>
+ <p>But what this has given me is the ability to effectively ignore
+ YouTube almost entirely. Ideally, I’d script something with YouTube-dl
+ but I don’t REALLY care that much, and I’ve gotten into the habit of
+ closing the tab after the video so I don’t stick around and get sucked
+ into the algorithm.</p>
+ <p>What my morning looks like is sitting down, switching to my tt-rss
+ tab, seeing what’s fresh, and watching a video with my coffee maybe, then
+ just moving on and doing something else. I still lurk Mastodon, or get
+ sucked into my computer in some way or another, but it’s been really
+ positive! I can count on one hand how many times since dedicating to RSS
+ I’ve just clicked around YouTube.</p>
+ <h3>Hobby</h3>
+ <p>The last section which really is an extension of Blogs/News is “hobby”
+ RSS feeds. These feed a bit into the consumerist side of life and why I
+ keep them separate. Right now it’s almost <em>entirely</em> fountain pen
+ related (Who&#39;da thought this community would still be writing blogs
+ :P) but since most of the blog posts are either about products or reviews
+ in some way, I try and limit how much I expose myself to them. I have
+ been working on a draft about consumerism for quite a while now and just
+ haven’t really worked it into a post that isn’t just DAE consumerism BAD?
+ low-effort Toot level. (But basically, I kinda hate how all my hobbies,
+ and hobbies in general rely heavily on a consumerism mindset, GAS, and
+ such). So I’ve been trying to be more appreciative of what I already have
+ and such.</p>
+ <p>But these blogs are nice, and often keep in the know about my hobbies
+ and can react to anything meaningful that’s being released. A good video
+ sorta on this topic was by Adam Neely(<a rel=
+ "external noopener noreferrer"
+ target="_blank"
+ href="https://www.youtube.com/v/mHoljbkyAEs">Adam Neely - How In-Ear
+ Monitors are Making Better Musicians</a>), and how his band spend
+ $6000 on gear for their tour, but what it did was eliminate stress and
+ enable them to more easily fine tune and control how they monitor
+ their live performance. He touches on the fact that gear videos feed
+ into the consumerist mindset of music making, but gear is often
+ necessary to facilitate certain things, and setting up a portable
+ in-ear-monitor rig for their entire band is well… unavoidable. It’s
+ just a minor aside in a much deeper video about IEMs and touring and
+ FEEL. And quite the departure from his usual music education content.
+ But it sums up the main thesis of my consumerism gemlog quite nicely I
+ feel (or at least I am projecting my thoughts into a brief aside he
+ makes).</p>
+ <h2>tt-rss - in retrospect</h2>
+ <p>So tt-rss is <em>fine</em> honestly, I think I need to setup a better
+ theme, something that has a bit more contrast. I don’t REALLY read in it,
+ I just use it as the aggregator and then open the links directly. I don’t
+ mind the way it renders the full articles with images, but I do mind how
+ GREY it is by default (in “night” theme). It looks totally customizable
+ and I bet I can download a decent theme for it if I look. But I may spend
+ some time doing that and try and read more in application.</p>
+ <p>But other than that it’s been quite the improvement over my internet
+ experience. More RSS!!</p>
+ <h2>Conclusion</h2>
+ <p>I need more feeds, as I do enjoy reading. So I’m always on the look
+ out. I hate to throw in engagement-y things like “let me know” stuff but
+ I am genuinely looking for interesting suggestions for stuff you might
+ subscribe to over RSS. Even if it’s just “this is my webblog” :) I always
+ like reading people’s things. I should troll the aggregators and look at
+ folks capsule landings to see what is linked!</p>
+ <p>Anyway, you should look into getting an RSS aggregator setup. It’s
+ been really impactful on cutting down on internet scrolling and
+ mindlessness.</p>
+ </article>
+
diff --git a/posts/tracks.html b/posts/tracks.html
new file mode 100644
index 0000000..ea9caa3
--- /dev/null
+++ b/posts/tracks.html
@@ -0,0 +1,191 @@
+--post-date: STATIC
+--updated-at: 2024-03-01
+--type: music
+--tags: music
+--path: /music/
+--pinned: true
+<article>
+ <h1>Tracks</h1>
+ <h2>Assorted Tracks</h2>
+ <p>Sometimes web playback doesn&#39;t work in apps so I don&#39;t really
+ have a good place to show my music to people… so this is it!</p>
+ <p>These are all just scratch recordings I made for myself. Some tracks
+ are accompanied with text. Others are not. They&#39;re all instrumental
+ and most are also mostly improvised.</p>
+ <h3>Untitled No°1</h3>
+ <figure>
+ <figcaption>
+ <details>
+ <summary>
+ Poem (CW: suicide)
+ </summary>
+ <pre>
+I step into the ocean.
+An unending blue, a scene serene.
+I hear nothing but the waves.
+
+I walk in deeper.
+The cold water tickles my chest.
+I put my head beneath the water.
+I scream.
+
+I stand back up.
+Water runs down my face.
+I can&#39;t tell which are tears.
+
+The world looks the same outside.
+Everyone standing, playing, happy.
+The pain is still here.
+And I struggle what to do.
+ </pre>
+ </details>
+ </figcaption><audio controls=""
+ src="./audio/untitled-1.mp3"><a href=
+ "./audio/untitled-1.mp3">Download Track</a></audio>
+ </figure>
+ <h3>Unspoken</h3>
+ <figure>
+ <figcaption>
+ <details>
+ <summary>
+ Poem
+ </summary>
+ <pre>
+My fingers say what words cannot
+Chords I play when I&#39;m distraught
+A heart that aches
+A hearts that&#39;s broken
+Say the words that are unspoken
+ </pre>
+ </details>
+ </figcaption><audio controls=""
+ src="./audio/unspoken.mp3"><a href=
+ "./audio/unspoken.mp3">Download Track</a></audio>
+ </figure>
+ <h3>Terraforming Spring</h3>
+ <figure>
+ <figcaption>
+ <details>
+ <summary>
+ Track Details
+ </summary>
+ <p>This track was a lot of fun. I was still early days at the drum
+ machine so its got very little variation in velocity and stock
+ samples… but I think it adds enough color to the track. The panning
+ tremolo effect was added in the DAW but the rest is all recorded
+ from my DigiTakt (drums), Alesis Micron (pads), Behringer Model D
+ (bassline), and my Fender Stratocaster (guitar). When recording the
+ guitar I put my vocal microphone up to the strings to capture the
+ raw sound as well which I mixed in along side the clean guitar. It
+ gave it this twang that it was missing. I also used some EQs all
+ around in my DAW to help things sit better.</p>
+ </details>
+ </figcaption><audio controls=""
+ src="./audio/terraforming-spring.mp3"><a href=
+ "./audio/terraforming-spring.mp3">Download Track</a></audio>
+ </figure>
+ <h2>Collab Tracks</h2>
+ <p>I participate in a Discord group from <a href=
+ "https://www.patreon.com/jayhosking"
+ rel="external noopener noreferrer"
+ target="_blank">Jay Hosking&#39;s Patreon</a>. <a href=
+ "https://www.youtube.com/c/jayhosking"
+ rel="external noopener noreferrer"
+ target="_blank">His YouTube channel</a> is great and he makes a lot of
+ hardware and some in the box synth music! Please check it out! About
+ twice a year or so he runs a collaboration community event and we all
+ make tracks and then he streams them and collects them into a Bandcamp
+ release. Each of the tracks in this section will defer their copyright
+ to whatever is stated on bandcamp. Every release was for charity.</p>
+ <p>I seriously recommend listening to the rest of the tracks on the
+ album! They&#39;re always so fun! So many talented musicians contribute
+ and collaborate!</p>
+ <h3>As tears snuff the embers, I scream</h3>
+ <figure>
+ <figcaption>
+ <details>
+ <summary>
+ Track details
+ </summary>
+ <pre>
+track name: as tears snuff the embers, I scream
+artist: senders
+featuring: Jay Hosking
+
+instruments: baritone guitar, model d
+provided samples: Ambient wash 1, Ambient wash 2
+
+-- song notes
+
+this year has been the hardest year of my entire life.
+this song is all of my pain, regret, and sadness.
+
+thank you all for listening.
+
+-- warning
+
+i kick the gain on after a quiet part around 3:07.
+the volume is normalized, but it can be surprising.
+ </pre>
+ </details><a href=
+ "https://friendsofjayhosking.bandcamp.com/track/senders-feat-jay-hosking-as-tears-snuff-the-embers-i-scream"
+ rel="external noopener noreferrer"
+ target="_blank">Bandcamp - Song Link</a> and <a href=
+ "https://friendsofjayhosking.bandcamp.com/album/volume-4-the-ship-of-theseus"
+ rel="external noopener noreferrer"
+ target="_blank">Bandcamp - Album Link</a>
+ </figcaption><audio controls=""
+ src="./audio/as-tears-snuff-the-embers-i-scream.mp3"><a href=
+ "./audio/as-tears-snuff-the-embers-i-scream.mp3">Download
+ Track</a></audio>
+ </figure>
+ <h3>In Session</h3>
+ <figure>
+ <figcaption>
+ <details>
+ <summary>
+ Track details
+ </summary>
+ <p>This was a really fun one. I stumbled into this idea. Basically
+ a Maggot Brain style fuzz guitar solo with the samples providing
+ basically the backing track. It was a lot of fun. Fully
+ improvised.</p>
+ </details><a href=
+ "https://friendsofjayhosking.bandcamp.com/track/senders-feat-luis-alves-in-session"
+ rel="external noopener noreferrer"
+ target="_blank">Bandcamp - Song Link</a> and <a href=
+ "https://friendsofjayhosking.bandcamp.com/album/volume-3-the-meantime"
+ rel="external noopener noreferrer"
+ target="_blank">Bandcamp - Album Link</a>
+ </figcaption><audio controls=""
+ src="./audio/in-session.mp3"><a href=
+ "./audio/in-session.mp3">Download Track</a></audio>
+ </figure>
+ <h3>Ancient Signals (Intermission)</h3>
+ <figure>
+ <figcaption>
+ <details>
+ <summary>
+ Track details
+ </summary>
+ <p>There isn&#39;t much to add with this one. I recorded the pads
+ using the <a rel="external noreferrer noopener"
+ target="_blank"
+ href="https://conductivelabs.com/ndlr/">Conductive Labs
+ NDLR</a>. Which formed some just amazing chords. I used some
+ samples from my collab partner in the opening and end and as a
+ base for the entire track ­ it&#39;s mostly just like noise and
+ things like that. It&#39;s subtle in the final mix.</p>
+ </details><a href=
+ "https://friendsofjayhosking.bandcamp.com/track/senders-feat-this-valve-controls-ancient-signals-intermission"
+ rel="external noopener noreferrer"
+ target="_blank">Bandcamp - Song Link</a> and <a href=
+ "https://friendsofjayhosking.bandcamp.com/album/volume-2-sonder"
+ rel="external noopener noreferrer"
+ target="_blank">Bandcamp - Album Link</a>
+ </figcaption><audio controls=""
+ src="./audio/ancient-signals-intermission.mp3"><a href=
+ "./audio/ancient-signals-intermission.mp3">Download
+ Track</a></audio>
+ </figure>
+</article>
diff --git a/posts/venturing-back-into-c.html b/posts/venturing-back-into-c.html
new file mode 100644
index 0000000..16e3047
--- /dev/null
+++ b/posts/venturing-back-into-c.html
@@ -0,0 +1,153 @@
+
+--post-date: 2019-02-17
+--type: blog
+ <article>
+ <h1>Venturing back into C</h1>
+ <p>For the past two weeks or so I have been diving back into C
+ programming. I&#39;ve found it to be a very fun and refreshing experience
+ coming off of a slog of Java 11 updates at work. I&#39;ve found comfort
+ in its simplicity and frustrations in my &quot;I can do this without an
+ IDE&quot; mindset.</p>
+ <p>I started C programming in College during a 8 AM course of which all I
+ can remember is that it was at 8 AM. I loved programming in C, dealing
+ with memory, pointers, no strings, structs, no strings, linking, no
+ strings. It was a really interesting difference from the web and Java
+ programming I had done previously. Obviously the lack of the
+ &quot;string&quot; type made things interesting and initially a challenge
+ for me back then. In my most recent endevour I found <code class=
+ 'inline'>char *</code> to be perfectly suitable for every case I came
+ across. It was usually a separate library that was failing me, not a
+ fixed char array. This was mostly due to the types of programs I was
+ writting in college were text adventures where all of what I did was
+ using strings. And my lack of understanding of what was actually
+ happening in C was really what was causing all the issues.</p>
+ <h2>The Project</h2>
+ <p>I started working on an application I had been meaning to develop
+ called <a href=
+ 'https://github.com/s3nd3r5/reminder'><b>reminder.d</b></a>. This daemon
+ would monitor for reminder notifications I would send via a CLI. It queue
+ them up based on some time set to send the notification. I ended up
+ writing both the CLI and the daemon in this past week, both in C.</p>
+ <h3>The Beginning</h3>
+ <p>This project started with an outline (as a README) which I think was
+ the reason this ended up as an actually successful project. I had been
+ thinking about this for a long time, and had begun using a calendar to
+ keep track of long term reminders/dates etc. First, I outlined the
+ architecture &quot;how would I actually do want to send myself
+ remidners&quot;. Since half my day is spent infront of a computer, with a
+ terminal open or at least two keystrokes away, a CLI would do the trick.
+ Then how do I actually send myself notifications... writing them down. So
+ I can use the CLI to write to a file and have a daemon pick up the
+ changes and notify me once it hits the desired time posted.</p>
+ <h3>The CLI</h3>
+ <p>The CLI <b>remindme</b> took in messages and appened them to a file.
+ This file would be monitored by the daemon later on. Each reminder
+ consisted of three parts:</p>
+ <ul>
+ <li><i>Message</i> - The body of the notification.</li>
+ <li><i>Time</i> - This is either a datetime or a period for when the
+ notification should send.</li>
+ <li><i>Flag</i> - The Flag was set by the CLI when written to the file,
+ this marks the status of the reminder</li>
+ </ul>After a notification is written the daemon will pick up the
+ notification and notify if the time set is now/past.
+ <h3>The Daemon</h3>
+ <p>The Daemon <b>reminder-daemon</b> opened and tailed a file at
+ <i>/usr/local/etc/reminder.d/$USER.list</i>. It would tail the file
+ monitoring any incoming lines parsing them into reminders. The syntax of
+ the reminder is <code class='inline'>FLAG EPOCHSEC MESSAGE</code> .
+ Tokenizing on spaces it was then added to a linked-list sorted by time.
+ Every second it checks the file for any new lines, adding reminders as
+ they come in, then check the head of the list. If the reminder at the
+ head is ready to be notified the daemon pops it off the list and sends
+ the notification. After a notification is sent successfully the daemon
+ modifies that line in file updating its <code class='inline'>FLAG</code>
+ to &#39;d&#39;. This is so when the daemon starts back up it skips the
+ reminder. Notifications are sent via <i>libnotify</i>: <code class=
+ 'inline'>Reminder - $DATETIME</code> with the message body. They are also
+ set to last until dismissed manually, this way if were to walk away, once
+ I sat down I&#39;d see the stale reminder waiting.</p>
+ <h3>Future Plans for Reminder.d</h3>
+ <p>Having a system to create and send myself notifications is incredibly
+ useful but having them limit to just the computer I sent them on makes
+ them a very limited. I have been using them at work for the last few days
+ and its nice to be able to tell myself to remeber to email a person after
+ lunch. But I would like to be able to tell myself things later in the
+ day. I have planned since the beginning to have a remote server I can
+ sync the reminders through. In addition having an application running on
+ my phone that also gets and sets reminders.</p>
+ <p>Remote syncing would change entirely how I deal with reminders in the
+ file.</p>
+ <pre>
+<code>
+ struct remnode {
+ long fileptr;
+ struct reminder* reminder;
+ struct remnode* next;
+ };
+ </code></pre>
+ <p>Is currently the struct I use to keep track of the reminders.
+ <code class='inline'>fileptr</code> is the line of the file where the
+ reminder is, so I can <code class='inline'>fseek</code> back to the
+ location and overwrite its flag. I cannot currently think of a way to
+ keep the files perfectly identical without introducing countless
+ edgecases. What I do think might work is providing some form of UUID.
+ When a remote pull tells the systems daemon that a notification has been
+ cleared it can mark it by ID. Right now the fileptr is effectively its
+ ID, but that will not work anymore. A composite key of the daemons own id
+ (generated at install?) with a new ID of each incoming message would help
+ ensure uniqueness across ID generations across multiple systems.</p>
+ <h2>What I&#39;ve learned</h2>
+ <p>First off, I probably could&#39;ve done this in bash. With
+ <code class='inline'>date notify-send git awk cron</code> and a few other
+ useful commands I could very easily keep track of file changes and push
+ notifications at a certain time. But seeing as I scrap together bash
+ scripts all the time I though C would make things more fun.</p>
+ <p>Writing manpages was the probably the most fun I had working on the
+ project. They have a simple elegance to them, similar to C. That being
+ said you could FEEL the age of the language. Every single decision is
+ there to make things simple to parse. Even compared to modern markup the
+ explicit direct nature of the language made it so easy to learn. Every
+ tag served a specific purpose and each objective I had had a flag to do
+ it.</p>
+ <pre><code>
+.TH REMINDME 1
+.SH NAME
+ remindme \- Send yourself reminders at a specific time on one or more devices
+.SH SYNOPSIS
+.B remindme
+[\fB\-t\fR \fITIME\fR]
+[\fB\-\-at \fITIME\fR]
+[\fB\-i\fR \fIPERIOD\fR]
+[\fB\-\-in\fR \fIPERIOD\fR]
+ </code>
+ </pre>
+ <p>Libnotify was insanely easy to work with, from a programming
+ perspective.</p>
+ <pre><code>
+ NotifyNotification *notif = notify_notification_new(title, rem-&gt;message, &quot;info&quot;);
+ notify_notification_set_app_name(notif, APP_NAME);
+ notify_notification_set_timeout(notif, NOTIFY_EXPIRES_NEVER);
+
+ GError* error = NULL;
+ gboolean shown = notify_notification_show(notif, &amp;error);
+ </code>
+ </pre>
+ <h2>In closing</h2>
+ <p>Overall, this was an extremely fun first week of engineering. I look
+ forward to what I am able to do syncing and sending notifications on
+ android.</p>
+ <p>For the zero people reading, grab a beer and outline your project.
+ Full through. Think about the how, then write it down. Don&#39;t worry
+ about getting in the weeds of how to write a manfile, thats what is fun
+ about programming. I thought I botched my debian/sid environment
+ uninstalling and reinstalling a notification daemon. Infact I think its
+ caused me to take a stance on the whole systemd thing. Either way, start
+ a private repo (they&#39;re free now) write a README and a LICENSE file
+ and iterate on the README until you realize &quot;oh shit this is
+ something I can do&quot;. Then do it. This project still needs some work,
+ but for an MVP, its actually done. And now I can dive in the deep end of
+ trying to actually make it easy to setup on a fresh PC. Or dive into
+ modern android development and server syncing...</p>
+ </article>
+
diff --git a/res/audio/ancient-signals-intermission.mp3 b/res/audio/ancient-signals-intermission.mp3
new file mode 100644
index 0000000..5798d46
--- /dev/null
+++ b/res/audio/ancient-signals-intermission.mp3
Binary files differ
diff --git a/res/audio/as-tears-snuff-the-embers-i-scream.mp3 b/res/audio/as-tears-snuff-the-embers-i-scream.mp3
new file mode 100644
index 0000000..85fd10c
--- /dev/null
+++ b/res/audio/as-tears-snuff-the-embers-i-scream.mp3
Binary files differ
diff --git a/res/audio/in-session.mp3 b/res/audio/in-session.mp3
new file mode 100644
index 0000000..59e472a
--- /dev/null
+++ b/res/audio/in-session.mp3
Binary files differ
diff --git a/res/audio/terraforming-spring.mp3 b/res/audio/terraforming-spring.mp3
new file mode 100644
index 0000000..b8e342d
--- /dev/null
+++ b/res/audio/terraforming-spring.mp3
Binary files differ
diff --git a/res/audio/unspoken.mp3 b/res/audio/unspoken.mp3
new file mode 100644
index 0000000..1437cbf
--- /dev/null
+++ b/res/audio/unspoken.mp3
Binary files differ
diff --git a/res/audio/untitled-1.mp3 b/res/audio/untitled-1.mp3
new file mode 100644
index 0000000..f5f7673
--- /dev/null
+++ b/res/audio/untitled-1.mp3
Binary files differ
diff --git a/templates/feed.rss b/templates/feed.rss
new file mode 100644
index 0000000..f5d788b
--- /dev/null
+++ b/templates/feed.rss
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<rss version="2.0">
+<channel>
+ <title>senders.io - blog</title>
+ <description>senders.io's blog feed</description>
+ <link>https://www.senders.io/</link>
+ <copyright>{YEAR} senders dot io - CC BY-SA 4.0</copyright>
+ <language>en-US</language>
+ <ttl>60</ttl>
+ <lastBuildDate>{BUILDDATE}</lastBuildDate>
+ <pubDate>{BUILDDATE}</pubDate>
+ {ITEMS}
+</channel>
+</rss>
diff --git a/_templates/index.css b/templates/index.css
index eb1340b..cb26dbd 100644
--- a/_templates/index.css
+++ b/templates/index.css
@@ -1,25 +1,28 @@
-/*:root {
- --bg-color: #A1EEBD;
- --site-header-color: #7BD3EA;
- --main-bg-color: #fff;
- --border-color: #F6D6D6;
- --main-width: 800px;
-}*/
:root {
--blue: #7BD3EA;
--green: #A1EEBD;
--pink: #F6D6D6;
--bg-color: #ffffeb;
+ --color: black;
--code-color: white;
+ --quote-color: #aaa;
+ --quote-text: black;
+ --footer-text: black;
--border-color: var(--pink);
--article-border-color: var(--green);
--article-border-outset-color: var(--blue);
--main-width: 800px;
+
}
+/* #261c35 # darkmode bg-color */
+/* #ffa # links */
+/* #3E7 or this? */
+/* #3C0E6A as a "pink" alternative for dark mode? */
html, body {
margin: 0;
background-color: var(--bg-color);
+ color: var(--color);
}
/* NAV */
@@ -38,10 +41,6 @@ html, body {
font-family: monospace;
}
-#cursor {
- color: #444;
-}
-
nav {
margin: 4px 0;
}
@@ -73,8 +72,22 @@ main footer {
background-color: var(--pink);
margin: 16px 0;
padding: 2px 16px;
+ color: var(--footer-text);
}
+main footer ul {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+}
+
+main footer ul li {
+ display: inline;
+}
+
+main footer ul li:not(:first-child) {
+ padding-left: 16px;
+}
footer {
font-size: .8em;
@@ -88,3 +101,40 @@ pre, code {
background-color: var(--code-color);
padding: 4px 16px;
}
+
+main article figure blockquote {
+ padding: 8px;
+ background-color: var(--pink);
+ box-shadow: 8px 8px var(--blue);
+ color: var(--quote-text);
+}
+
+main article figure blockquote p:before {
+ content: '“';
+ font-size: 2em;
+ color: var(--quote-color);
+}
+
+main article figure blockquote p:after {
+ content: '”';
+ font-size: 2em;
+ color: var(--quote-color);
+}
+
+main article figure blockquote cite {
+ display: block;
+ text-align: right;
+}
+
+#pinned {
+ list-style: none;
+}
+
+#pinned li::marker {
+ content: "📌 ";
+}
+
+hr {
+ border-color: var(--pink);
+ border-style: solid;
+}
diff --git a/_templates/page.html b/templates/page.html
index 7f20b43..1260999 100644
--- a/_templates/page.html
+++ b/templates/page.html
@@ -26,14 +26,17 @@
href="https://tech.lgbt/@senders">
fedi
</a>
+ <a href="/blog/feed.rss">rss</a>
</nav>
</header>
<main>
{CONTENT}
<footer>
- Posted: <time datetime="{POST_DATE_ISO}">{POST_DATE_DISP}</time>
- {UPDATED}
- {TAGS}
+ <ul class="page_footer">
+ {POST_DATE}
+ {UPDATED}
+ {TAGS}
+ </ul>
</footer>
</main>
<footer>
diff --git a/templates/rss-item.xml b/templates/rss-item.xml
new file mode 100644
index 0000000..8ddc90d
--- /dev/null
+++ b/templates/rss-item.xml
@@ -0,0 +1,11 @@
+ <item>
+ <title>{TITLE}</title>
+ <link>https://www.senders.io{LINK}</link>
+ <guid isPermaLink="true">https://www.senders.io{LINK}</guid>
+ <pubDate>{PUBDATE}</pubDate>
+ <description>
+ <![CDATA[
+ {CONTENT}
+ ]]>
+ </description>
+ </item>