From 4e5386354f2377efa226f5c6504f6f7c03eb4061 Mon Sep 17 00:00:00 2001 From: Eduardo Figueroa Date: Thu, 5 Feb 2026 15:45:40 -0800 Subject: [PATCH] Update blog posts: clean up formatting, fix typos, add new posts - FFB.md: Fix typos, normalize tags/categories to lowercase, replace *** with --- for horizontal rules, trim trailing whitespace - contacting-me.md: Add mailto link for email, improve spacing and formatting - domainandemail.md: Fix typos (regitrar, programmaticaly, Malgun, teir), normalize tags/categories, clean up nested list formatting, remove redundant horizontal rules - rss.md: Reword intro sentence, clarify RSSHub description, fix trailing whitespace, remove duplicate selfhosted tag - stack.md: Convert frontmatter from TOML (+++) to YAML (---), normalize tags/categories, minor copy edits - rosterhash.md: New post about RosterHash fantasy football schedule viewer project - rr-rss-nag.md: New post explaining how to bypass RoyalRoad piracy nags in FreshRSS feeds using CSS selectors - security-groups.md: New post walking through the evolution of formatting AWS security groups in Terraform across three iterations --- content/posts/FFB.md | 31 ++- content/posts/contacting-me.md | 13 +- content/posts/domainandemail.md | 74 +++--- content/posts/rosterhash.md | 24 ++ content/posts/rr-rss-nag.md | 116 +++++++++ content/posts/rss.md | 24 +- content/posts/security-groups.md | 408 +++++++++++++++++++++++++++++++ content/posts/stack.md | 36 +-- 8 files changed, 636 insertions(+), 90 deletions(-) create mode 100644 content/posts/rosterhash.md create mode 100644 content/posts/rr-rss-nag.md create mode 100644 content/posts/security-groups.md diff --git a/content/posts/FFB.md b/content/posts/FFB.md index 4d925aa..6e2cc20 100644 --- a/content/posts/FFB.md +++ b/content/posts/FFB.md @@ -1,43 +1,40 @@ - - --- title: "Fantasy Football Draft Tools" date: "2024-08-29" tags: - - FantasyFootball - - Reference + - reference + - draft categories: - - fantasyfootball + - fantasy-football --- - -*** +--- # Draft Tools -*** +--- ### > Beer Sheets -I used to recommend and use [Beer Sheets](https://footballabsurdity.com/draft-sheet-form/), a tool I found online and everytime I used it it gave good results. I had gotten good feed back from people I've recommneded it to. The original creator has moved on after the 2023 season and the new team has yet to prove they're as good. +I used to recommend and use [Beer Sheets](https://footballabsurdity.com/draft-sheet-form/), a tool I found online that gave good results every time I used it. I've gotten good feedback from people I've recommended it to. The original creator has moved on after the 2023 season and the new team has yet to prove they're as good. #### Usage -You can go to their main page and just copy over the settings from your league. For examples here's a [direct link](https://footballabsurdity.com/draft-sheet-form/?teams=14&bn=5&qb=1&rb=2&wr=2&rwt=2&patd=6&rutd=6&retd=6&payd=0.04&ruyd=0.1&reyd=0.1&int=-1.0&rec=0.5&fum=-2.0) to the settings my family league is using. +You can go to their main page and just copy over the settings from your league. For example here's a [direct link](https://footballabsurdity.com/draft-sheet-form/?teams=14&bn=5&qb=1&rb=2&wr=2&rwt=2&patd=6&rutd=6&retd=6&payd=0.04&ruyd=0.1&reyd=0.1&int=-1.0&rec=0.5&fum=-2.0) to the settings my family league is using. -There doesn't seem to be support for PPFD (point per first down) so I just kept it at 1/2 ppr. +There doesn't seem to be support for PPFD (point per first down) so I just kept it at 1/2 ppr. -*** +--- # Season Long Tools, Podcasts, Youtube -*** +--- ## Tools ### > Fantasy Pros -[FantasyPros](https://www.fantasypros.com/). I've used both free and the paid version. The free version is all you need while the paid tools offer quality-of-life (aka just figure it out for me) tools for trading and waiver wire pick ups. +[FantasyPros](https://www.fantasypros.com/). I've used both the free and paid versions. The free version is all you need while the paid tools offer quality-of-life (aka just figure it out for me) tools for trading and waiver wire pick ups. -The paid version does offer syncing multiple leagues but I just use [multiple throwaway accounts](/posts/domainandemail) to bypass the limit. +The paid version does offer syncing multiple leagues but I just use [multiple throwaway accounts](/posts/domainandemail) to bypass the limit. ## Podcasts and Youtube @@ -47,11 +44,11 @@ The paid version does offer syncing multiple leagues but I just use [multiple th ### > Fantasy Footballers -[Fantasy Footballers](https://www.youtube.com/thefantasyfootballers) have a website, tools, podcast and youtube channel. I prefer the youtube channel, it's great for background listening as they're entertaining and long enough for doing stuff around the house. +[Fantasy Footballers](https://www.youtube.com/thefantasyfootballers) have a website, tools, podcast and youtube channel. I prefer the youtube channel, it's great for background listening as they're entertaining and long enough for doing stuff around the house. ### > Late Round with JJ Zachariazon -[LateRound](https://lateround.com/#newsletter) is a podcast which is basically the exact same as the newsletter. Newsletter will usually have +1 bit of info to encourage getting it, e.g podcast covers 10 Waiver Wire Pickups while newsletter has 11. Data backed and pretty accurate. +[LateRound](https://lateround.com/#newsletter) is a podcast that covers basically the same content as the newsletter. Newsletter will usually have +1 bit of info to encourage getting it, e.g podcast covers 10 Waiver Wire Pickups while newsletter has 11. Data backed and pretty accurate. ### > Rams Brothers diff --git a/content/posts/contacting-me.md b/content/posts/contacting-me.md index e7d7f3a..b0f77e4 100644 --- a/content/posts/contacting-me.md +++ b/content/posts/contacting-me.md @@ -4,11 +4,16 @@ description: "If you need to reach me." date: "2019-02-28" --- -*** -### E-mail -Eddie@edfig.dev -*** +--- + +### E-mail + +[Eddie@edfig.dev](mailto:Eddie@edfig.dev) + +--- + ### Seldom used Socials + [@edfig@mastodon.social](https://mastodon.social/@edfig) [@edfig.dev](https://bsky.app/profile/edfig.dev) diff --git a/content/posts/domainandemail.md b/content/posts/domainandemail.md index a9dd759..19e5cd0 100644 --- a/content/posts/domainandemail.md +++ b/content/posts/domainandemail.md @@ -1,17 +1,18 @@ --- title: "Custom Domain and Emails" date: "2024-10-07" -tags: - - DNS -categories: - - DIY +tags: + - dns + - email +categories: + - selfhosted --- # What is this? -Let's say you wanted to buy a domain like `edfig.dev`. You can host a personal blog at this address. Once you buy the domain not only can you host content but you with a bit more tinkering you can send and receive emails with the domain. +Let's say you wanted to buy a domain like `edfig.dev`. You can host a personal blog at this address. Once you buy the domain, not only can you host content, but with a bit more tinkering you can send and receive emails with it. -You can email `eddie@edfig.dev` or `admin@edfig.dev` and that email will make its way to my inbox. You can set up rules to handle specific addresses too. +You can email `eddie@edfig.dev` or `admin@edfig.dev` and that email will make its way to my inbox. You can set up rules to handle specific addresses too. You'll need to create accounts for the following: - Mailgun.com @@ -19,49 +20,46 @@ You'll need to create accounts for the following: # Setting it up ---- ## 1. The Domain ---- -You can buy a domain from any regitrar, I recommend [PorkBun](https://porkbun.com/) or [Cloudflare](https://www.cloudflare.com/products/registrar/). I'll be using Porkbun for this discussion. -Pricing will depend on the name and what TLD (the `@something.com` part). I occasionly run into issues with sites not recognizing `eddie@fig.systems` as a valid email address because it's a lesser known domain. +You can buy a domain from any registrar, I recommend [PorkBun](https://porkbun.com/) or [Cloudflare](https://www.cloudflare.com/products/registrar/). I'll be using Porkbun for this discussion. -Once you have it you can enter DNS records to to where you host stuff or start using it for email. +Pricing will depend on the name and what TLD (the `.com` part). I occasionally run into issues with sites not recognizing `eddie@fig.systems` as a valid email address because it's a lesser known domain. ---- -## 2. The Email ---- -Email is one of those things you shouldn't host yourself, it's very annoying. But luckily there's services out there that take care of most of the hassle. [MailGun](https://www.mailgun.com/) and [SendGrid](https://sendgrid.com/en-us) are two such services. I'll be using Mailgun here. +Once you have it you can enter DNS records to where you host stuff or start using it for email. -With Malgun I can: +## 2. The Email + +Email is one of those things you shouldn't host yourself, it's very annoying. But luckily there are services out there that take care of most of the hassle. [MailGun](https://www.mailgun.com/) and [SendGrid](https://sendgrid.com/en-us) are two such services. I'll be using Mailgun here. + +With Mailgun I can: - Receive emails at custom email addresses with my domain - Route those emails based on rules -- - e.g. Emails sent to `no-rreply@edfig.dev` are completely dropped + - e.g. Emails sent to `no-reply@edfig.dev` are completely dropped - Send emails AS those email addresses through gmail -- - Receive an email at `admin@edfig.dev` at my regular gmail account and reply as `admin@fig.systems` -- Use their API to programmaticaly send emails + - Receive an email at `admin@edfig.dev` at my regular gmail account and reply as `admin@fig.systems` +- Use their API to programmatically send emails - Use their SMTP servers to send as custom email addresses -- - My self hosted services send notification emails as `no-reply@fig.systems` or as `service_name@fig.systems` + - My self hosted services send notification emails as `no-reply@fig.systems` or as `service_name@fig.systems` ---- ## 3. Setting up DNS ---- -1. Buy a domain at porkbun. + +1. Buy a domain at porkbun. Pick your favorite. I'll be using `figgy.foo` for this, there was a good deal on it. -2. Log into Mailgun -- Go to Send -> Sending -> Domains +2. Log into Mailgun +- Go to Send -> Sending -> Domains - Click on "Add New Domain" - Add `figgy.foo`, leave the rest blank, click Add Domain -3. Add DNS records to porkbun. +3. Add DNS records to porkbun. -You'll be provided with records for sending, receiving, and tracking. +You'll be provided with records for sending, receiving, and tracking. -In Porkbun Domain Management select `DNS` when you hover over your new domain. +In Porkbun Domain Management select `DNS` when you hover over your new domain. -Copy the entries over. Make sure the Types match and that you leave off the `figgy.foo` portion in the `host` field in porkbun. Anything you add in the host field will automatically append your domain to the end of it. If the field is just `figgy.foo` then the host field blank. +Copy the entries over. Make sure the Types match and that you leave off the `figgy.foo` portion in the `host` field in porkbun. Anything you add in the host field will automatically append your domain to the end of it. If the field is just `figgy.foo` then leave the host field blank. Copy all the Value fields from Mailgun to the Answer field in Porkbun and then click on Verify at the top right. You should see the status change to Active. @@ -69,30 +67,28 @@ This is what your records in porkbun should look like. ![porkbun-email-dns-records](/images/porkbunemailrecords.png "A picture showing how porkbun records should look") ---- ## 4. Setting up Mailgun ---- ### Routing emails. -1. Go to Send -> Receiving and Create a Route. +1. Go to Send -> Receiving and Create a Route. -2. Expression Type -> Match Recepient +2. Expression Type -> Match Recipient - Enter `admin@figgy.foo` -3. Enable Forward and fill in your personal address. For me that'd be my normal gmail address. +3. Enable Forward and fill in your personal address. For me that'd be my normal gmail address. -4. Set priority to 50 so you have space to add future routes before or after this route. +4. Set priority to 50 so you have space to add future routes before or after this route. 5. Add a simple description like "send to gmail" and Create the Route. -At the free teir you can only have 5 routes total. I only use the following: +At the free tier you can only have 5 routes total. I only use the following: 1. Match `no-reply@figgy.foo`, Store and Notify and Stop processing. 2. Match `family@figgy.foo`, forward that email to multiple family members. - Useful for events and family plans. -3. Match `Kindle@figgy.foo`, forward to my custom [Amazon provided](https://www.amazon.com/sendtokindle/email) kindle email address for sending epubs/pdfs. +3. Match `Kindle@figgy.foo`, forward to my custom [Amazon provided](https://www.amazon.com/sendtokindle/email) kindle email address for sending epubs/pdfs. - much friendlier address than what they make for you. 4. A catch all final route that just forwards to my personal address. - -Number 4 is where most of the magic and utility of setting all this up happens. I can give out unlimited custom email address and I'll know who sent them by the address. That is if I give out `businessName@fig.systems` I can later use that in gmail to filter, block, or search for anything related to that business. I can even see who sold my info if I start getting spam from that address. + +Number 4 is where most of the magic and utility of setting all this up happens. I can give out unlimited custom email addresses and I'll know who sent them by the address. That is, if I give out `businessName@fig.systems` I can later use that in gmail to filter, block, or search for anything related to that business. I can even see who sold my info if I start getting spam from that address. diff --git a/content/posts/rosterhash.md b/content/posts/rosterhash.md new file mode 100644 index 0000000..c2d1e6e --- /dev/null +++ b/content/posts/rosterhash.md @@ -0,0 +1,24 @@ +--- +title: "RosterHash: fantasy football schedule viewer" +date: "2024-11-20" +tags: + - fantasy-football + - selfhosted +categories: + - projects +--- + +I joined another league this year. + +I was losing track of who played when and what league. + +So I made ~~GameTime (nope, that's taken)~~ [RosterHash](https://rosterhash.edfig.dev)! + +![Screenshot_20251120_150110](https://bear-images.sfo2.cdn.digitaloceanspaces.com/edfig/screenshot_20251120_150110.webp) + +Enter your Sleeper username and away you go. + +Features: +- Can save up to 4 favorite teams for checking when they play and the score +- Shows your players per league per game and color codes it all. +- Completed games auto-collapse and get out of the way diff --git a/content/posts/rr-rss-nag.md b/content/posts/rr-rss-nag.md new file mode 100644 index 0000000..e1fa077 --- /dev/null +++ b/content/posts/rr-rss-nag.md @@ -0,0 +1,116 @@ +--- +title: "Bypassing RoyalRoad's piracy nags in RSS Feeds" +date: "2024-11-20" +tags: + - rss + - freshrss +categories: + - selfhosted +--- +# Issue + +[Royal Road](https://www.royalroad.com/home) likes to annoy pirates. This is (arguably) good. + +Royal Road doesn't care if they annoy RSS users. This is **bad**. + +Here's a walkthrough of the problem and the fix. + +### The Problem: + +First, let's look at the full picture of why this is happening. + +The Original Website HTML (Simplified) + +When you visit the Royal Road chapter in your browser, the full page's HTML looks something like this. Your browser loads the section and the section. +```HTML + + + + + + +... + + +
+ +

+ Nathan got the message... +

+ +

 

+ +

+ Sarya waved her hand... +

+ +

 

+ + +
The narrative has been stolen; if detected on Amazon, report...
+
+ +
+ + + +``` + + +On the live website, your browser reads the `