From b5b85066bc8bfa6db6eaa33e3f14c0eaafafe5af Mon Sep 17 00:00:00 2001 From: Bill Date: Sat, 31 Dec 2022 21:14:51 -0500 Subject: RSS Blog and Generate RSS Feed! --- www/blog/feed.rss | 1583 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1583 insertions(+) create mode 100644 www/blog/feed.rss (limited to 'www/blog/feed.rss') diff --git a/www/blog/feed.rss b/www/blog/feed.rss new file mode 100644 index 0000000..f41185e --- /dev/null +++ b/www/blog/feed.rss @@ -0,0 +1,1583 @@ + + + + senders.io - Blog + senders.io's blog feed + https://www.senders.io/ + 2023 senders dot io - CC BY-SA 4.0 + en-US + 60 + Sat, 31 Dec 2022 20:55:34 -0500 + Sat, 31 Dec 2022 00:00:00 -0500 + + RSS - A Follow-up + https://www.senders.io/blog/2022-12-31/ + https://www.senders.io/blog/2022-12-31/index.html + Sat, 31 Dec 2022 00:00:00 -0500 + + +

RSS - A Follow-up

+

Get an RSS reader and connect everything to it!

+

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.

+
+

this blogpost is originally posted to my gemini gemlog: gemini://senders.io/gemlog/2022-12-31-rss-a-follow-up.gmi + 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.

+
+

Recap

+

So I am using https://tt-rss.org/ 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.

+

How I’ve been using it

+

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 + <3

+

Blogs

+

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.

+

If you’re interested the two main ones I am reading right now are:

+
    +
  1. + Erin In The Morn + (substack) +
  2. +
  3. + Selfaware Soup +
  4. +
+

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.

+

Podcasts

+

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 need 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:

+
    +
  1. + The Pen Addict Podcast + (relay.fm) +
  2. +
  3. + Cortex Podcast (relay.fm) +
  4. +
+

And currently off-season:

+ +

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.

+

While writing this section I added:

+ +

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)

+

Tech News

+

Right now I follow two main news sources in tech:

+
    +
  1. + debian.org/news +
  2. +
  3. + LWN.net +
  4. +
+

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.

+

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.

+

LWN has some links in their weekly editions for other news feeds I + might consider directly subscribing too, but for now I have these.

+

Music News

+

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.

+

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: raisedbyswans.com 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!

+

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.

+

YouTube

+

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.

+

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 occasionally 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!

+

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:

+
https://www.youtube.com/feeds/videos.xml?channel_id={ID}
+
+

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:

+
ytInitialData.metadata.channelMetadataRenderer.externalId
+
+

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.

+

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.

+

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.

+

Hobby

+

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 entirely fountain pen + related (Who'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.

+

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(Adam Neely - How In-Ear + Monitors are Making Better Musicians), 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).

+

tt-rss - in retrospect

+

So tt-rss is fine 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.

+

But other than that it’s been quite the improvement over my internet + experience. More RSS!!

+

Conclusion

+

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!

+

Anyway, you should look into getting an RSS aggregator setup. It’s + been really impactful on cutting down on internet scrolling and + mindlessness.

+ + ]]> +
+
+ + RSS - A Follow-up + https://www.senders.io/blog/2022-12-31/ + https://www.senders.io/blog/2022-12-31/index.html + Sat, 31 Dec 2022 00:00:00 -0500 + + +

RSS - A Follow-up

+

Get an RSS reader and connect everything to it!

+

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.

+
+

this blogpost is originally posted to my gemini gemlog: + gemini://senders.io/gemlog/2022-12-31-rss-a-follow-up.gmi 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.

+
+

Recap

+

So I am using https://tt-rss.org/ 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.

+

How I’ve been using it

+

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 + <3

+

Blogs

+

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.

+

If you’re interested the two main ones I am reading right now are:

+
    +
  1. + Erin In The Morn + (substack) +
  2. +
  3. + Selfaware Soup +
  4. +
+

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.

+

Podcasts

+

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 need 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:

+
    +
  1. + The Pen Addict Podcast + (relay.fm) +
  2. +
  3. + Cortex Podcast (relay.fm) +
  4. +
+

And currently off-season:

+ +

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.

+

While writing this section I added:

+ +

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)

+

Tech News

+

Right now I follow two main news sources in tech:

+
    +
  1. + debian.org/news +
  2. +
  3. + LWN.net +
  4. +
+

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.

+

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.

+

LWN has some links in their weekly editions for other news feeds I + might consider directly subscribing too, but for now I have these.

+

Music News

+

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.

+

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: raisedbyswans.com 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!

+

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.

+

YouTube

+

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.

+

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 occasionally 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!

+

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:

+
https://www.youtube.com/feeds/videos.xml?channel_id={ID}
+
+

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:

+
ytInitialData.metadata.channelMetadataRenderer.externalId
+
+

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.

+

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.

+

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.

+

Hobby

+

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 entirely fountain pen + related (Who'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.

+

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(Adam Neely - How In-Ear + Monitors are Making Better Musicians), 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).

+

tt-rss - in retrospect

+

So tt-rss is fine 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.

+

But other than that it’s been quite the improvement over my internet + experience. More RSS!!

+

Conclusion

+

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!

+

Anyway, you should look into getting an RSS aggregator setup. It’s + been really impactful on cutting down on internet scrolling and + mindlessness.

+ + ]]> +
+
+ + CSS Themes Exist Now!? + https://www.senders.io/blog/2022-12-05/ + https://www.senders.io/blog/2022-12-05/index.html + Mon, 05 Dec 2022 00:00:00 -0500 + + +

CSS Themes Exist Now!?

+

Yeah news to me too! Seems like according to + the MDN it’s been supported since 2019 for most browsers and + supported by all by now.

+

This is so wild!

+

Why is this cool?

+

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.

+

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.

+

Still no JS!

+

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.

+

I try to keep that, not only for my sake, but for your sake too - a + javascript free blog means the priority is reading.

+

Examples

+

So I achieve darkmode in this blog by doing the following:

+
/* 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;
+  }
+}
+
+

Essentially, I leverage + CSS Variables to define the specific areas I set theme specific + colors (my nav bar is static regardless of dark/light mode for + example).

+

Then if the media preference is dark - I overwrite the variables with + my dark mode values!

+

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.

+

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.

+

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.

+

Toggling Themes

+

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.

+

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!

+

Conclusion

+

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!

+ + + ]]> +
+
+ + My Markdown -> HTML Setup + https://www.senders.io/blog/2022-11-06/ + https://www.senders.io/blog/2022-11-06/index.html + Sun, 06 Nov 2022 00:00:00 -0400 + + +

My Markdown -> HTML Setup

+

A common way I see a lot of people blog, especially micro-blog, is in + markdown.

+
+
+

Markdown is a lightweight markup language for creating formatted + text using a plain-text editor.

+
+
+ Wikipedia | + Markdown +
+
+

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.

+

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.

+

Writing HTML by hand

+

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.

+

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.

+

I briefly touched on my design process in 2019-01-21 - First! A New Years Resolution + 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.

+

This article is making the process sound far more difficult than it is + – it’s mostly just tedious.

+
<article>
+<h2> Title </h2>
+<p>
+   Some paragraph....
+</p>
+<h3>
+<p> some subsection </p>
+</h3>
+<p> more text </p>
+... etc
+
+

Is essentially what the website looks like - you can view the source + of this page to see – it’s very simple HTML.

+

The benefit I found doing this, mostly leveraging tidy, 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.

+

Only for certain areas (tables, code, quotes) where readability is an + issue do I setup custom CSS.

+

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.

+

Micro-blogging in general

+

At the time of writing this, I have no ported over any of my Gemini 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.

+

Gemtext

+

Gemtext + 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.

+

It’s syntax contained most of what I was actually using here already + from HTML:

+
    +
  1. headings
  2. +
  3. paragraphs that were wrapped based on page-width
  4. +
  5. links
  6. +
  7. lists
  8. +
  9. quotes
  10. +
  11. preformatted-text / codeblocks
  12. +
+

Besides links - it also leveraged the same common syntaxes that + markdown did.

+

Gemtext links

+

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.

+
+
+

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.

+
+
+ — gemini.circumlunar.space + – A quick introduction to “gemtext” markup | Links +
+
+

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 implemented my + own gemini server.

+

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.

+

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!

+

Wasn’t this about Markdown?

+

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!

+

How I use Markdown

+

Firstly, this blogpost was written in Markdown (with minimal HTML + sprinkled in). Then I render the markdown into HTML using Discount. + 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.

+

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.

+

Customizations

+

After I generated the output file, I replaced some placeholders in the + templates via sed and then tidy’d the HTML. The + only other major issue was Discount had no way of appending any link + attributes – so for external links I had sed append the + rel and target attributes - which work off the + assumption they’re not there. A lot of my home-server scripts rely on + assumptions…

+

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.

+

Two Sources of Truth

+

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.

+

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.

+

Learnings

+

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 tidy’d the HTML file - it became + frustrating to edit, and I didn’t always re-tidy it. Because the output + is always tidy’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.

+

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.

+ + ]]> +
+
+ + Manjaro Followup - Breaking things! + https://www.senders.io/blog/2021-01-05/ + https://www.senders.io/blog/2021-01-05/index.html + Tue, 05 Jan 2021 00:00:00 -0500 + + +

Manjaro Follow-up - Breaking things!

+

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.

+

Recap

+

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've been pretty happy. But then I + started breaking things.

+

Break stuff

+

I broke my Manjaro by updating my Debian (apparently). To be honest + this is the one part I don't fully understand why it happened. + From what I could find online I didn'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've used my + server which runs Debian/Stable). But considering I hadn't had any + need to boot back into Debian I decided to just get rid of it!

+

GParted, Grub, Gotchas!

+

I went in knowing I'd have to fix my Grub since I'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:

+
    +
  • Create a GParted Live USB
  • +
  • Launch GParted reconfigure my partitions
  • +
  • Open the terminal in the live USB and reinstall Grub
  • +
The 3rd point being a bit of a "rest of the owl" I + wasn't sure what to expect. GParted thankfully warns you + "you're probably going to break stuff see our FAQ" which + had a section on reinstalling grub. Reading that the 3rd part became: +
    +
  • mount the linux OS
  • +
  • bind the live dirs that are needed: /dir /sys + /proc
  • +
  • chroot into the mounted folder
  • +
  • run grub-install <device>
  • +
But what I failed to realize (stupidly in hindsight) was the + "device" is the Master Boot Record (MBR) device. So in my case + Windows or /dev/sdb. I had assumed it was the + device of the linux install so I tried that and got notified my EFI boot + directory didn't look like an EFI partition... and from here it was + rabbit holes. +

Where is my EFI partition?

+

I have a fairly old Windows 7 install that has been upgraded to + Windows 10 during this whole journey. I'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 /boot/efi 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:

+
    +
  • Creating a 200MB Fat32 Boot partition
  • +
  • Mounting that as my efi-directory
  • +
  • Reinstalling grub (again on my Linux device)
  • +
  • Eventually getting it to boot straight into Manjaro
  • +
  • Modifying my /etc/fstab to mount my + boot/efi to the new partition (oops)
  • +
  • Repeating the above steps 5 times hoping something would be + different
  • +
  • Eventually finding in a forum that grub should be on the + MBR...
  • +
+

The Fix and Final Steps

+

The fix was to basically follow the steps above but use the MBR:

+
    +
  • Boot GParted Live USB
  • +
  • Properly configure any partitions (this case delete the + "EFI" partition)
  • +
  • Mount the linux device
  • +
  • Bind the necessary live dirs to the linux mount
  • +
  • Run grub-install to the MBR device
  • +
  • Reboot
  • +
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? +

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'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).

+

Conclusion

+

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.

+ + ]]> +
+
+ + Manjaro Experiment + https://www.senders.io/blog/2020-12-17/ + https://www.senders.io/blog/2020-12-17/index.html + Thu, 17 Dec 2020 00:00:00 -0500 + + +

Manjaro Experiment

+

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:

+
    +
  • It's not Debian based (it's arch btw /s)
  • +
  • It's still on Systemd so I won't lose that familiarity
  • +
  • For gaming it comes with pretty up to date drivers and setup for + running Steam games
  • +
  • It has a KDE installation which is what I wanted to run
  • +
+

Why "not Debian"

+

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't been a particular issue, but sometimes there are version + conflicts and other just nuisances and no real easy 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!

+

i3

+

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've gone with another Debian base running + a proper desktop environment + window manager I figured that'd be + boring and I'd just be trying out the programs and not the Linux, + which is half the fun.

+

That being said. i3 is Linux for me. Being able to just move + between windows with a macro and every bit of it just being intutive + (after you've learned!) is a productivity booster. Which is why I + still use it on my work machine, and can't see myself ever switching + off.

+

KDE

+

I've used Gnome and XFCE as desktop environments before, and + they're fine, but I've always like the customability, + flexibility, and polished look of KDE.

+

Setting up KDE for an i3 addict

+

By default KDE isn't really too hard to "get used to" + since it feels like any other OS, especially a windows setup. But the + main thing I needed to change is the meta+<key> commands.

+
    +
  • Remapping the Virtual Desktop changes
  • +
  • Remapping the KWin window focuses
  • +
  • Remapping the KWin move to desktop
  • +
  • Installing DMenu
  • +
  • Shrinking the "start bar" panel
  • +
  • Removing Pager
  • +
  • Changing Task Manger to Window List
  • +
  • Configuring Desktop Layout to "Desktop" (this removes the + icons)
  • +
Doing this helped make me feel at home so far, and not have to + retrain my brain. +

Some of the key remappings

+

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. Switch to desktop N setting this as meta+<N> where N is the dekstop 1-10 (0). Switch + to Window to the Left/Right/Up/Down This was one I was nervous + wouldn't exist as a keybind. But What was meta+alt+<dir> 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. Quit + Window with meta+shift+Q, Tile + Window command to use the Shift key rather, especially as + meta+<dir> was overwritten by the focus + switching.

+

Manjaro

+

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.

+

Gaming

+

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.

+

Proton + Steam

+

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'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 Proton Ge + Custom 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't actually too bad, but in windowed + or borderless it stutters and drops frames.

+

Other issues

+

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.

+

Conclusion

+

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.

+

Update!

+

NTFS mounting

+

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: UUID=<drive-id> + /mount/path ntfs + uid=1000,gid=1000,rw,user,exec,async,locale=en_US.utf8,umask=000 0 + 0 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.

+

i3 Compatibility

+

As I spend more time using the OS I made a few more adjustments:

+
    +
  • Removed everything except the Clock and System Tray.
  • +
  • I added KRunner to meta+space to ease + running KDE specific programs that I can't be bothered to memorize + the name of
  • +
  • Back and forth on forcing "No border" 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'll + be sticking with the default.
  • +
  • On Manjaro at least: UNINSTALL mesa-demos! sudo pacman -R lib32mesa-demos mesa-demos This package + had the annoying "fire" demo which made dmenu opening firefox + a pain in the ass.
  • +
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 + meta+d vs just meta 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. + + ]]> +
+
+ + Bread Blog (First post) + https://www.senders.io/blog/bread/ + https://www.senders.io/blog/bread/index.html + Mon, 17 Feb 2020 00:00:00 -0500 + + +

Bread

+

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.

+

February 17, 2020

+

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

+

Boules

+

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).

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Pate Fermentee +
Item%
Flour (Bread)100%
Water (Room temp)70%
Yeast (Instant)0.55%
Salt10%
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. +

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't grab anymore/it wouldn'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.

+

This produces a nice, well risen boule with a golden brown crust.

+

I skipped the pate in my most recent bake and just did 100% (500g) + starting from "day 2". I also subtituted 100g with AP + flour.

+

Baguettes

+

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.

+

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.

+

Accidents

+

Baguette rolling is hard. And I need to let the dough rest longer + between each shape.

+

1000g for three ~15 inch baguettes is too much. I would do 750g next + time.

+

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.

+

I broke my oven light with my spray bottle. And I ruined my cast irons + seasoning usnig that for the boiling water.

+

What to do next time

+

Next french style boule, I want to do a pate again. As I've only + done it for one boule loaf. And I want to try making two loafs from + it.

+

Resources

+

Bake With Jack's Youtube + Channel really helped me shape up my shaping up. And the core of + the pate+french bread recipe is based on that from The + Bread Baker's Apprentice

+ + ]]> +
+
+ + remember/recall - what could’ve been a command line tool + https://www.senders.io/blog/2020-01-13/ + https://www.senders.io/blog/2020-01-13/index.html + Mon, 13 Jan 2020 00:00:00 -0500 + + +

remember/recall - what could've been a command line tool

+

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.

+

Look before you leap

+

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.

+

What went right

+

I actually ended up learning a lot during the development of the + (never finished) tool. I had never used getopts inside a + script before, which turned out to be extremely intuitive. That was all + that went right...

+

What went wrong

+

Literally, everything else that could've went wrong did. The + "project" was a single bash script roughly 160 lines long + before I found out it wouldn'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'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.

+

You can't access un-committed bash history

+

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'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.

+

Lesson learned

+

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're trying to do will work. + Because after building all of these fancy bells and whistles, if it + can't do the basics, there is no point.

+ + ]]> +
+
+ + Lisps, Assembly, C, and Conlangs + https://www.senders.io/blog/2019-12-09/ + https://www.senders.io/blog/2019-12-09/index.html + Mon, 09 Dec 2019 00:00:00 -0500 + + +

Lisps, Assembly, C, and Conlangs

+

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'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.

+

Racket, 80x86, and even more C

+

Racket

+

Racket is a general-purpose + lisp-like language. I had began messing around in it with the + intention of creating a similar language to Scribble a document + authoring language written in Racket. I made the classic mistake 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'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.

+

6502 -> 80x86 -> Commander X16

+

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, + The 8-Bit Guy made a video about + his 8 Bit computer project Commander X16 + 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.
+ Ben Eater also started a 6502 video series 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.

+

Never ending C

+

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: calc "+ + 1 1". To me this was far cleaner than writing: echo $((1+1)). 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.

+

Non Programming Writing

+

The project that soaked up a majority of my writing time, which sadly + should've been documented here, was my conlang / world-building + project "Tyur". 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 + The Horse the Wheel and Language 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 + The + Origins of Language: A Slim Guide 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 conlang. + My conlang is "Tyur" 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.

+

Closing

+

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.

+ + ]]> +
+
+ + Venturing back into C + https://www.senders.io/blog/2019-02-17/ + https://www.senders.io/blog/2019-02-17/index.html + Sun, 17 Feb 2019 00:00:00 -0500 + + +

Venturing back into C

+

For the past two weeks or so I have been diving back into C + programming. I've found it to be a very fun and refreshing experience + coming off of a slog of Java 11 updates at work. I've found comfort + in its simplicity and frustrations in my "I can do this without an + IDE" mindset.

+

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 + "string" type made things interesting and initially a challenge + for me back then. In my most recent endevour I found char * 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.

+

The Project

+

I started working on an application I had been meaning to develop + called reminder.d. 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.

+

The Beginning

+

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 "how would I actually do want to send myself + remidners". 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.

+

The CLI

+

The CLI remindme 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:

+
    +
  • Message - The body of the notification.
  • +
  • Time - This is either a datetime or a period for when the + notification should send.
  • +
  • Flag - The Flag was set by the CLI when written to the file, + this marks the status of the reminder
  • +
After a notification is written the daemon will pick up the + notification and notify if the time set is now/past. +

The Daemon

+

The Daemon reminder-daemon opened and tailed a file at + /usr/local/etc/reminder.d/$USER.list. It would tail the file + monitoring any incoming lines parsing them into reminders. The syntax of + the reminder is FLAG EPOCHSEC MESSAGE . + 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 FLAG + to 'd'. This is so when the daemon starts back up it skips the + reminder. Notifications are sent via libnotify: Reminder - $DATETIME 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'd see the stale reminder waiting.

+

Future Plans for Reminder.d

+

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.

+

Remote syncing would change entirely how I deal with reminders in the + file.

+
+
+ struct remnode { 
+   long fileptr; 
+   struct reminder* reminder; 
+   struct remnode* next; 
+ }; 
+      
+

Is currently the struct I use to keep track of the reminders. + fileptr is the line of the file where the + reminder is, so I can fseek 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.

+

What I've learned

+

First off, I probably could've done this in bash. With + date notify-send git awk cron 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.

+

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.

+

+.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]
+        
+      
+

Libnotify was insanely easy to work with, from a programming + perspective.

+

+  NotifyNotification *notif = notify_notification_new(title, rem->message, "info");
+  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, &error);
+        
+      
+

In closing

+

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.

+

For the zero people reading, grab a beer and outline your project. + Full through. Think about the how, then write it down. Don'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're free now) write a README and a LICENSE file + and iterate on the README until you realize "oh shit this is + something I can do". 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...

+ + ]]> +
+
+ + First! A New Years Resolution + https://www.senders.io/blog/2019-01-21/ + https://www.senders.io/blog/2019-01-21/index.html + Mon, 21 Jan 2019 00:00:00 -0500 + + +

First! A New Years Resolution

+

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.

+

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.

+

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

+

What can be expected here

+

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.

+

How often do I intend to update this blog

+

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

+

Designing my site

+

Designing this blog actually took way more time than it should have. + It began when I wanted to tackle a javascriptless 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 <pre> tag wrapping Java code with partial syntax + highlighting.Possibly mistaking highlight.js + usage documentation. But I would like to prevent having javascript on my + main website keeping it as simplistic as possible.

+

I test the site using both tidy and + nginx via docker. + Using tidy I can validate the html (making sure I didn'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're reading this and have anything + beyond a simple html file I recommend running docker + nginx over any + javascript server.

+

Then I deploy the site through s3-cli + Which is simple and to the point.

+

In Closing

+

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.

+ + ]]> +
+
+
+
-- cgit v1.2.3-54-g00ecf